お世話になっております。zendoframework1系を使いdovecotのpop3接続を行おうとしているのですが、なかなかうまく行かないことがあるので、ご教授願いたく質問させていただきます。
内容
zendframework1系のZend_Mail_Storage_Pop3を使ってdovecot+postfixで立てたメールサーバへ接続し、Listを取得したいと考えました。
以下がコードです。
php
1$param = array( 2 'host' => '0.0.0.0', 3 'user' => 'centos', 4 'password' => 'centos', 5 'auth' => 'login', 6// "port" => 995, 7 "ssl" => "SSL"); 8 9$mail = new Zend_Mail_Storage_Pop3($param); 10echo "mail count:" . $mail->countMessages() . "<br /><br />";
上記でメールの件数は取れると思うのですが、SSL(pop3s)だと取得できません。(pop3 port110では取得できました。)
maillogで確認すると、以下が表示され接続はできている気がします。
log
1Aug 12 07:32:02 e8cbaa9d20c2 dovecot: auth: Debug: auth client connected (pid=1019) 2Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x10, ret=1: before/accept initialization [127.0.0.1] 3Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: before/accept initialization [127.0.0.1] 4Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2002, ret=-1: SSLv2/v3 read client hello A [127.0.0.1] 5Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 read client hello A [127.0.0.1] 6Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write server hello A [127.0.0.1] 7Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write certificate A [127.0.0.1] 8Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write key exchange A [127.0.0.1] 9Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write server done A [127.0.0.1] 10Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 flush data [127.0.0.1] 11Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 read client certificate A [127.0.0.1] 12Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2002, ret=-1: SSLv3 read client key exchange A [127.0.0.1] 13Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2002, ret=-1: SSLv3 read client key exchange A [127.0.0.1] 14Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 read client key exchange A [127.0.0.1] 15Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 read certificate verify A [127.0.0.1] 16Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 read finished A [127.0.0.1] 17Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write session ticket A [127.0.0.1] 18Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write change cipher spec A [127.0.0.1] 19Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 write finished A [127.0.0.1] 20Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2001, ret=1: SSLv3 flush data [127.0.0.1] 21Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x20, ret=1: SSL negotiation finished successfully [127.0.0.1] 22Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL: where=0x2002, ret=1: SSL negotiation finished successfully [127.0.0.1] 23Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Debug: SSL alert: close notify [127.0.0.1] 24Aug 12 07:32:02 e8cbaa9d20c2 dovecot: pop3-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, TLS, session=<4EgmheaPTrV/AAAB>
zendのソースの以下を確認すると、fsoketopenでfalseが帰ってきてしまっています。
php
1 public function connect($host, $port = null, $ssl = false) 2 { 3 if ($ssl == 'SSL') { 4 $host = 'ssl://' . $host; 5 } 6 7 if ($port === null) { 8 $port = $ssl == 'SSL' ? 995 : 110; 9 } 10 11 $errno = 0; 12 $errstr = ''; 13 $this->_socket = @fsockopen($host, $port, $errno, $errstr, self::TIMEOUT_CONNECTION); 14 error_log(var_export($this->_socket,true)); //ここで確認している 15 error_log(var_export($errstr,true)); 16 17 if (!$this->_socket) { 18 /** 19 * @see Zend_Mail_Protocol_Exception 20 */ 21 require_once 'Zend/Mail/Protocol/Exception.php'; 22 throw new Zend_Mail_Protocol_Exception('cannot connect to host; error = ' . $errstr . 23 ' (errno = ' . $errno . ' )'); 24 } 25
apachelog
log
1[Mon Aug 12 07:32:02.676083 2019] [:error] [pid 846] [client 172.19.0.1:36802] false //ここで確認している 2[Mon Aug 12 07:32:02.676115 2019] [:error] [pid 846] [client 172.19.0.1:36802] '' 3[Mon Aug 12 07:32:02.687208 2019] [:error] [pid 846] [client 172.19.0.1:36802] PHP Fatal error: Uncaught exception 'Zend_Mail_Protocol_Exception' with message 'cannot connect to host; error = (errno = 0 )' in /var/www/html/vendor/zendframework/zendframework1/library/Zend/Mail/Protocol/Pop3.php:112\nStack trace:\n#0 /var/www/html/vendor/zendframework/zendframework1/library/Zend/Mail/Storage/Pop3.php(190): Zend_Mail_Protocol_Pop3->connect('0.0.0.0', NULL, 'SSL')\n#1 /var/www/html/index.php(53): Zend_Mail_Storage_Pop3->__construct(Array)\n#2 {main}\n thrown in /var/www/html/vendor/zendframework/zendframework1/library/Zend/Mail/Protocol/Pop3.php on line 112
色々調べているのですが見当がつかないため、ご教授お願いいたします
###環境
docker
php5.6.32
zendframework1.12
dovecot2.2.23
postfix
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/21 21:32