Отправка почты из командной строки

Некоторое время назад, уже довольно большое по правде, у меня в 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

можно отправить три письма подряд, с интервалом в три минуты.

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