1. 程式人生 > >解決163/sohu/sina不能夠收到PHP MAIL函式發出郵件的問題

解決163/sohu/sina不能夠收到PHP MAIL函式發出郵件的問題

1      最近準備改改自己的個人主頁,加上發郵件到功能,發現居然不是那麼好用。gmail和msn可以收到郵件,但是163/sina/sohu的郵箱居然都收不到,非常鬱悶。其實程式碼也很簡單。 php manual 已經說得相當清楚了。

      但是,如果我使用Linux Shell 的mail命令是可以傳送成功的,不過多加了一條-f 引數偽造發件人。這是唯一的不同,於是maillog 的其中一個欄位ctladdr顯示也不一樣。不再是apache使用者,我懷疑163等國內的郵件服務提供商,把所有的apache的使用者的郵件當成垃圾郵件處理掉了。

      根源找到,於是問題就很好解決了,查一下php的手冊,發現mail函式原來也是可以偽造發件人的。

     bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

     在第六個引數additional_parameters使用額外的引數"-f [email protected]", 問題就解決了。

程式:

              $email=$_POST['email'];
              $title='易物天下商城重置密碼(系統郵件請勿回覆)';
              $findPwd_url=$co->WEBSITE_URL.'/member_login1?mid='.base64_encode($_POST['phone']).'&out='.base64_encode(time());           
              $content="尊敬的會員:
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好! <br/>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;這是一封密碼重置郵件。如果您並未嘗試修改密碼,請忽略本郵件。<br/>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您可以通過點選以下連結重置帳戶密碼(基於安全考慮,本連結24小時內有效)。                              <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$findPwd_url."    <br/>
                           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果您不能點選以上鍊接,請將該連結複製到瀏覽器位址列中訪問。 <br/>
                        客服熱線:400-688-3913";
              
              $headers = "MIME-Version: 1.0" . "\r\n";
              $headers .= "Content-type:text/html;charset=gbk" . "\r\n";
              $headers .="From:

[email protected]\r\nReply-To: {$email}";           
        
          // $data['status']= mail($email,$title,$content,$headers,'-f [email protected]')?1:0;
             $data['status']=mail($email,$title,$content,$headers)?1:0;
                    
2.在伺服器上配置代理