1

Тема: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Намедни  понадобилось организовать отправку писем из тела скрипа. Цель - обеспечить пересылку результатов работы скрипта на удаленную машину в условиях негарантированного подключения к Wifi.

Так как большинство найденного на этом форуме и на http://www.autohotkey.com разрабатывалось под AHK, а не под AHK_L, скрипты устарели и с ходу не работали. Да и вообще, информации по этому вопросу не много. В общем, собрал в кучу 3 рабочих способа и выкладываю в одном посте. Может, кому пригодится.

1) Отсылка писем при помощи библиотеки CDO. Найдено здесь: http://www.autohotkey.com/board/topic/6 … ery-ahk-l/

Код AHK_L:

+ открыть спойлер
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Recommended for catching common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

sFrom      := "mymail@gmail.com"
sTo        := "delivery@address.com"
sSubject := "Message_Subject"
sBody := "Message_Text"
sAttach := "" ;"Path_Of_Attachment" ; can add multiple attachments, the delimiter is [color=red]|[/color]

sServer   := "smtp.gmail.com" ; specify your SMTP server
nPort     := 465 ; 25
bTLS      := True ; False
nSend     := 2   ; cdoSendUsingPort
nAuth     := 1   ; cdoBasic
sUsername := "mymail@gmail.com"
sPassword := "somepassword"

pmsg :=   ComObjCreate("CDO.Message")
pcfg :=   pmsg.Configuration
pfld :=   pcfg.Fields

pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") := nSend
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") := 60
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") := sServer
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") := nPort
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") := bTLS
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") := nAuth
pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") := sUsername
pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") := sPassword
pfld.Update()

pmsg.From := sFrom
pmsg.To := sTo
pmsg.Subject := sSubject
pmsg.TextBody := sBody
Loop, Parse, sAttach, |, %A_Space%%A_Tab%
  pmsg.AddAttachment := A_LoopField
pmsg.Send()

Преимущества и недостатки:

+ открыть спойлер

Преимущества:

Способ без заморочек поддерживает TLS и SSL (опробовано на яндексе и gmail)

Недостатки:

- Нету лог-файла
- Пароль хранится в скрипте в явном виде.
- Не нашел способ прописать кодировку заголовка и тела письма, для корректного отображения у получателя.
Способы решить данные проблемы  наверняка есть, но рыться в дебрях CDO ради единичного случая...

2) Отправка писем при помощи утилиты Blat (http://www.blat.net)

Надежная и простая в использовании утилита. Можно использовать также вызовом DLL.

Код АНК, версия для exe:

+ открыть спойлер
Text = "%A_ScriptDir%\Testas.txt"  ; Путь к файлу с телом письма
;~ Body = This is a message sent with blat.dll       ; Либо тело письма здесь

eMail=delivery@address.com                                  ; Адрес получателя
subj=-s "Test Blat application" 
user=mymail@yandex.ru                                         ; Логин. Для Яндекса - также и адрес отравителя в одном флаконе :)
pass=-pw somepassword                                       ; Пароль
server=-server smtp.yandex.ru:587                        ; Сервер:порт
x=-x "X-Header-Test: Can Blat do it? Yes it Can!"
debug=-debug -log blat.log -timestamp                  ; Параметры лог-файла      
Blat_String = %Text% -to %eMail% -f %user% -u %user% %pass% %subj% %server% %debug% %x%

RunWait, blat.exe %Blat_String%, , Hide UseErrorLevel ; 
Tooltip, %A_LastError%                                           ; Проверяем на отсутствие ошибок    
Sleep, 5000
ExitApp

Код AHK_L, версия для dll:

+ открыть спойлер
Text="%A_ScriptDir%\Testas.txt"
;~ Body = This is a message sent with blat.dll

eMail=delivery@address.com
subj=-s "Test Blat dll"
user=mymail@yandex.ru
pass=-pw somepassword
server=-server smtp.yandex.ru:587
x=-x "X-Header-Test: Can Blat do it? Yes it Can!"
debug=-debug -log blat.log -timestamp 
Blat_String = %Text% -to %eMail% -f %user% -u %user% %pass% %subj% %server% %debug% %x% -attach %Text%

Blat_DLL:=DllCall("blat.dll\SendW",Str,Blat_String)  ; Обратите внимание на букву  W после команды Send. Она 
                                                                                 ; необходима для корректной передачи информации в  Юникоде в
                                                                                 ; DLL. Без нее скрипт АНК работать будет, а AHK_L - нет
msgbox %Blat_DLL% ; 0 => OK
exitapp

Форум поддержки Blat здесь: http://tech.groups.yahoo.com/group/blat/
За помощь в отладке скрипта под Blat_DLL спасибо Chip  и Tim Musson.

Преимущества и недостатки:

+ открыть спойлер

Преимущества:

- Лог-файл
- Простота и самодостаточность
- Утилиту можно проинсталировать с профайлом пользователя по умолчанию - упрощается вызов и решается проблема безопасности пары логин/пароль.

Недостатки:

В принципе, недостаток один - Blat  напрямую не поддерживает SSL. Проблему можно решить при помощи программы https://www.stunnel.org, но я  пока не занимался.

3) Отправка писем при помощи утилиты Mailsend (http://www.muquit.com/muquit/software/m … lsend.html)

простая в использовании утилита, похожая на предыдущую. Основное преимущество - поддержка SSL

Код АНК, версия для exe:

+ открыть спойлер
eMail=delivery@address.com
subj="Test MailSend application"
user=mymail
from=mymail@gmail.com
pass=somepassword
server=smtp.gmail.com
Port=465
MailSend_String =-to %eMail% -from %from% -ssl -smtp %server% -port %Port% -sub %subj% +cc +bcc -v -auth-login -user %user% -pass %pass% -attach "Test.txt,a" -M "body line1: this is a body of message"

RunWait, MailSend.exe %MailSend_String%, , Hide UseErrorLevel 

MsgBox,,, %A_LastError%, 3
ExitApp

Преимущества и недостатки:

+ открыть спойлер

Преимущества:

- Поддержка TLS и SSL (опробовано на Яндексе и gmail)
- Возможность указать кодировку письма.

Недостатки:

- Нету лог-файла. Т.е. отчет о соединении программа выводит в окно консоли, однако в файл записывать не умеет.
- Нету dll версии.

На момент поста все скрипты проверялись и были рабочими.

На очереди у меня тестовые прогоны всех скриптов в реальных условиях: отсылка накопившихся на данный момент отчетов (примерно 150 штук, вес до 3 мегабайт) и по 2 недели работы в дежурном режиме, т.е. пересылка отчетов по мере их генерации системой. По результатам - отпишусь.

2 (изменено: Александр_, 2013-03-27 02:00:01)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Ну и у всех один фатальный недостаток - требуется стороннее ПО. В первом варианте требуется аутлук, который обычно имеется, а остальные придётся с собой таскать или скачивать. Можно всё провернуть на сокетах, только коду будет много .

3

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Александр_
Давно жду от вас универсальную и финальную версию в виде библиотеки в "Коллекции скриптов и идей".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

+ offtop
serzh82saratov пишет:

Александр_
Давно жду от вас универсальную и финальную версию в виде библиотеки в "Коллекции скриптов и идей".

Её не будет. Во-первых она не очень нужна, в том же питоне гораздо удобнее работать с сетью и много документации. Во-вторых на разработку целой сетевой библиотеки уйдёт уйма времени, в той теме я выкладывал набор функций для удобной передачи строк по сети. Этого достаточно для текстовых протоколов(HTTP, SMTP, POP3), но не более.

5 (изменено: Malcev, 2014-08-21 20:31:06)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Как в этом скрипте проверить, что письмо отправлено, мессаджбоксом, а не  ComObjError?

send_email("All Ok", "CC@test.com")

send_email(Text, CC)
{
   ComObjError(false)
   pmsg := ComObjCreate("CDO.Message")
   pmsg.From := "from@test.com"
   pmsg.To := "to@test.com"
   pmsg.CC := CC
   pmsg.Subject := "Message_Subject"
   pmsg.TextBody := Text
   fields := Object()
   fields.smtpserver := "mail.test.com" ; specify your SMTP server
   fields.smtpserverport := 25
   fields.smtpusessl := True ; False
   fields.sendusing := 2   ; cdoSendUsingPort
   fields.smtpauthenticate := 1   ; cdoBasic
   fields.sendusername := "from@test.com"
   fields.sendpassword := "pass"
   fields.smtpconnectiontimeout := 60
   schema := "http://schemas.microsoft.com/cdo/configuration/"
   pfld :=  pmsg.Configuration.Fields
   For field,value in fields
      pfld.Item(schema . field) := value
   pfld.Update()
   pmsg.Send()
   return
}

6

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Что-то ступил.

return  A_LastError

7

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

equipment66 пишет:

Цель - обеспечить пересылку результатов работы скрипта на удаленную машину в условиях негарантированного подключения к Wifi.

я видимо устарел "технически",  и возник вопрос.

Зачем отсылать таким методом почту?
Если поставить например Mozilla Thunderbird, то почту можно отсылать автоматически.... или я что то в этой жизни не понимаю?

P.S. Из скрипта достаточно подать команду с ключами, без наворотов с протоколами и сторонними утилитами.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

8

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Так этот Thunderbird надо устанавливать, потом создавать профиль или профили, с которых будут отсылаться имейлы.
И наверняка еще на них будет что-то приходить.
В 5-ом же сообщении ничего, кроме автохотки  не надо.

9

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Так этот Thunderbird надо устанавливать, потом создавать профиль или профили, с которых будут отсылаться имейлы.

точно замечено, но...
1. То что надо поставить и настроить Mozilla Thunderbird это лирика - клиент то нужен, так или иначе.
2. Профиль... это настройка почтового сервера или профиль для Mozilla Thunderbird? Без первого не получится, а второе необязательно.
3. Ну да почта куда-то уходит и приходит с подтверждением доставки... вроде бы пока не придумали иного метода.

В 5-ом же сообщении ничего, кроме автохотки  не надо.

что вообще ничего... почта уходит в пустоту...  в центр галактики?

Сорри за сарказм....

Да, забыл добавить. У меня удалены IE и OutLook так они безбожно глючат.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

10

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

У меня удалены IE и OutLook так они безбожно глючат.

А для него outlook и не нужен. Его как бы вообще нет, во всяком случае на win7.
А без IE, с моими знаниями, не представляю как автоматизировать работу в интернете.

11 (изменено: Indomito, 2014-08-24 03:17:48)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Автоматизация вещь тонкая, т.е. готовых решений не бывает.

Если это на уровне системного администрирования (уровень предприятия), то лучше использовать те инструменты которые есть в xNIX-системах.

Eсли это для частного использования, то проще продукты Mozilla Foundation они мобильны, легко настраиваются под требования пользователя, хотя для автоматизации требуют знания С++ и JS.

Вот ссылки:

По сути то не так всё сложно, но потребуются некоторые усилия и знание английского языка.

P.S. Что я написал это мое мнение и спорить не надо, если конечно я где то и что-то не упустил или ошибся в ссылках, как говорится  — IMHO.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

12 (изменено: fwant, 2014-09-25 17:01:18)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Добрый день!
Пробую использовать первый вариант.
При вложении файла выпадает ошибка:
https://1.downloader.disk.yandex.ru/disk/6f3f5ffc9fc80e607d7a82f08ec66bad/mpfs/mWCMjJ6xoCqN6XvdqgN3wLrzitHhWz-q5w6pp8elD_ZfXNyXLnK6DTXbrQxciEHhRrVKsquTbEMsrfkocx0RHg%3D%3D?uid=0&filename=1.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Recommended for catching common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

sFrom      := "XX@XX.ru    "
sTo        := "YY@YY.ru"
sSubject := "Message_Subject"
sBody := "Body"
sAttach   := "D:\share\base.txt"

sServer   := "smtp.XX.ru"
nPort     := 587
bTLS      := false
nSend     := 2
nAuth     := 2
sUsername := "XX"
sPassword := "XXXX"

pmsg :=   ComObjCreate("CDO.Message")
pcfg :=   pmsg.Configuration
pfld :=   pcfg.Fields

pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") := nSend
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") := 60
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") := sServer
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") := nPort
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") := bTLS
pfld.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") := nAuth
pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") := sUsername
pfld.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") := sPassword
pfld.Update()

pmsg.From := sFrom
pmsg.To := sTo
pmsg.Subject := sSubject
pmsg.TextBody := sBody
pmsg.AddAttachment:= sAttach
pmsg.Send()

.

13

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

http://www.autohotkey.com/board/topic/6 … ery-ahk-l/

14 (изменено: emmetoya, 2014-10-13 16:45:42)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Кто-нибудь mailsend заставил отправлять сообщения на русском языке?
На одном из форумов встретил фразу

команда должна быть в кодировке 866 иначе русские буквы в теме, теле письма и пути будут кракозябами

т.е. нужно настроить как-то cmd.exe - виндовую консоль?

15 (изменено: Странникх, 2015-07-14 21:37:46)

Re: AHK: 3 способа отправки почтовых сообчений из тела скрипта AHK_L

Что-то не могу понять почему у меня не прикрепляется изображение к письму.

pmsg.AddAttachment( %A_ScriptDir% "/04.jpg" )

Вот так прикрепляет какой-то Untitled.bin

pmsg.AddAttachment(04.jpg)

Во всех остальных случаях выскакивает ошибка с путем к фалу, либо ошибка в названии файла. В пути нет русских символов.

Может кто знает как задать прикрепление файла?

P.S.: http://www.autohotkey.com/board/topic/6 … ery-ahk-l/ не нашел решения.
Возникает с Loop вот что:
http://sh.uploads.ru/t/ieBFR.jpg