Germany | Finland | Saint Petersburg | Drive

Отправка почты из qpile (autoit пример)

Единственный способ отправить сообщение на электронную почту из портфеля на qpile - использовать внешнюю программу. 

Портфель при наступлении события должен сформировать текстовый файл с требуемой информацией, а внешняя программа должна преобразовать эту информацию в электронное письмо и отослать его адресату. Конечно, должен быть зарегистрирован почтовый адрес, с которого будут уходить письма. Вполне подойдет почтовый адрес на любом публичном почтовом сервисе - mail.ru, gmail.com и так далее. Можно просто отправлять самому себе. Вот иллюстрация одного из способов отправки сообщения. Используется стандартный механизм CDO от Майкрософт. На языке autoit получается чистый элегантный код, поэтому приведу его.


Func Send_Email(data)
#cs
data - массив стандарной для autoit структуры. Элемент 0 - длина массива, начиная с первого - элементы массива
Порядок элементов:
1 From
2 To
3 Subject
4 Smtp
5 Username
6 Password
7 Port
8 ТекстСообщения
#ce $str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
If Not IsObj($hMAIL) Then
        MsgBox(8208, "имя программы", "Не найден объект CDO. Отправка почты невозможна", 10)
Else
    With $hMAIL
       .Bodypart.Charset = "windows-1251"                   ; Кодировка
       .From                  = $data[1]
       .To                     = $data[2]
       .Subject               = $data[3]
       .TextBody            = $data[8] & @CRLF
       ;~ .AddAttachment ("C:\dir\file.ext")                    ;файл для отправки
    EndWith     With $hMAIL.Configuration.Fields
       .Item ($str & "languagecode") = 1049
       .Item ($str & "sendusing") = 2
       .Item ($str & "smtpserver") = $data[4]                  ; SMTP Server
       .Item ($str & "smtpauthenticate") = 1
       .Item ($str & "sendusername") = $data[5]             ; username
       .Item ($str & "sendpassword") = $data[6]             ; Пароль SMTP-сервера
       .Item ($str & "smtpserverport") = $data[7]            ; Порт
       .Item ($str & "smtpconnectiontimeout") = 30
       .Update
    EndWith
$hMAIL.Send
EndIf
EndFunc

Все хорошо, письма уходят, проблемы возникают при ошибках отправки (недоступен почтовый сервер и так далее). Необходимо эти ошибки перехватить и обработать. Ставим обработчик:

Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Global $oMyRet[2] Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0]   = $HexNumber
$oMyRet[1]   = StringStripWS($oMyError.description, 3)
MsgBox(4096,"имя программы","Error Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF,15)
SetError(1)                                                ; something to check for when this function returns
Return
EndFunc

В качестве развлечения можно добавить флаги SSl соединения и остальные - по вкусу.

См. также Email и SMS от робота

Добавить комментарий


Майнинг в браузере