Настройка fetchmail для проверки и получения почты Gmail [2009]
Постановка задачи
Вы хотите получать/проверять почту Gmail используя программу fetchmail
Исходные данные
- у есть почтовый ящик gmail_account@gmail.com - вы используете Unix-подобную операционную систему (Linux, FreeBSD, etc...)
Наличие необходимых программ
Если программа fetchmail у вас еще не установлена, установите ее одним из способов, предусмотренных в вашей операционной системе. С помощью одной только программы fetchmail можно проверить наличие писем на почтовом сервере, но для того чтобы эту почту получить fetchmail использует MDA (Mail Delivery Agent) - другую программу. Обычно по умолчанию это sendmail, так что проверьте что sendmail тоже установлена. Sendmail настраивать не нужно - достаточно настроек по умолчанию.
Быстрый старт - проверка новых сообщений на сервере
В вашем домашнем каталоге создайте файл .fetchmailrc:
$ touch /home/user/.fetchmailrc
Установите для него права чтения/записи для владельца и запрет всего остальным:
$ chmod 600 /home/user/.fetchmailrc
Важное замечание: так как в этом файле будет пароль к учетной записи Gmail, вы должны быть уверены в том, что никто кроме вас не сможет посмотреть его содержимое. То есть тот кто имеет непосредственный или сетевой доступ к вашему компьютеру а также полномочия вашей учетной записи или учетной записи root может узнать ваш пароль Gmail.
Откройте .fetchmailrc в своем любимом текстовом редакторе и создайте следующее содержимое:
poll pop.gmail.com port 995 proto POP3 user 'gmail_account@gmail.com' pass 'gmail_password' ssl
Подразумеваем что у вас есть подключение к Internet, поэтому можно сразу проверить наличие на сервере новых сообщений:
$ fetchmail -c fetchmail: Ошибка проверки сертификата сервера: unable to get local issuer certificate fetchmail: Ошибка проверки сертификата сервера: certificate not trusted fetchmail: Ошибка проверки сертификата сервера: unable to verify the first certificate 1 сообщение для gmail_account@gmail.com на pop.gmail.com (6891 октетов).
Опция -c говорит fetchmail не получать почту а только проверить наличие новых писем. Мы видим, что в почтовом ящике есть 1 новое сообщение. От предупреждений касающихся ssl сертификата избавимся позже - они имеют статус предупреждений только и не влияют на функционал. Кстати в некоторых версиях fetchmail вы вообще можете их не получить.
Получение сообщений с сервера
Для получения писем с сервера fetchmail использует MDA (Mail Delivery Agent), слушающий порт 25 (стандатртный порт mail службы). В качестве MDA используем sendmail, так как это вариант по умолчанию для большинства дистрибутивов. Если sendmail у вас уже работает как фоновый процесс (демон), то выполнив следующую команду, вы получите сообщения с сервера (в случае наличия там таковых конечно). Но для ясности настройки имеет смысл показать какой будет результат работы fetchmail, если sendmail не запущена (параметр -k говорит fetchmail не удалять письма на почтовом сервере после их получения):
$ fetchmail -k
fetchmail: Ошибка проверки сертификата сервера: unable to get local issuer certificate fetchmail: Ошибка проверки сертификата сервера: certificate not trusted fetchmail: Ошибка проверки сертификата сервера: unable to verify the first certificate 1 сообщение для gmail_account@gmail.com на pop.gmail.com (6891 октетов) считывается сообщение gmail_account@gmail.com@gmail-pop.l.google.com:1 из 1 (6891 октетов)... fetchmail: сбой подключения к localhost:smtp [127.0.0.1/25]: В соединении отказано. fetchmail: Сбой SMTP-подключения к localhost fetchmail: Ошибка SMTP-транзакция при выборке из gmail_account@gmail.com@pop.gmail.com и доставке на хост SMTP localhost fetchmail: Статус запроса=10 (SMTP)
Это значит ваш компьютер отказал в приеме почты на порту 25.
Запускаем sendmail с параметром -bd (переход в режим фонового процесса):
# sendmail -bd
Примечание: эту команду необходимо выполнять от пользователя root (или использовать для этого sudo), так как только запуск программы с полномочиями администратора позволят ей открыть порт 25. При успешном старте sendmail молча переходит в фоновую работу, ничего не выводя на терминал.
Теперь повторяем запуск fetchmail:
$ fetchmail -k
fetchmail: Ошибка проверки сертификата сервера: unable to get local issuer certificate fetchmail: Ошибка проверки сертификата сервера: certificate not trusted fetchmail: Ошибка проверки сертификата сервера: unable to verify the first certificate 1 сообщение для gmail_account@gmail.com на pop.gmail.com (6891 октетов). считывается сообщение gmail_account@gmail.com@gmail-pop.l.google.com:1 из 1 (6891 октетов)...... не пропущено
Все, сообщение находится в вашем каталоге для почты (по умолчанию это обычно /var/spool/mail/user):
$ ls -l /var/spool/mail/user/ -rw------- 1 user users 7,2K 2008-11-30 02:47 msg.JHE
Теперь можете читать его вашей любимой программой для работы с сообщениями, например mutt.
Избавимся от предупреждений касающихся ssl сертификата
В вашем домашнем каталоге создайте каталог .sslcerts (это только пример, вы можете создать другой каталог в другом месте):
mkdir /home/user/.sslcerts
Установите на него права чтения/записи/выполнения для владельца, остальным запрет:
chmod 700 /home/user/.sslcerts
Получите сертификат Gmail (у вас должен быть установлен пакет программ openssl):
Откройте файл .sslcerts/gmail.pem в текстовом редакторе и удалите все содержимое кроме блока данных, включительно строки '-----BEGIN CERTIFICATE-----' и '-----END CERTIFICATE-----'. Таким образом получаем содержимое:
Получаем отпечаток ключа (fingerprint) сервера Gmail, для чего выполняем fetchmail с опциями -c и -v. Опция -c для холостого хода - только проверка почтового ящика, а -v включает многословный режим, который среди прочих отчетов показывает нам отпечаток ключа сервера):
Теперь добавляем отпечаток ключа и путь к каталогу с сертификатами в файл .fetchmailrc, так что теперь он должен быть таким:
poll pop.gmail.com port 995 proto POP3 user 'gmail_account@gmail.com' pass 'gmail_password' ssl sslcertpath /home/user/.sslcerts sslfingerprint "44:A8:E9:2C:FB:A9:7E:6D:F9:DB:F3:62:B2:9E:F1:A9"
Все, fetchmail работает без ворчания:
shell$ fetchmail -c fetchmail: Для gmail_account@gmail.com на pop.gmail.com почты нет