【问题标题】:php mail function goes straight to junk folder [duplicate]php邮件功能直接进入垃圾文件夹[重复]
【发布时间】:2014-02-18 10:10:43
【问题描述】:

我已经设置了一个包含基本字段的联系表。表单将发送给站点所有者,并将一条消息发送给提交表单的客户。该功能有效,但总是将消息发送到垃圾文件夹。我的标头有问题还是只是hotmails垃圾设置。

$headers = "MIME-Version: 1.0rn"; 
$headers .= "Content-type: text/html; charset=iso-8859-1rn"; 
$headers  .= "From: contact@mysite.com\r\n"; 
mail($to, $subject, $message, $headers)or die("mail error");

消息是 HTML 电子邮件,只是显示消息的一种更好的方式。同样在我的电子邮件帐户中,它没有显示我的 from 变量,而是显示“CGI Mailer”——令人困惑。

更新 - 不再有效

//mail customer
$from = 'donotreply@mysite.co.uk';
$subject = 'Your message has been recieved.';

$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$headers .= 'From: My Site <'.$from.'>' . "\r\n";

$msg = '
<html>
<head>
<link href="http://linktocss/.../etc" rel="stylesheet" type="text/css" />
</head>
<body>
formatted message...
</body>
</html>
';
mail($email, $subject, $msg, $headers)or die("mail error");

【问题讨论】:

  • 很可能是因为您的rn 像这样聚集在一起。阅读手册php.net/mail - 您的标题无效。
  • 这个问题没有正确答案。就我而言,您需要对垃圾邮件/垃圾邮件规则有很好的理解,并且需要一点运气。只需确保您的电子邮件格式正确,您的邮件发送域具有 DKIM、PTR 和反向 dns 记录。您的电子邮件中有真正的取消链接,您的服务器不在某些 rbl 黑名单上。话虽这么说,你的问题实在是太大了。

标签: php email


【解决方案1】:

编辑

这对我有用,并没有最终进入垃圾邮件/垃圾邮件,而是在我的收件箱中。

<?php
//mail customer
$from = 'donotreply@mysite.co.uk';
$to = "email@example.com";
$subject = 'Your message has been received.';

$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$headers .= "From: The Sending Name <$from>\r\n";

$msg = '
<html>
<head>
<link href="http://linktocss/.../etc" rel="stylesheet" type="text/css" />

</head>
<body>
formatted message...
</body>
</html>
';
mail($to, $subject, $msg, $headers)or die("mail error");

?>

脚注:我注意到您正在使用外部样式表。许多电子邮件服务(例如 Google)不会呈现这些内容。最好使用inline styling 来获得更好/想要的结果。


原答案

最有可能)您的邮件最终成为垃圾邮件的原因(根据您发布的代码)是您的标头无效。

您将rn 捆绑在一起,而不是使用\r\n

改用这个:

$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$headers  .= "From: contact@mysite.com\r\n"; 
mail($to, $subject, $message, $headers)or die("mail error");

或者更好的是,使用:取自PHP website's mail() function

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers  .= "From: contact@mysite.com\r\n"; 
mail($to, $subject, $message, $headers)or die("mail error");

【讨论】:

  • 我使用了这种方法,但现在根本不发送。我已经更新了上面的代码。这是漫长的一天。我可能错过了什么,但看不到哪里。
  • 好的,给我几分钟,我会根据你添加/编辑的代码看看我能做什么。 @PaulLedger
  • 我还有另一个问题。 to 发送的电子邮件在哪里? @PaulLedger 它不在您的代码中。 $to 变量未定义。
  • 看看我的编辑 @PaulLedger
  • $to 变量是发布数据
【解决方案2】:

当今的电子邮件客户端和服务器对电子邮件发送服务器执行大量检查,例如反向 DNS 查找、灰名单和其他什么。所有这些测试都将因 php mail() 函数而失败。如果你使用的是动态ip,那就更糟了。

使用 PHPMailer-Class 并将其配置为使用 smtp-auth 以及配置良好的专用 SMTP 服务器(本地服务器或远程服务器),您的问题就迎刃而解了。

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2019-12-26
    • 2016-10-07
    • 2013-05-19
    • 2013-08-16
    相关资源
    最近更新 更多