PHP 程式設計/郵件
外觀
< PHP 程式設計
mail 函式用於透過 php.ini 配置檔案中指定的 SMTP 伺服器傳送電子郵件。
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
返回的布林值將顯示電子郵件是否已成功傳送。
此示例將傳送主題為“主題”、內容為“訊息”的郵件到電子郵件地址“example@domain.tld”。 此外,收件人將看到郵件是從“Example2 <example2@domain.tld>”傳送的,並且收件人應該回復到“Example3 <example3@domain.tld>”
mail(
"example@domain.tld", // E-Mail address
"subject", // Subject
"message", // Message
"From: Example2 <example2@domain.tld>\r\nReply-to: Example3 <example3@domain.tld>" // Additional Headers
);
不需要將電子郵件地址寫成“姓名 <電子郵件>”格式,只需寫“電子郵件”即可。
這將傳送與第一個示例相同的郵件,但在郵件中包含 From: 和 Reply-To: 頭部。 如果你希望收件人能夠回覆你,則需要包含這些頭部。 此外,一些電子郵件提供商會認為某些頭部缺失的郵件是垃圾郵件,因此除非包含正確的頭部,否則郵件將最終出現在垃圾郵件資料夾中。
- PHP 預設情況下本身沒有任何郵件傳送功能。 它需要將郵件傳遞給本地郵件傳輸代理,例如 sendmail。 這意味著你不能只是執行 PHP 並期望它傳送郵件; 你必須安裝郵件傳輸代理。
- 確保在收件人或主題中沒有換行符,否則郵件可能無法正確傳送。
- 但是,額外的頭部欄位 - 應該始終包含 From: 頭部 - 也可能包含其他頭部。 在 Windows 上的 PHP 中,每個頭部之後應該跟著 \r\n,但在 Unix 版本中,你應該只在頭部行之間包含 \n。 不要在最終的額外頭部行之後新增 \n 或 \r\n。
- to 引數不應該是“姓名 <someone@example.com>”形式的地址。 mail 命令在與 MTA 交談時可能無法正確解析它(尤其是在 Windows 下)。
尤其是在傳送多封郵件時,例如在新聞通訊指令碼中,錯誤檢測非常重要。
使用此指令碼傳送郵件,同時警告錯誤
$result = @mail($to, $subject, $message, $headers);
if ($result) {
echo "Email sent successfully.";
} else {
echo "Email was not sent, as an error occurred.";
}
在下例中,指令碼已經得到一個電子郵件列表,我們只需使用與 PHP 中使用 mysql 結果迴圈相同的步驟。 下面的指令碼將嘗試向陣列中的每個電子郵件地址傳送電子郵件,直到它執行完畢。
while ($row = mysql_fetch_assoc($result)) {
mail($row['email'], $subject, $message, null, "-f$fromaddr");
}
然後,如果我們將錯誤檢查整合到多封郵件指令碼中,我們將得到以下結果
$errors = 0
$sent = 0
while ($row = mysql_fetch_assoc($result)) {
$result = "";
$result = @mail($row['email'], $subject, $message, null, "-f$fromaddr");
if (!$result) {
$errors = $errors + 1;
}
$sent = $sent + 1;
}
echo "You have sent $sent messages";
echo "However there were $errors errors";