Отправка почты из командной строки
Некоторое время назад, уже довольно большое по правде, у меня в 1с отлично работал скрипт построенный на объекте CDO, примерно следующий
Функция ОтправитьПисьмо()
ИмяФайла = "C:Test.xml";
Сервер = "smtp.mail.ru";
Порт = "465";
Получатель = "@";
Отправитель = "@";
Пароль = "";
Попытка
CDO = Новый COMОбъект("CDO.Message");
Исключение
Сообщить("Ошибка: объект CDO.Message не создан");
Возврат Ложь;
КонецПопытки;
CDO.From = Отправитель;
CDO.To = Получатель;
CDO.Subject = "ТемаПисьма";
CDO.textbody = "Текстовое письмо";
CDO.BodyPart.Charset = "windows-1251";
CDO.HTMLBody = "HTML-письмо";
CDO.HTMLBodyPart.Charset = "windows-1251";
CDO.AddAttachment(ИмяФайла);
//По умолчанию 1-использовать каталог Pickup
Item = "http://schemas.microsoft.com/cdo/configuration/sendusing";
CDO.Configuration.Fields.Item(Item).Value = 2;
//Адрес SMTP сервера
Item = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
CDO.Configuration.Fields.Item(Item).Value = Сервер;
//0-без утентификации
//1-базовая аутентификация
//2-аутентификация NTLM
Item = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
CDO.Configuration.Fields.Item(Item).Value = 1;
//Использовать SSL
Item = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";
CDO.Configuration.Fields.Item(Item).Value = 1;
//Имя пользователя SMTP сервера
Item = "http://schemas.microsoft.com/cdo/configuration/sendusername";
CDO.Configuration.Fields.Item(Item).Value = Отправитель;
//Пароль пользователя SMTP сервера
Item = "http://schemas.microsoft.com/cdo/configuration/sendpassword";
CDO.Configuration.Fields.Item(Item).Value = Пароль;
//Порт сервера
Item = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
CDO.Configuration.Fields.Item(Item).Value = Порт;
//Таймаут
Item = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout";
CDO.Configuration.Fields.Item(Item).Value = 60;
//Обновление настроек
CDO.Configuration.Fields.Update();
Попытка
CDO.Send();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецФункции
Проблема в том что он перестал работать с ssl яндекса и гугла (хотя присутствует флаг ssl, но это не помогло), также я пользовался замечательной утилитой Blat, хорошо помогает отправлять письма из командной строки, на пример, в скриптах бэкапов.
В последних версиях платформы 1С 8.3 проблемы с SSL штатными средствами не наблюдается, есть у меня правда один клиент.., сидит на 1С 8.1 :).
Программа Blat (http://www.blat.net) - это небольшая утилита, которая может посылать почту из "Командной строки". То есть, без полноценного почтового клиента. Программа отлично работает с обычными SMTP серверами и описание наладки этого процесса достаточно хорошо документировано. И все было бы замечательно, но программа не умеет работать с SMTP серверами, которые при отправке почты требуют организации "Безопасного соединения" - SSL.
Для того чтобы заставить пакеты шифроваться можно накрутить дополнительно шифрованный канал и отправить почту через него, для этого можно поставить программу "STunnel" (http://www.stunnel.org).
Инсталлируем программу, залезаем в корень этой проги и находим файл stunnel.conf, редактируем его и приводим к этому виду:
; Some debugging stuff useful for troubleshooting
;debug = 7
;output = stunnel.log
; Use it for client mode
;client = yes
; Service-level configuration
[pop3s]
accept = 995
connect = 110
;[imaps]
;accept = 993
;connect = 143
[ssmtp]
accept = 465
connect = 25
к этому виду:
; Some debugging stuff useful for troubleshooting
debug = 7
;output = stunnel.log
; Use it for client mode
client = yes
; Service-level configuration
[pop3s]
accept = 127.0.0.1:1109
connect = pop.gmail.com:995
;[imaps]
;accept = 993
;connect = 143
[smtps]
accept = 127.0.0.1:1099
connect = smtp.gmail.com:465
После чего, воспользовавшись уже созданными во время инсталляции программы ярлыками в меню "Пуск", "Инсталлируем службу" (Service install) и "Стартуем службу" (Service start).
Далее распаковываем (обычной инсталляции она не требует) программу Blat в каталог, (пусть это будет каталог C:\Blat\), и запускаем C:\Blat\blat.exe /? Программа выдаст все параметры, с которыми она может работать.
Теперь делаем один важный момент. Запускаем из "Командной строки" такую команду:
C:\Blat\blat.exe -install -serverSMTP 127.0.0.1 -portSMTP 1099 -try 1 -u xxxx@gmail.com -pw 12345 -f xxxx@gmail.com
C:\Blat\blat.exe - путь к программе
-install - это ключ, заставляющий Blat записать в реестр настройки, которые следуют далее в нашей командной строке
-serverSMTP 127.0.0.1 - это сервер SMTP (который прописан нами в настройках в "Stunnel".
-portSMTP 1099 - порт SMTP сервера (который прописан нами в настройках "Stunnel").
-try 1 - это число попыток, если отправка почты не удалась (необязательный параметр).
-u xxxx@gmail.com - имя пользователя
-pw 12345 - пароль
-f xxxx@gmail.com - от имени кого будет приходить почта
После выполнения строки, в реестре, по этому пути:
HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat
сохранятся настройки, которые потом уже не нужно будет указывать при отправке почты через Блат. Это удобно. К тому же, это еще и безопасно тем, что в дальнейшем вам не понадобиться в параметрах blat.exe, указывать свой пароль в открытом виде (в реестре он хранится в зашифрованном виде). Хочется отметить, что команду "-install " можно и не выполнять вовсе. Это не строго обязательно. Просто потом, в дальнейшем, в параметрах программы Blat, вам придется всегда указывать абсолютно все параметры, в том числе и пароль (в открытом виде). Полная строка в этом случае будет выглядеть так:
C:\Blat\blat.exe -subject "Eto tema soobscheniya" -body " Eto telo soobscheniya " -to yyyy@yyyyy.net -serverSMTP 127.0.0.1 -portSMTP 1099 -f xxxx@gmail.com -u xxxx@gmail.com -pw 12345
А если мы выполнили команду "-install" и заранее прописали наши настройки в реестре, то строка отправки почты будет выглядеть так:
C:\Blat\blat.exe -subject "Eto tema soobscheniya" -body " Eto telo soobscheniya " -to yyyy@yyyyy.net
Как мы видим, в этом случае достаточно лишь указать тему, тело письма и кому мы его посылаем. Коротко и просто.
После удачной отправки письма, в командной строке должно появится сообщение такого вида:
Sending stdin.txt to yyyy@yyyyy.net
Subject: Eto tema soobscheniya
Login name is xxxx@gmail.com
Разумеется, без каких либо сообщений об ошибках
Создав обычный bat-файл, и запихнув туда такие строки:
C:\Blat\blat.exe -subject "Fayl 001" -body "Fayl 001" -to yyyy@yyyyy.net -attach E:\ForDC\part001.rar
ping -n 180 localhost > nul
C:\Blat\blat.exe -subject "Fayl 002" -body "Fayl 002" -to yyyy@yyyyy.net -attach E:\ForDC\part002.rar
ping -n 180 localhost > nul
C:\Blat\blat.exe -subject "Fayl 003" -body "Fayl 003" -to yyyy@yyyyy.net -attach E:\ForDC\.part003.rar
можно отправить три письма подряд, с интервалом в три минуты.