Отправка e-mail из командной строки Windows

Если вдруг нужно отправлять автоматические письма из командного файла, то очень поможет консольный клиент Blat. Я его использую для автоматической рассылки избранного с bash.org.ru по списку друзей:

@echo off
setlocal

set blat=D:\path\to\Programs\blat307\full\blat.exe

set list=D:\path\to\Programs\blat307\files\maillist.txt
set smtpsender=username@yandex.ru 
set smtpserver=smtp.yandex.ru 
set smtpport=25 
set smtpuser=username@yandex.ru 
set smtppwd=password
set subj=D:\path\to\Programs\blat307\files\subj.txt
set msg=D:\path\to\Programs\blat307\files\msg.txt
set logfile=D:\path\to\Programs\blat307\log\blat_log.txt
set codepage=Windows-1251
for /f %%f in ('type %list%') do (
%blat% -to %%f -f %smtpsender% -server %smtpserver% -port %smtpport% -u %smtpuser% -pw %smtppwd% -log %logfile% -charset %codepage% -sf %subj% -bodyF %msg%
)
ECHO Sended > %msg%
:END
Что делает скрипт:
  • Сначала устанавливаются локальные переменные, чтобы потом в командной строке не писать длинные строки.
  • Файл maillist.txt содержит список адресов, по которым будет проводится отправка писем - по одному адресу на строку.
  • Переменные "subj" и "msg" содержат путь к файлам, которые содержат, соответственно, тему письма и тело письма. Иначе русские символы превращаются в "крякозябры", хоть зауказывайся кодовую страницу.
  • В цикле перебираются адреса из файла maillist.txt и по ним отправляется письмо.
  • После отправки писем и выхода из цикла в файл сообщения записывается "Sended". Это сделано для того, чтобы продвинутый планировщик nnCron мог понять, что файл пустой и отправлять ничего не надо.