2014-11-22 154 views
1

是否可以从我自己的域邮件中获取电子邮件?我想获取收件箱,请为此提供帮助,我现在正在使用IMAP,但它给我的SSL错误,如从我自己的服务器电子邮件地址中检索电子邮件,例如[email protected]

MAIL.enlighten-energy.net证书失败:服务器名称不符合证书:/ OU =域控制验证/ OU = PositiveSSL通配符/ CN = *。justhost.com

function fetch_gmail_inbox() 
    { 

     $res=array(); 
     /* connect to gmail */ 
     $hostname = '{imap.enlighten-energy.net:143/imap}'; 
     $username = '[email protected]'; 
     $password = '*******'; 

     /* try to connect */ 
     $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

     /* grab emails */ 
     $emails = imap_search($inbox,'UNSEEN'); 

     /* if emails are returned, cycle through each... */ 
     if($emails) { 

      /* put the newest emails on top */ 
      rsort($emails); 

      /* for every email... */ 
      foreach($emails as $email_number) { 

       /* get information specific to this email */ 
       $overview = imap_fetch_overview($inbox,$email_number,0); 
       $message = quoted_printable_decode(imap_fetchbody($inbox,$email_number,1)); 
       $structure = imap_fetchstructure($inbox,$email_number); 
       if($structure->parts[0]->encoding == 3 ||$structure->encoding == 3) 
       { 
        $message=imap_base64($message); 

       } 
       if($structure->parts[0]->encoding == 4 ||$structure->encoding == 4) 
       { 
        $message = imap_qprint($message); 
       } 
       $message2= quoted_printable_decode(imap_fetchbody($inbox,$email_number,0)); 
       $date=explode(':',$message2); 
       $date2= date('d-m-Y h:i:s',strtotime($date[8].':00:00')); 


       if($overview[0]->subject=="USR:Site01_Comms Complete") 
       { 
        $res['date']=$date2; 
        $res['body']=$message; 
       }else 
       { 
        echo "not a correct mail"; 
       } 
      } 

      return $res; 
    } 

    /* close the connection */ 
    imap_close($inbox); 



} 

但它不是为我工作的任何建议,将明显的.thanks提前

+0

“不工作”=?一些错误信息? – ethrbunny 2014-11-22 13:11:08

+0

MAIL.enlighten-energy.net证书失败:服务器名称与证书不匹配:/ OU =域控制验证/ OU =正面SSL通配符/ CN = *。justhost.com – john 2014-11-22 13:16:19

+1

$ hostname ='{mail.enlighten-energy。净:143/IMAP/NOVALIDATE证书} INBOX';使用这个 – 2015-01-29 07:31:23

回答

0

找到了解决办法,我必须使用

$hostname = '{mail.enlighten-energy.net:143/imap/novalidate-cert}INBOX'; 

,而不是这个

$hostname = '{imap.enlighten-energy.net:143/imap}'; 

一样,这里是完整的解决方案

function fetch_gmail_inbox() 
    { 

     $res=array(); 
     /* connect to gmail */ 
     $hostname = '{mail.enlighten-energy.net:143/imap/novalidate-cert}INBOX'; 
     $username = Yii::app()->getModule('user')->get_config('datalogger_email'); 
     $password = Yii::app()->getModule('user')->get_config('datalogger_email_pwd'); 

     /* try to connect */ 
     $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

     /* grab emails */ 
     $emails = imap_search($inbox,'UNSEEN'); 
     /* if emails are returned, cycle through each... */ 
     if($emails) { 

      /* put the newest emails on top */ 
      rsort($emails); 

      /* for every email... */ 
      foreach($emails as $email_number) { 

       /* get information specific to this email */ 
       $overview = imap_fetch_overview($inbox,$email_number,0); 
       $message = quoted_printable_decode(imap_fetchbody($inbox,$email_number,1)); 
       $structure = imap_fetchstructure($inbox,$email_number); 
       if($structure->parts[0]->encoding == 3 ||$structure->encoding == 3) 
       { 
        $message=imap_base64($message); 

       } 
       if($structure->parts[0]->encoding == 4 ||$structure->encoding == 4) 
       { 
        $message = imap_qprint($message); 
       } 
       $message2= quoted_printable_decode(imap_fetchbody($inbox,$email_number,0)); 
       $date=explode(':',$message2); 
       $date2= date('d-m-Y h:i:s',strtotime($date[8].':00:00')); 


       if($overview[0]->subject=="USR:Site01_Comms Complete") 
       { 
        $res['date']=$date2; 
        $res['body']=$message; 
       } 
      } 

      return $res; 
     } 

     /* close the connection */ 
     imap_close($inbox); 



    } 
1

证书失败的邮件。 enlighten-energy.net:服务器名称与证书不符:/ OU =域控制验证/ OU = PositiveS SL通配符/ CN = * justhost.com

错误消息其实是很清楚,如果你理解SSL/TLS:

  • 您访问imap.enlighten-energy.net(这是一个CNAME到mail.enlighten-energy.net
  • 但服务器的证书颁发给*.justhost.com
  • 由于*.justhost.com不符合imap.enlighten-energy.net它不会信任证书,因为如果它只信任任何证书,那么连接将对man-i开放可以打败加密的中间攻击。

总结:如果你想使用你自己的域名作为IMAP服务器,你必须为你自己的域设置一个证书。如果这是多个主机之间的共享服务器,并且您无权访问此服务器的配置,则无法执行此操作。

+0

所以我该怎么做呢?请帮我理清这一点,我用“$ hostname ='{MAIL.justhost.com:143}INBOX';'对于主机名不是它显示错误“连接失败mail.justhost.com,143” – john 2014-11-24 06:35:13

+0

我很确定您的托管服务提供商已经记录了您需要为IMAP服务器使用哪个主机名。 – 2014-11-24 07:08:29

+0

我如何检查主机名? – john 2014-11-24 07:12:12

相关问题