Что нового

Отправка файлов на email

Rucobor

Новичок
Нашел код. Он должен отсылать файл на email сразу ,как тот попадает в папку. Это нужно для передачи документов из сети организации на мыло.
Почему-то не работает. Помогите разобраться, что там куда записывать?
При поступлении файла в папку внешняя программа должна преобразовать эту информацию в электронное письмо и отослать его адресату. Конечно, должен быть зарегистрирован почтовый адрес, с которого будут уходить письма. Вполне подойдет почтовый адрес на любом публичном почтовом сервисе - 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
 

Belfigor

Модератор
Локальный модератор
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
(подробнее), а обычный код соответственно в тег [code]
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Верх