Skip to content

Настройка fetchmail для проверки и получения почты Gmail (gmail mail fetchmail cert ssl)

Постановка задачи

Вы хотите получать/проверять почту Gmail используя программу fetchmail

Исходные данные

- у есть почтовый ящик gmail_account@gmail.com
- вы используете Unix-подобную операционную систему (Linux, FreeBSD, etc...)


Наличие необходимых программ

Если программа fetchmail у вас еще не установлена, установите ее одним
из способов, предусмотренных в вашей операционной системе.

С помощью одной только программы fetchmail можно проверить наличие писем на
почтовом сервере, но для того чтобы эту почту получить fetchmail
использует MTA (Mail Transfer Agent) - другую программу. Обычно по
умолчанию это sendmail, так что проверьте что sendmail тоже установлена.
Sendmail настраивать не нужно - достаточно настроек по умолчанию.

Для работы с ssl серификатами необходимо наличие пакета openssl.

Быстрый старт - проверка новых сообщений на сервере

В вашем домашнем каталоге создайте файл .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 использует MTA (Mail Transfer
Agent), слушающий порт 25 (стандатртный порт mail службы). В качестве
MTA используем 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):

 openssl s_client -connect pop.gmail.com:995 -showcerts > /home/user/.sslcerts/gmail.pem


Откройте файл .sslcerts/gmail.pem в текстовом редакторе и удалите все
содержимое кроме блока данных, включительно строки '-----BEGIN
CERTIFICATE-----' и '-----END CERTIFICATE-----'. Таким образом получаем
содержимое:

 -----BEGIN CERTIFICATE-----
 MIIC3TCCAkagAwIBAgIDCDijMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
 MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMDI1MTc1MzE2WhcNMDkxMjI0MTg1MzE2
 WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
 TW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xFjAUBgNVBAMTDXBv
 cC5nbWFpbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO03QxerFKZV
 8yeomuL4zSl8Pr7hMWnKMMgp/CwhwadeBmL0LQHHbjL/6z/Z59ZQvrztqkwhchA2
 APKzUwRVTyn7Shx6vBqk6oFmTqoOLmY6hbq6l8uVdUv0AfbHwio8CnLpK2+nbuFl
 flPwx1DH0E3grD8+CrH5SmScfTWbDkcXAgMBAAGjga4wgaswDgYDVR0PAQH/BAQD
 AgTwMB0GA1UdDgQWBBTJRG/OFpZt+BV43JM3NshHMjpwazA6BgNVHR8EMzAxMC+g
 LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDAf
 BgNVHSMEGDAWgBRI5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHSUEFjAUBggrBgEF
 BQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAOKr3mhxtwFCS3J6lbeaf
 3KrHKi935BZkI75sRbON+hog0t2ovcM2i7fxs3xneH8USLsHgfxNBj9tkMogMK/K
 sO/NUVZ/IfyqcNNkp2619qTQXthKRH42JKpAKgNhT1bdno3pxn+eDEpqmU3CE7IP
 HDCjWOK1fGkZ/yFAuTxuxAc=
 -----END CERTIFICATE-----


Выполряем хеширование сертификата с помощью c_rehash:

 c_rehash /home/user/.sslcerts/
 Doing /home/user/.sslcerts/
 gmail.pem => 7f549ca4.0


Получаем отпечаток ключа (fingerprint) сертификата:

 shell$ openssl x509 -in /home/user/.sslcerts/gmail.pem -noout -md5 -fingerprint
 MD5 Fingerprint=44:A8:E9:2C:FB:A9:7E:6D:F9:DB:F3:62:B2:9E:F1:A9


Теперь добавляем отпечаток ключа и путь к каталогу с сертификатами в
файл .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 почты нет
Published inCentOSFreeBSDLinuxUbuntuПочта
Яндекс.Метрика