Долгое время для отправки писем из 1С мы использовали blat. Он хорош всем кроме того, что не умеет ни SSL, ни TLS. Что может и не является show-stopper'ом, но заставляет городить костыли (вроде локального релея или stunnel) или использовать небезопасные соединения. После недавнего поиска наткнулся на аналогичную утилиту – SendEmail. Её функционал очень похож на blat (хоть и бледнее), зато она дружит с шифрованием. Это позволяет, например, автоматически отправлять почту через учётную запись gmail (или Google Apps) без каких-либо затруднений. Почти. А затруднения есть: утилита не в курсе существования кодировок и не-ASCII символов, и хоть они ей не мешают, она не умеет даже кодировать заголовки. А вот это уже мешает почтовым программам и серверам. Можно было бы написать свой кодер, но пока лень, да и не так сложно найти существующий. После некоторых_хитрых манипуляций со строкой base64, её можно использовать в заголовках для SendEmail примерно так: FOR %%I IN ("%Outbox%\*.*") DO CALL :DeliverOneTask "%%~I"EXIT /B:DeliverOneTask SET To= SET Subject= ECHO Getting addressee and subject from %1 FOR /F "usebackq delims=" %%J IN (%1) DO IF NOT DEFINED To ( SET To="%%~J" ) ELSE ( FOR /F "usebackq delims=" %%K IN (`ECHO %%J^|base64`) DO ( SET Subject="=?cp866?B?%%K?=" GOTO :ExitFor ) ) :ExitFor ECHO Delivering %Subject% to %To% tail -n+3 %1 | sendemail -f %From% -t %To% -u %Subject% -s smtp.googlemail.com:587 -xu %User% -xp %Password% -l "%SentTasks%\%~n1.log" -o message-charset=cp866 -o timeout=3 -o message-header="Organization: =?utf-8?B?0KbQuNGE0YDQvtCz0YDQsNC0LdCh0YLQsNCy0YDQvtC/0L7Qu9GM?=" && MOVE /Y %1 "%SentTasks%"EXIT /BФайлы для этого скрипта необходимо готовить в следующем формате: адресат (одна строка; можно несколько получателей через запятую)Для простоты скрипта, поскольку многострочные темы SendEmail'у непонятно как указать, не формируя сообщения в соответствии со стандартами SMTP, длина темы обрезается по длине первой строки темы, закодированной в BASE64. Также обратите внимание, что %From% и %To% либо должны быть уже закодированы (аналогично организации), либо должны содержать только адрес. P.S. tail можно взять здесь: unxutils.sourceforge.net. |
