Показаны сообщения с ярлыком mail. Показать все сообщения
Показаны сообщения с ярлыком mail. Показать все сообщения

7 окт. 2014 г.

sendemail ssl error

Продолжая ворошить старые скрипты, уже в другом месте и по другому поводу столкнулся с проблемой следующего плана: для отправки email-сообщений с вложениями из тела скрипта используется функция, вызывающая sendеmail с нужными параметрами:
function file2email        {
     if [ -e $FILE ]; then
          echo "Sending..." >> /var/log/send.log
           /usr/bin/sendemail -f script@example.org -t admin@example.org \
                -m "You received file $FILE from $USER"  \
                 -a $FILE -o tls=yes -s smtp.example.org \
                 -xu script@example.org -xp secretpass \
                 -u "File from $USER" -l /var/log/sendemail.log
     fi
      }
 И при переносе функция сломалась:
invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332
На просторах Сети нашлась таблетка: в строке 1490 вышеуказанного файла заменить строчку

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
на строчку
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i 
Благодарность неизвестному мне товарищу =)

22 сент. 2014 г.

bash + pop3s connection

Когда-то давно потребовалось мне автоматизировать сбор почты из ящика на mail.ru через pop3. Решение получилось примерно таким:
function getmail_mailru {
expect -c '
        log_file -noappend /tmp/mail.log
        spawn /bin/nc pop.mail.ru 110
        set timeout 3
        expect "+OK"  {send "USER username\r" ; send_user "user sent\n"}
        expect "+OK"  {send "PASS password\r" ; send_user "pass sent\n"}
        expect "+OK Welcome!"   {send "RETR 1\r"}
        expect -regexp {^.}   {send "DELE 1\r"}
        expect "+OK message 1 deleted"   {send "QUIT\r"}
        expect "*maildrop empty" {send "QUIT\r" ; send_user "empty mailbox\n"}
        '
}
Однако сегодня команда mail.ru прислала сообщение, что
После 22 сентября на POP3 и SMTP-серверах останется только безопасная
авторизация через протокол SSL
Возможно, они и раньше предупреждали, но до моего сведения сия идея дошла только сегодня, когда уже полдня почта не забиралась.
Решение: заменить строчку
spawn /bin/nc pop.mail.ru 110
на
spawn /usr/bin/openssl s_client -connect pop3.mail.ru:995
Таким образом, соединение с сервером снова будет установлено.
Однако тестирование выявило еще одну проблему: при посылке команды RETR 1 соединение с почтовым сервером подвисало с сообщением RENEGOTIATING.
Выяснилось, что такое поведение вызвано тем, что заглавная R воспринимается утилитой s_client как команда переподключения к серверу.
CONNECTED COMMANDS
       If a connection is established with an SSL server then any data received from the server is displayed and any key presses will be sent to the server. When used interactively (which means neither -quiet nor -ign_eof have been given), the session will be renegotiated if the line begins with an R, and if the line begins with a Q or if end of file is reached, the connection will be closed down.
Решение: не использовать верхний регистр, так как для общения с почтовым сервером он не обязателен.
function getmail_mailru {
expect -c '
        log_file -noappend /tmp/mail.log
        spawn /usr/bin/openssl s_client -connect pop3.mail.ru:995
        set timeout 3
        expect "+OK"   {send "user username\r" ; send_user "user sent\n"}
        expect "+OK"    {send "pass password\r" ; send_user "pass sent\n"}
        expect "+OK Welcome!"  {send "retr 1\r"}
        expect -regexp {^.}  {send "dele 1\r"}
        expect "+OK message 1 deleted"  {send "quit\r"}
        expect "*maildrop empty"   {send "quit\r" ; send_user "empty mailbox\n"}
        '
}

5 авг. 2009 г.

Отправка e-mail с вложением из консоли

Возникла необходимость в сабже в интересах автоматизации. Возможные решения:

1) (cat; uuencode file_name file_name) | mail -s "Subject" email

2) tar cf - src_tree | compress | uuencode src_tree.tar.Z | mail sys1!sys2!user

3) echo "text" | mutt -x -s "Subj" -a /path/to/file email

18 июл. 2008 г.

почтовая "разморозка"

Если в очереди exim4 скопилось много frozen мейлов, и надобно их очистить, есть как минимум три способа это сделать (с)перто:
корректный:

Юзаем exipick - утилита, показывающая сообщения в очереди.
exipick -zi | xargs exim -Mrm //очистит все замороженные сообщения из очереди
exipick -i | xargs exim -Mrm //очистит все сообщения из очереди
где
exipick -z - показывает замороженные сообщения
exipick -i - показывает ID сообщений
exim -Mrm ID - удаляет из очереди сообщение с ID

скриптово-васкирный ;) :
#!/bin/bash
/etc/init.d/exim4 stop;
rm -rf /var/spool/exim/input.bak;
mv /var/spool/exim/input /var/spool/exim/input.bak;
mkdir /var/spool/exim/input;
chown mailnull.mail /var/spool/exim/input;
chmod 750 /var/spool/exim/input;
/etc/init.d/exim4 start;
суровый:
rm -rf /var/spool/exim/input/*

Работают все три, но пользоваться ясен пень лучше первым.