Работа с почтой mail.ru через PHP
Всем привет, давно не писал, чего то совсем времени не хватает, но пора уже обновить -).
Когда то давно я делал функцию, точнее скрипт, который бы по крону (cron) соединялся с почтой, и с определенного раздела сам брал бы вложенные файлы. И вот сейчас на один проект, понадобилась такая же система, есть некая почта на mail.ru, на которую поставщик присылает свежие прайс-листы в xls или xlsx.
Найдя свой старый скрипт, я попробовал соединиться с mail.ru, но ничего не получилось:
Can't connect: Can't open mailbox {pop.mail.ru:110/pop3}INBOX: invalid remote specification
Так как прошло около года, я понял что у mail.ru сменились спецификации соединения. Стал искать в интернете, как нужно правильно указать, но везде устаревшие данные, так же как у меня в скрипте, используется pop3 и imap. Решив что pop3 уже не используется, я поменял строку запроса на imap и порт по умолчанию 143, на что скрипт стал ругаться мне:
Can't connect: Certificate failure for imap.mail.ru: unable to get local issuer certificate: /C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
И судя по ошибке, mail стал использовать шифрование SSL для соединения по почте. Но что бы точно определить это я пошел в описание настроек протоколов:
http://help.mail.ru/mail-help/mailer/popsmtp
Хотя там и написано что поддерживается pop3 по 110 порту и imap по 143 порту, мы видим что imap работает через шифрование:
Порт — IMAP — 143 (при использовании шифрования STARTTLS) и 993 (при использовании шифрования SSL/TLS)
Итак меняем настройки на поддержку шифрования:
<? $host = 'imap.mail.ru'; $port = 993; $login = 'login@bk.ru'; $pass = 'parol'; $param = '/imap/ssl/novalidate-cert'; $folder = 'INBOX'; if($mbox = imap_open("{"."{$host}:{$port}{$param}"."}$folder",$login,$pass)){ echo "Connectedn"; } else { exit ("Can't connect: " . imap_last_error() ."n"); echo "FAIL!n"; }; ?>
Проверяем, получилось, мы подключились к майлу.
Станьте первым!