PHP 程式設計/郵件
外觀
< PHP 程式設計
(重定向自 PHP 程式設計/郵件)mail 函式用於透過 php.ini 配置檔案中指定的 SMTP 伺服器傳送電子郵件。
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
返回的布林值將顯示電子郵件是否已成功傳送。
此示例將使用主題為“subject”的訊息“message”傳送至電子郵件地址“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
);
不需要將電子郵件地址寫成“Name <email>”格式,您可以直接寫“email”。
這將傳送與第一個示例相同的訊息,但在訊息中包含 From: 和 Reply-To: 頭部。如果您希望傳送電子郵件的人能夠回覆您,則需要此操作。此外,一些電子郵件提供商會在缺少某些頭部的情況下將郵件視為垃圾郵件,因此,除非您包含正確的頭部,否則您的郵件將最終進入垃圾郵件資料夾。
- 預設情況下,PHP 本身不具有任何郵件傳送功能。它需要將郵件傳遞給本地郵件傳輸代理,例如 sendmail。這意味著您不能只執行 PHP 並期望它傳送郵件;您必須安裝郵件傳輸代理。
- 確保在收件人或主題中沒有任何換行符,否則郵件可能無法正常傳送。
- 但是,附加的頭部欄位(應始終包含 From: 頭部)也可以包含其他頭部。在 Windows 上的 PHP 中,每個頭部後面都應跟著 \r\n,但在 Unix 版本中,您只應在頭部行之間包含 \n。不要在最後的附加頭部行之後放置 \n 或 \r\n。
- to 引數不應以“Name <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";