1. 程式人生 > >7.用郵件發送錯誤日誌

7.用郵件發送錯誤日誌

set mic 繼續 -s xtra 選項卡 總結 name order

參考網址:

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() 日誌類型
0message 發送到 PHP 的系統日誌,使用 操作系統的日誌機制或者一個文件,取決於 error_log 指令設置了什麽。 這是個默認的選項。
1message 發送到參數 destination 設置的郵件地址。 第四個參數 extra_headers 只有在這個類型裏才會被用到。
2 不再是一個選項。
3message 被發送到位置為 destination
的文件裏。 字符 message 不會默認被當做新的一行。
4message 直接發送到 SAPI 的日誌處理程序中。
destination

目標。它的含義描述於以上,由 message_type 參數所決定。

extra_headers

額外的頭。當 message_type 設置為 1 的時候使用。 該信息類型使用了 mail() 的同一個內置函數。

返回值 ?

成功時返回 TRUE, 或者在失敗時返回 FALSE

註釋 ?

Warning

error_log() 並非二進制安全的。null 字符可能截斷 message

Tip

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.用郵件發送錯誤日誌