PHP邮件的错误Mime?

PHP邮件的错误Mime?,php,html,email,Php,Html,Email,我已将站点从一台服务器迁移到另一台服务器。在旧服务器上,联系人页面可以正常工作,而在新服务器上则不行。我已经联系了技术支持部门,他们给我发送了一份日志,其中没有透露任何与未声明变量无关的内容。我再次联系,发现正在生成另一个错误: policy-violation_found_in_sent_message_"Contact_Form" Policy:Bad_MIME:RC:1 有人能帮忙吗 大部分代码如下所示,我看不出问题所在,在一台服务器上运行良好,在另一台服务器上运行不正常 谢谢你的帮助

我已将站点从一台服务器迁移到另一台服务器。在旧服务器上,联系人页面可以正常工作,而在新服务器上则不行。我已经联系了技术支持部门,他们给我发送了一份日志,其中没有透露任何与未声明变量无关的内容。我再次联系,发现正在生成另一个错误:

policy-violation_found_in_sent_message_"Contact_Form"

Policy:Bad_MIME:RC:1
有人能帮忙吗

大部分代码如下所示,我看不出问题所在,在一台服务器上运行良好,在另一台服务器上运行不正常

谢谢你的帮助

   if(isset($_POST['name'])){    //may have to change to see if a field was set instead


    $myEmail       = 'me@me.com'; //Email address where queries get sent.
    //errors already defined in init
    $name          = strip_tags(trim($_POST['name']));
    $email         = strip_tags(trim($_POST['email']));

    $subject = "Contact Form";

    $headers = "From: " .$email. "\r\n";
    $headers .= "Reply-To: " .$email. "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    //body of message
    $message1 = '<html><body>';
    $message1 .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message1 .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" .$name. "</td></tr>";
    $message1 .= "<tr><td><strong>Email:</strong> </td><td>" .$email. "</td></tr>";
    $message1 .= "<tr><td><strong>Message:</strong> </td><td>" .$message. "</td></tr>";
    $message1 .= "</table>";
    $message1 .= "</body></html>";

if (mail($myEmail, $subject, $message1, $headers)) {

 //Whoop!
    } else {
        echo 'There was a problem sending the email.';
    }
}
if(isset($\u POST['name']){//可能必须更改以查看是否设置了字段
$myEmail='10〕me@me.com“;//发送查询的电子邮件地址。
//已在init中定义错误
$name=strip_标签(trim($_POST['name']);
$email=strip_标签(修剪($_POST['email']);
$subject=“联系方式”;
$headers=“From:”.$email.\r\n”;
$headers.=“回复:”.$email.\r\n”;
$headers.=“MIME版本:1.0\r\n”;
$headers.=“内容类型:text/html;字符集=ISO-8859-1\r\n”;
//正文
$message1='';
$message1.='';
$message1.=“名称:”$Name.“;
$message1.=“电子邮件:”$Email.“;
$message1.=“消息:”$Message.“;
$message1.=“”;
$message1.=“”;
if(邮件($myEmail,$subject,$message1,$headers)){
//哇!
}否则{
echo“发送电子邮件时出现问题。”;
}
}
我已经删除了字段和一些验证等,但这只是其中的大部分。

开始使用,您的生活会更轻松。

使用示例:

require_once('swift/lib/swift_required.php');

$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
    ->setFrom(array($from))
    ->setTo(array($to))
    ->setEncoder(Swift_Encoding::get7BitEncoding())
    ->setSubject($subject)
    ->setBody($body, 'text/html')
    ->addPart(strip_tags($body), 'text/plain')
    ->attach(Swift_Attachment::fromPath($filename))
;
$mailer->send($message);

Policy:Bad\u MIME:RC:1
是主机提供商设置的错误消息。它与PHP没有直接关系

从其:

所以基本上它不喜欢MIME头中的一些字符

我的猜测是,它不喜欢
\r
字符,因为您似乎有这些字符,它会执行此检查

  if ($BAD_MIME_CHECKS && !$IGNORE_EOL_CHECK && /\r|\0/) {
    $illegal_mime=1;
    &debug("w_c: found CRL/NULL in header - invalid if this is a MIME message");
    &minidebug("w_c: found CRL/NULL in header - invalid if this is a MIME message");
  }
因此,只使用
\n
而不是
\r\n
可能会解决问题

如果没有,您可以要求您的主机提供商至少提供调试消息,以便能够调试出问题

或者放弃调试并使用其他邮件服务器/邮件协议/发送类


另外:似乎实际上qmail不接受
\r\n
,只接受
\n
。PHP手册也

如果未收到消息,请尝试仅使用LF(\n)。一些Unix邮件 传输代理(最显著的是qmail)用CRLF替换LF 自动(如果使用CRLF,则导致CR加倍)。这 应作为最后手段,因为它不符合RFC 2822


我不明白为什么这么多人花这么多时间试图让php的
mail()
函数能够很好地处理自定义标题和多部分消息。这只是一场彻头彻尾的噩梦,要保证它的安全真的很难(相信我,你的代码会在几秒钟内被黑客攻击,从而发送垃圾邮件)。当像phpMailer和Swiftmailer这样的类已经存在、完全免费并且为您完成所有这些工作时,为什么人们还要继续编写这些代码?工作完成——下载phpMailer,并用几行简单的代码替换所有的代码。@Spudley,因为他们不知道更多。既然他们什么也没说这是废话,真的应该被弃用,他们怎么会这样做呢。@eis:是的,那是一种咆哮;对此很抱歉:)但重点是:如果你来这里寻求PHP邮件的帮助,你应该做的第一件事就是搜索以前类似的问题,如果你这样做,你会发现数百个答案说使用phpMailer或Swiftmailer代替。“这并不是说信息很难找到。”斯普德利——我对改用斯威夫特梅勒等的主要不满是,我花了太多时间让它工作起来。如果我能成功,那么我很高兴。我ve validtion和其他东西将尽可能避免垃圾邮件。只是一种偏好……正如艾斯所说,当我开始写它时,我不知道还有什么更好的。@SteveGreen-好吧,你可以让它工作,但从目前的情况来看,它不会是安全的
strip_tags()
对于清除电子邮件地址是完全无用的。您需要防止邮件头注入,这是一个完全不同的问题。简单的回答是,您需要注意输入中的鬼鬼祟祟的
\n
字符,但这还不是全部;当您手动创建邮件头时,实际上很难编写完全安全的邮件。这是使用像样的图书馆的主要原因。事实上,他们让你的代码更容易编写和维护,这是一个额外的好处。谢谢你的建议-我删除了mime类型,它工作了,坏主意?谢谢你的建议-我删除了mime类型,它工作了,坏主意?你是对的,谢谢!删除\r解决得很好,谢谢。Np,很高兴它成功了。实际上,qmail似乎不接受
\r\n
,只接受
\n
  if ($BAD_MIME_CHECKS && !$IGNORE_EOL_CHECK && /\r|\0/) {
    $illegal_mime=1;
    &debug("w_c: found CRL/NULL in header - invalid if this is a MIME message");
    &minidebug("w_c: found CRL/NULL in header - invalid if this is a MIME message");
  }