Что нового

[Сеть, интернет] Поправить пример скрипта. Ошибка при разрыве связи с инетом

D

dreamorder

Гость
Доброго времени суток гос-да программисты.
Благодаря помощи отзывчивых людей этого форума, написал скрипт, в нём есть вот такой модуль(пример с форума):


Код:
Case $Button1

			Call('_send')
			_send("дети", "Забери ребёнка из сада", "")


Func _send($Body, $Subject, $Attachment)
$Text = GUICtrlRead($texty, 1) ; возвращает текст пункта меню
$FromAddress = '[email protected]'
$ToAddress = '[email protected]'
$Body = $Text
$SMTPServer = 'smtp.yandex.ru'
$Username = '[email protected]'
$Password = "v22gg3456kkghfe"
$Port = '25'

$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = $FromAddress
        .To = $ToAddress
        .Subject = $Subject
        .TextBody = $Body
        .AddAttachment ($Attachment)
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = $SMTPServer
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = $Username
        .Item ($str & "sendpassword") = $Password
        .Item ($str & "smtpserverport") = $Port
        .Update
    EndWith
 $hMAIL.Send
EndFunc


при не стабильной связи с инетом, ну или разрыве, скрипт конечно не работает и выдаёт ошибку:

---------------------------
AutoIt Error
---------------------------
Line 86 (File "C:\Users\Gosha\Desktop\ssis.au3"):

$hMAIL.Send
$hMAIL.Send^ ERROR

Error: The requested action with this object has failed.
---------------------------
ОК
---------------------------

Очень прошу, помогите пожалуйста "поймать ошибку", и к примеру выйти из скрипта при разрыве связи,
но при этом, что бы окно Autoit Error не вылазило.
Заранее всем спасибо.
:smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
должна быть отработка ошибок. вот как это было реализовано в одной программке
Код:
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($s_Body, "<") And StringInStr($s_Body, ">") Then
        $objEmail.HTMLBody = $s_Body
    Else
        $objEmail.Textbody = $s_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                $i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x]
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
EndFunc   ;==>_INetSmtpMailCom

Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
    SetError(1)
    Return
EndFunc   ;==>MyErrFunc
 
Автор
D

dreamorder

Гость
мнда, для меня этот код(без пояснений) пока как дремучий лес, понял 1/5 часть всего :'(
 

Mur

Осваивающий
Сообщения
132
Репутация
32
А что там пояснять-то?
Та же отправка письма, но с обработкой ошибок.
В начале пользовательские данные, в середине сама инициализация отправки, а ближе к концу "поимка" и обработка ошибок...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот примерная реализация. из собственного проекта. функции взяты из программы, которую писал не я.
 
Автор
D

dreamorder

Гость
joiner
Большое спасибо! Пример очень хороший ;)

Код:
Case $Button1
              InetRead("http://www.yandex.ru")
			  If @error Then
			  MsgBox(0, "", "Нет соединения")


вот это мне помогло из этого примера :ok:
 
Верх