【发布时间】:2014-02-08 11:56:16
【问题描述】:
我正在尝试编辑此脚本以向自己发送密件抄送副本:
$to = $your_email;
$from = "Server Xt<dml_submitbot@noemail.com>";
$subject = "User Sent Msg :: $msg";
$HTMLmessage = $message;
emailHTML($to, $from, $subject, $HTMLmessage);
function emailHTML($to, $from, $subject, $HTMLmessage){
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers = "From: ".$from;
$headers .=
"\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$content .=
"This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$HTMLmessage . "\n\n";
$ok = @mail($to, $subject, $content, $headers);
if(!$ok) {
die("Error sending email");
}
}
我已尝试添加此 $headers .= "Bcc:email@example.com"\n";,但它不发送电子邮件...如何修改此脚本以使其正常工作?
【问题讨论】:
-
最简单的方法:放弃它并使用 PHPMailer 或 Swiftmailer。两者都可以将密件抄送添加到单行代码中,并且如果出现问题,还可以提供更好的诊断。同样,您永远不应该使用
@抑制运算符。这相当于把你的手指塞进耳朵里然后说“lalalalala听不到你的声音” -
您应该使用更结构化的方式来构建您的标题字段,例如
$headers = array('…', '…'); $headers = implode("\r\n", $headers);。这样做可以消除在Content-Type和BCC之间缺少换行符的情况。 -
您的多部分消息也无效,因为它缺少final boundary delimiter。