Когда-то давно потребовалось мне автоматизировать сбор почты из ящика на mail.ru через pop3. Решение получилось примерно таким:
function getmail_mailru {Однако сегодня команда mail.ru прислала сообщение, что
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"}
'
}
После 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"}
'
}
Комментариев нет:
Отправить комментарий