Что нового

И снова об отправке письма через AutoIT

Paul_Markey

Новичок
Сообщения
18
Репутация
1
Рылся по форуму в поисках решения для отправки письма и наткнулся на скрипт, который использовал библиотеку Blat.
Код:
$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
$FromName = "Mail Sender"               ; имя отправителя
$FromAddress = "[email protected]" ; адрес отправителя
$ToAddress = "[email protected]"      ; адрес назначения
$Subject = "test_mail_8"              ; тема письма
$Body = "body_of_mail"            ; тело письма (сам текст письма)
$AttachFiles = "D:\autoit_scripts\email\settings.ini"; прикреплённые файлы к письму
$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
$Password = "12345z"                     ; пароль аккаунта, с которого отправляется

$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles
;Run (@scriptdir & "\blat.exe " & $BlatArgs, @ScriptDir, @SW_HIDE )
_SendMail($BlatArgs)

Func _SendMail($CMDstring)
    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

        Select
            Case $result[0] = 13
                MsgBox(16,"Ошибка. Код ошибки " & $result[0], "Не могу открыть временный файл во временной папке")

            Case $result[0] = 12
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не указаны или не найдены в реестре аргументы -server или -f")

            Case $result[0] = 3
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу прочитать файл с текстом письма или приложенный файл")

            Case $result[0] = 2
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Почтовому серверу не понравился адрес отправителя; или он отказал нам в подключении; или неверный пароль; или не найден файл с текстом письма")
            Case $result[0] = 1
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу открыть SMTP сокет. Проверьте подключение к Интернету; либо неверные аргументы")
            Case $result[0] <> 0
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Неизвестная ошибка")
        EndSelect
    Until $result[0] = 0
    MsgBox(16, "нет ошибки.", "Письмо отправлено :-)" & @CRLF)
    DllClose ($BlatDLL)
EndFunc

Адрес темы:http://autoit-script.ru/index.php?topic=783.0
Но (не я первый) наткнулся на проблему, что скрипт выдает ошибку "Не могу открыть SMTP сокет". Поиски решения данной проблемы не увенчались успехом (нашел только предложения использования других скриптов). Но хотелось бы использовать именно данный вариант отправки.
Почему, все таки, выдает скрипт эту ошибку и как ее решить?
P.S. Сильно не ругайте если вдруг решение было, но я его не увидел.
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Какая почта использовалась для отправки?
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
Paul_Markey
порт не указан . смотри здесь http://autoit-script.ru/index.php?topic=9693.0
это работает.
еще, как я понял, если параметр пустой ( к примеру файла не нужен для отправки), то в функции не нужно использовать этот параметр
 
Автор
P

Paul_Markey

Новичок
Сообщения
18
Репутация
1
Спасибо. Ошибка видимо кроется в функции обработки ошибок.
Изначальный код из ссылки тоже не сработал. Рабочий код, без проверки, у меня выглядит так:
Код:
$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
$Port = "25"                          ; Порт
$FromAddress = "[email protected]" ; адрес отправителя
$ToAddress = "[email protected]"      ; адрес назначения
$Subject = """123"""              ; тема письма
$Body = """123"""            ; тело письма (сам текст письма)
$AttachFiles = "I:\345.txt"; прикреплённые файлы к письму
$Username = "[email protected]"            ; имя пользователя аккаунта, с которого отправляется
$Password = "qwerty"                     ; пароль аккаунта, с которого отправляется

$BlatArgs = "-server "&$SmtpServer&" -port "&$Port&" -f "&$FromAddress&" -t "&$ToAddress&" -s "&$Subject&" -body "&$Body&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles
_SendMail($BlatArgs)

Func _SendMail($CMDstring)
    $BlatDLL = DllOpen ("blat.dll")
    $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)
    DllClose ($BlatDLL)
EndFunc
 
Верх