php邮件功能没有收到电子邮件

时间:2009-09-03 20:32:31

标签: php

好吧,所以我整理了一个非常基本的邮件功能,在测试时,我使用了几个电子邮件帐户,一个是我的谷歌帐户,另一个是我的工作帐户。我在谷歌帐户上收到所有电子邮件,但不是那些指向我工作的人。我想这可能是因为他们已被赶上反垃圾邮件软件。关于如何开发邮件功能以避免陷入垃圾邮件软件的任何想法?

这是我的邮件功能的副本

$to      = 'account@gmail.com';
$subject = 'The subject';
$message = 'Hello,'."\n";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers  = 'From: me@mycompnay.com' . "\r\n" .
'CC: anotherone@mycompany.com' . "\r\n";

$mail_sent = mail($to, $subject, $message, $headers);
if($mail_sent) {
    header("location:newlocation.php");
}
}

6 个答案:

答案 0 :(得分:2)

很多时候,这与PHP的mail()功能关系不大,而且与邮件传输代理的配置有很大关系。许多邮件服务器会在它们传递给垃圾邮件过滤器之前弹出他们认为来自垃圾邮件发送者(即未配置/配置错误的发件人)的邮件。

如果您查看MTA的日志,您可能会发现一些反弹消息,例如“不允许来自此服务器的邮件,请参阅[插入网址]的黑名单信息。

答案 1 :(得分:1)

垃圾邮件过滤器使用许多不同的方法来确定进来的邮件是否真的是垃圾邮件。

以下是我建议的一些事项:

  • 描述性主题
  • 描述性消息,小心HTML和其他丰富内容,因为有时垃圾邮件过滤器会将其作为“广告”接收。
  • 尽可能完整的标题包含真实的信息。

尝试尝试使用不同的组合,看看是否可以通过您的工作。好消息是你的谷歌帐户收到了电子邮件,所以你知道它不是本地的服务器端问题。

答案 2 :(得分:1)

您可能需要正确格式化标题和内容。边界不见了。

这是HTML格式化邮件的一个简单功能:

<?php
function html_mail($i){
  $to = $i['to'];
  $to_name = $i['to-name'];
  $subject = $i['subject'];
  $html_message = $i['message'];
  $from = $i['from'];
  $from_name = $i['from-name'];
  $reply_to = $i['reply-to'];
  $reply_to_name = $i['reply-to-name'];

  if(!$to || !validate::email($to)){return false;}

  $email_message = '';
  $email_subject =  $subject;$email_txt = $html_message;
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $email_to = ($to_name ? $to_name.'<'.$to.'>':$to);

  $headers = "From: ".($from_name!='' ? $from_name.'<'.$from.'>':$from)."\n";
  if($reply_to){
    $headers .= "Reply-To: ".($reply_to_name ? $reply_to_name.'<'.$reply_to.'>':$reply_to)."\n";
  }
  $headers .= "MIME-Version: 1.0\n" . 
              "Content-Type: multipart/mixed;" . 
              " boundary=\"{$mime_boundary}\""; 
  $email_message .= "This is a multi-part message in MIME format.\n\n";

  $email_message .= "--{$mime_boundary}\n";
  $email_message .= "Content-Type: text/html; charset=utf-8\n";
  $email_message .= "Content-Transfer-Encoding: 8bit\n\n";
  $email_message .= $email_txt;
  $email_message .= "\n\n";

  $email_message .= "--{$mime_boundary}\n";
  $email_message .= "Content-Type: text/plain; charset=utf-8\n";
  $email_message .= "Content-Transfer-Encoding: 8bit\n\n";
  $email_message .= trim(strip_tags(str_replace(array('<br/>','<br />','<br/>'),"\r\n",$email_txt)));
  $email_message .= "\n\n";

  $email_message .= "--{$mime_boundary}--";
  $ok = @mail($email_to, $email_subject, $email_message, $headers); 

  return $ok;
}
?>

如果邮件格式正确,您可能会通过过滤器。

答案 3 :(得分:0)

垃圾邮件的确定完全取决于运行垃圾邮件启发式的软件。您必须查看贵公司使用的反垃圾邮件软件,并了解它被捕获为垃圾邮件的原因。通常情况下,它与您的邮件服务器设置有关。许多软件使用的关键因素是有效的反向DNS条目,因此您可以查看它。

你必须意识到,如果反垃圾邮件软件只是通过修改一些标题就可以轻松地将你的电子邮件视为垃圾邮件,那么反垃圾邮件软件将完全没用,因为垃圾邮件发送者也会知道这些方法

答案 4 :(得分:0)

我认为首先要添加一个有效的'from'标题。

答案 5 :(得分:0)

非常感谢你的所有建议。我在这篇文章中找到了答案

How to change envelope from address using PHP mail?

有效。

L,