联系表单集成BCC问题:添加BCC后邮件无法正常发送
问题根源
我一眼就发现问题所在啦——你把邮件头变量直接覆盖了,而不是追加BCC头信息!原本设置的From头被后续的赋值操作清空,导致邮件缺少必要的发件人信息,邮件服务器自然拒绝发送这封不完整的邮件,所以收件人和BCC地址都收不到邮件。
正确实现方式
要在邮件头中添加多个字段,需要用\r\n(回车换行符)来分隔不同的头信息,通过.=运算符追加内容,而不是重新赋值变量。修正后的代码如下:
$recipient = "xjkfak223@gmail.com"; // Set the email subject. $subject = "New contact from $name"; // Build the email content. $email_content = "Name: $name\n"; $email_content .= "Email: $email\n\n"; $email_content .= "Phone: $phone\n\n"; $email_content .= "Message: $message\n"; $email_content .= "$subscribe: Yes\n"; // Build the email headers - 追加BCC而不是覆盖原有头信息 $email_headers = "From: $name <$email>\r\n"; // 先设置基础的From头 $email_headers .= "BCC: xy123@gmail.com"; // 用.=追加BCC头 // Send the email. if (mail($recipient, $subject, $email_content, $email_headers)) { // Set a 200 (okay) response code. http_response_code(200); echo "Thank You for Contacting Us."; } else { // 新增错误提示,方便调试问题 http_response_code(500); echo "Oops! Something went wrong and we couldn't send your message."; }
额外调试&优化建议
- 确认你的服务器支持
mail()函数,并且邮件配置(比如sendmail或SMTP)正常。部分服务器会限制BCC使用,或要求From地址是服务器内的有效邮箱,否则邮件可能被当成垃圾邮件拦截。 - 可以追加
Reply-To头优化用户体验:$email_headers .= "Reply-To: $email\r\n";,这样收件人回复时会直接发给表单提交者。 - 如果后续遇到更复杂的邮件需求(比如HTML邮件、附件),推荐使用PHPMailer或SwiftMailer这类专业邮件库,它们处理头信息、编码和异常的能力更可靠,也更容易调试。
内容的提问来源于stack exchange,提问作者Nisarg
相关产品推荐
相关产品推荐

