您好,欢迎访问一九零五行业门户网

PHP學習筆記一:誰動了你的mail(),PHP?_PHP教程

php編寫郵件發送的函數時候,會出現一個很奇怪的問題,那就是:
   warning: mail(): failed to connect to mailserver at localhost port 25, verify your smtp and smtp_port setting in php.ini or use ini_set() in .......
   of course,這個紅色不是網頁上顯示的,只是爲了這樣說明,不過你可以設置顯示的顏色,這個嘛,這個要留給你考究了。
通過internet搜索了相關的回答,包括相關的技術博客,大家都是很簡單的闡述了解決方案.大多是只是提到修改:php.ini 中的[mail function] 函數,將smtp的相關功能進行打開即可,以下是詳細的修改:
 [mail function]
 smtp = localhost
 smtp_port = 25
 sendmail_from = youremailusual@domin.com
 ;這裡有必要註釋下,這個郵件是from方面.
 sendmail_path =
 ;起初是空的,這裡在後面做說明.
 mail_add_x_header = on
 ;這裡是默認on的 無需更改
到這一步,修改完畢,重啟apache,當然這個操作,我實在cmd下操作的,話說這個操作,還鬧了一個小笑話.how stupid i am !
重啟完畢,刷新頁面,錯誤仍然存在.
這裡陷入糾結的地步,stackoverflow 中提到了iis(windows 默認的服務器),在控制面板-管理工具下竟然找不到這一項,由於是win7的緣故,在添加和刪除程序下,把它開啟即可,注意操作,後來可以在管理工具下找到,雙擊打開,此時看到smtp的項都很激動.雙擊打開,配置了相關的參數,如截圖所示:
更正:此處忘了補發圖片,特此道歉! 7-5號補正.
說句實話,這一步做的比較腦殘,那上面是asp.net的選項,管你php毛事.[反正就是沒有成功].
痛定思痛,維基百科查了smtp的協議詳細解釋,連接click here:簡單郵件協議
回來繼續修改,[mail function],如下:
  ;以126郵箱的設置為例子
 smtp = smtp.126.com
 smtp_port = 25
 sendmail_from = my126emailaddress@126.com
 sendmail_path =
 mail_add_x_header = on
同時修改了程序中$from變量的數值,為了保持一致.
[因為之前做了測試,程序中添加 phpinfo()函數,執行後,在頁面搜索 mail項,你會發現會有一個 localhost value 和 master value ,當然這個很好理解,localhost value指的是你程序中設置的數值,master value是php.ini的設置]
 執行後,神奇的錯誤消失了,不過出現了如下的錯誤:
  mail(): smtp server response: 553 you are not authorized to send mail, authentication is required  aaf353e4-8ac5-416e-9cd5-6b54fc592764
之後改了其他的郵箱,如qq,gamil等,錯誤都如上面提示,看了一個熟悉的單詞authorized ,就明白啥意思了.
到這一步貌似離成功不遠了,想起以前使用客戶端配置郵箱用戶的時候,最後一步都會詢問你是不是需要開啟服務器身份驗證.最後一不小心搜到了一個叫做sendmail的文件包,下載地址如下:sendmail
 之後,最好在php的根目錄下新建一個文件夾,取名叫做:sendmail,之後托壓縮包進去,再解壓出來,修改一個叫做sendmail.ini的文件,修改的地方如下:
;take the fomus email provider  in china 126 for example
[sendmail]
 smtp_server= smtp.126.com  
 smtp_port=25
 default_domin =126.com
 auth_username= strings in your email address before char '@'    
 auth_password= your password which allow you to login in your email-box
 hostname= 126.com
之後,你就要修改 php.ini,還是老地方:
  smtp = smtp.126.com
 ;這裡修改為localhost 也是一樣,其他選項保持不變.
 smtp_port = 25
 sendmail_from = my126emailaddress@126.com
 sendmail_path = your sendmail path/sendemail.exe -t
 ;當然這個路徑的前半部分必須包括你的php安裝的根目錄,將\換成/,我想是必須要做的.
 mail_add_x_header = on
 到這裡配置完成,重啟你的apache,刷新頁面,錯誤的消失,因為程序中設置的$to是自己的126和qq郵箱,當然循環發的.
當看到桌面右下角qq上彈出三豐郵件提示的時候,i know  that i resolve it .打開郵件的內容,和我在頁面輸入的內容完全一致,而且有些內容還是從本地的數據庫中讀出來的。
作者:田浩宇
http://www.bkjia.com/phpjc/478113.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/478113.htmltecharticlephp編寫郵件發送的函數時候,會出現一個很奇怪的問題,那就是: warning: mail(): failed to connect to mailserver at localhost port 25, verify your smtp and smtp...
其它类似信息

推荐信息