Всем привет. Когда то давно я делал функцию, точнее скрипт, который бы по крону (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)
Итак меняем настройки на поддержку шифрования:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$host = 'imap.mail.ru';
$port = 993;
$login = '[email protected]';
$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"; };
?>