« Intel выпускает Atom + FPGA в одном флаконе. | Canon'ичная штучка » |
Получение почты в shell-скрипте
Shell, это в смысле bash, sh, ash и т.д. Бывают такие задачи - залезть в ящик, вытащить почту и что-то с ней сделать. Есть конечно пачка софта, который при наличии напильника нужного размера можно под это дело приспособить, но на самом задача решательно при помощи того, что наверняка найдется в любой системе - echo, sleep и netcat. Единственный минус - на выходе помимо, собственно, тела письма, оказываются и куски протокольных сообщений. Но нам же это для скрипта - можно просто проигнорировать, а можно и вырезать несколько лишних строк.
Собственно, функция для bash. Подключаемся на заданный сервер по POP3, логинимся под заданным пользователем и паролем, пытаемся забрать одно письмо и удалить его, отключаемся.
getmail()
{
(echo "USER $2";
sleep 1;
echo "PASS $3";
sleep 1;
echo "RETR 1";
sleep 5
echo "DELE 1";
sleep 1;
echo "QUIT") | netcat $1 110 > /tmp/mailout.txt
}
Вызываем как getmail mail.server.net username password
По желанию в конвеер можно воткнуть iconv/enca, дабы письмо в файле оказывалось в нужной кодировке. Из минусов - фиксированная задержка на получение письма (sleep 5). Если не укладываемся в этом время, придется увеличивать.
Вот так, значит. Но это еще не все. Это прокатывает с большинством серверов, но не со всеми. Некоторые принципиальные сервера (не будем тыкать пальцем, но это гугл) категорически не работают через простой POP3, только через шифрованый. Netcat при этом разумеется несколько теряется. Но тут на помощь придет программа stunnel. Ставим, и идем править настройки в /etc/stunnel/stunnel.conf. Настройки по умолчанию должны быть вполне приемлемыми. Нам нужен режим клиента (client=yes) и служба для POP3S (заодно сразу и SMTPS сделаем):
[pop3s]
accept = 127.0.0.1:110
connect = pop.gmail.com:995
[smtps]
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
и запускаем stunnel (что-нибудь вроде /etc/init.d/stunnel start). Теперь при подключении на 127.0.0.1:110 (сервис POP3 на локалхосте) нас будет перебрасывать по шифрованому туннель на сервер гугла.
1 комментарий

“Есть конечно почка софта”
Клева, осталось ее размять и подключить к себе как дополнительную… ;-)