7.用郵件發送錯誤日誌
參考網址:
http://php.net/manual/zh/function.error-log.php
【可以解決“怎麽發送錯誤日誌到郵件”問題】
http://bbs.csdn.net/topics/330204372
【可以解決問題
“Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\AppServ\www\mail.php on line 15”】
http://www.cnblogs.com/58top/archive/2013/01/14/2860092.html
【可以解決 “php發送email (郵件)若幹問題總結(成功smtp案例見附件)”問題】
error_log
(PHP 4, PHP 5, PHP 7)
error_log — 發送錯誤信息到某個地方
說明 ?
bool error_log ( string$message
[, int $message_type
= 0
[, string $destination
[, string $extra_headers
]]] )把錯誤信息發送到 web 服務器的錯誤日誌,或者到一個文件裏。
參數 ?
message
應該被記錄的錯誤信息。
message_type
設置錯誤應該發送到何處。可能的信息類型有以下幾個:
error_log() 日誌類型 0 message
發送到 PHP 的系統日誌,使用 操作系統的日誌機制或者一個文件,取決於 error_log 指令設置了什麽。 這是個默認的選項。1 message
發送到參數destination
設置的郵件地址。 第四個參數extra_headers
只有在這個類型裏才會被用到。2 不再是一個選項。 3 message
被發送到位置為destination
message
不會默認被當做新的一行。4 message
直接發送到 SAPI 的日誌處理程序中。destination
目標。它的含義描述於以上,由
message_type
參數所決定。extra_headers
額外的頭。當
message_type
設置為 1 的時候使用。 該信息類型使用了 mail() 的同一個內置函數。
返回值 ?
成功時返回 TRUE
, 或者在失敗時返回 FALSE
。
註釋 ?
Warningerror_log() 並非二進制安全的。null 字符可能截斷 message
。
message
不能包含 null 字符。
註意,message
可能會發送到文件、郵件、syslog 等。
所以在調用 error_log() 前需要使用適合的轉換/轉義函數: base64_encode()、 rawurlencode() 或 addslashes()。
範例 ?
Example #1 error_log() 範例
<?php
// 如果無法連接到數據庫,發送通知到服務器日誌
if (!Ora_Logon($username, $password)) {
error_log("Oracle database not available!", 0);
}
// 如果用盡了 FOO,通過郵件通知管理員
if (!($foo = allocate_new_foo())) {
error_log("Big trouble, we‘re all out of FOOs!", 1,
"[email protected]");
}
// 調用 error_log() 的另一種方式:
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
?>
Warning: mail() [function.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
問題一
Warning: mail() [function.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
解決方法:
PHP的Mail函數使用的是SMTP服務發出E-Mail的。也就是說你需要在php.ini裏配置好適當的SMTP服務器地址和端口信息。如果你需要在本機上發出E-Mail,即
SMTP = localhost
smtp_port = 25
這樣的話,你需要在你自己的本機上配置上SMTP服務才可以。你可以嘗試打開IIS的SMTP服務。
問題二
mail(): SMTP server response: 550 5.7.1 Unable to
解決方法:
關鍵一步:我的電腦->管理->服務和應用程序 ->SMTP虛擬服務器上點擊右鍵,在彈出的屬性窗口裏進行如下設置:
點擊訪問選項卡,再點擊中繼,在彈出的窗口出點擊添加,然後選單臺計算機,添加IP地址為 127.0.0.1。
這時就可以測試一下了..如果不可以繼續往下操作...
還有的網友說要修改php.ini文件,做成如下配 置,但我覺得是沒有必要的,我用的默認設置就可以,如果您經過以上設置還不可以發送的話,就再修改一下吧,註意修改後要重啟web服務器:
php.ini的設置: 可使用默認選項,不用修改
SMTP = localhost //默認,不用修改
smtp_port = 25 //默認,不用修改
sendmail_from=你的設定值 //如果不指定,就必須在程序中指定
這樣就可以使用mail函數了
<?php
$to = "***@163.com"; //改成自己的郵箱進行測試
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "[email protected]"; //隨意設置
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
註意:收不到郵件還有另一個原因就 是目標郵件系統服務商的設置,有的當成正常郵件,有的當成垃圾郵件,還有的直接不接收,如果一個郵箱不成功的話,建議換個郵件服務提供商試試。據我測試 gmail 163可以收到,qq有時收不到。
小結:
這種“Unable to relay
[email protected]”的錯誤通常屬於設計意圖。也就是說,為了防止Internet上的Unsolicited
Commercial E-Mail (UCE),Microsoft的SMTP服務,默認,是不允許一封郵件通過它中繼到外面的郵件地址的!
7.用郵件發送錯誤日誌