作为垃圾邮件发送的邮件 - phpmailer,如何避免
Posted
技术标签:
【中文标题】作为垃圾邮件发送的邮件 - phpmailer,如何避免【英文标题】:mail delivered as spam - phpmailer, how to avoid 【发布时间】:2013-04-24 13:18:34 【问题描述】:我知道乍一看很多用户将此问题标记为重复,但在阅读了 10 多个问题后,我没有得到任何满意的答案,几乎所有问题的答案都带有“您无能为力。 ”、“我不确定”、“没有确定的投篮技巧”等这就是我写这个问题的原因,我认为这是非常笼统的问题,每个 php 开发人员都至少面临一次,好的演讲:) ,现在我的问题是..
我正在开发一个项目管理应用程序,并且正在使用 phpmailer 在创建任何任务或将任何错误邮件上的任何 cmets 发送给相关用户时发送邮件,实际上不是在操作发生后立即发送邮件我创建了一个'通知表,我实际上保存了所有邮件数据和一个 cron 脚本,然后发送所有邮件,这是我的 cron 脚本的一部分。
$query = "select * from notifications where 1 ";
$projects = $obj_basic->get_query_data($query);
if(!empty($projects))
foreach($projects as $data)
$message = html_entity_decode($data['content'], ENT_QUOTES);
list($ton, $email) = get_name_email($data['to']);
if(!empty($email))
$query = "select send_notification from users where email='$email' AND send_notification !='1' ";
$users = $obj_basic->get_query_data($query);
if(!empty($users))
$deleteQuery = "delete from notifications where id ='".$data['id']."'";
$obj_basic->run_query($deleteQuery, 'DELETE');
continue;
$comment_id = $data['reference_id'];
$attribute = $data['attribute'];
$mail = new PHPMailer();
list($fromName, $fromEmail) = get_name_email($data['from']);
if(!empty($comment_id) && $attribute == 'comment')
$fromEmail = 'comment@changewebaddress.com';
$mail->SetFrom($fromEmail, $fromName);
$mail->AddReplyTo($fromEmail, $fromName);
$mail->AddAddress($email, $ton);
$mail->BouncedTo = $fromEmail;
$mail->IsHTML(true);
$mail->Subject = $data['subject'];
$mail->Body = $message;
$MessageID = "<".md5($comment_id.'_'.$email).'@changewebaddress.com>';
$mail->MessageID= $MessageID;
if($mail->Send())
if(!empty($comment_id) && $attribute == 'comment')
$query = "SELECT message_id FROM `project_comments` WHERE `id`='$comment_id'; ";
$project_comments = $obj_basic->get_query_data($query, 'SELECT');
if(!empty($project_comments))
$project_comments[0]['message_id'] = html_entity_decode(trim($project_comments[0]['message_id'], ","));
$query = "UPDATE `project_comments` SET `message_id`=CONCAT_WS(',', '".mysql_escape_string($project_comments[0]['message_id'])."', '".mysql_escape_string(html_entity_decode($MessageID))."') WHERE `id`='$comment_id'; ";
$obj_basic->run_query($query, 'UPDATE');
$deleteQuery = "delete from notifications where id ='".$data['id']."'";
$obj_basic->run_query($deleteQuery, 'DELETE');
根据我的测试,一切看起来都不错,因为我使用的是 phpmailer,它设置了所需的标头,它还在标头中设置了“返回路径:”和“回复:”。
这个问题有没有确切的解决办法
【问题讨论】:
在什么意义上“作为垃圾邮件发送”? 请先搜索重复项,尽管您使用特定库,但这是一个非常广泛的主题。因此,首先要接受教育。 不,你的问题不会变成那种不时地给出明确答案的单一问题。不。相反,在您发现的十个问题中,您究竟尝试了哪些显示了您尝试的代码,哪些对您不起作用?如果你真的想得到这个答案,你需要概述一下。 该 cron 脚本 100% 无法确定您的电子邮件为何被视为垃圾邮件。你自己说过——你的研究指出了“无能为力”的答案。我不确定您对问同一个问题会得到不同答案的期望有多大。相反,您应该研究为什么电子邮件会被标记为垃圾邮件,并相应地修复您的电子邮件标记。 @SubodhGhulaxe 我阅读了您的问题并完全理解;你和其他人问同样的问题,你读过同样的答案,因为他们没有解决方案,你认为再次问同样的问题你会得到不同的答案。我不明白你的逻辑,但我明白你的问题。 【参考方案1】:-
确保设置了所有必需的标头。
检查是否有您应该设置的其他可选标头。
某些过滤器不赞成发送带有不匹配文本/HTML 部分的 HTML/多部分消息。
绝对任何您以编程方式发送的邮件都应该有一个链接或关于如何选择退出的说明。这通常仅由人工策划的黑名单和 ISP 的滥用部门强制执行。
确保您的 SMTP 服务器未被列入黑名单或声誉不佳。
确保您的 Web 服务器 没有不良声誉。一些扫描程序包括链中每个 MTA 的声誉。
在发送邮件之前查看邮件内容。如果其中的任何内容甚至可以粗略地解释为试图向某人出售某物,那就改变它。
向黑暗的电子邮件之神献祭一只小动物,希望对希望。
检查标记为垃圾邮件的邮件标头,看看垃圾邮件过滤系统是否留下任何有用的信息,说明它被阻止的原因。
询问接收服务器的管理员邮件被阻止的原因。
接受不存在,并且永远不会是“此问题的确切解决方案”。永远。
【讨论】:
关于第 8 步。根据您的经验,毛茸茸的可爱动物比蜥蜴或蟑螂等其他动物效果更好? :D @thaJeztah 这真的取决于你打算与哪个神打交道,如果你不幸不得不与 Ia'hu 或 Km'Kaast 打交道,我希望你是对你的所有孩子没有特别的依恋。 也只有你带来一次牺牲,不一定意味着它会永远有用。 @Sammitch 我曾接触过 G'mail 和 Live 的邪恶力量,并且知道它们可能非常难以预测!感谢您的警告! 如何或在哪里检查 6 号?【参考方案2】:这个问题有没有确切的解决办法
很遗憾没有。这是一个非常复杂的问题,它阻碍了精确的解决方案。
相反,您需要为每封标记为垃圾邮件的电子邮件找出导致垃圾邮件评分的原因,然后对您使用的软件和系统的部分进行逆向工程 - 无论是配置(改进配置和设置)或处理(修补您使用的软件并重新编译/部署)。
如果您想改善本网站上的情况 - 您写道,许多现有问题令人失望 - 请保留所做工作的工作日志并记录每个案例。将其作为答案放在这里,以便未来的用户可以从中受益。这不会像以前的用户在站点上所做的那样没有犯同样的错误,没有做这个文档,因此信息丢失了。
【讨论】:
【参考方案3】:接受的答案中有很多很好的建议。此外,将 SPF 记录添加到我的 DNS 有助于避免垃圾邮件过滤器。详细了解 SPF 记录:
http://en.wikipedia.org/wiki/Sender_Policy_Framework
Microsoft 有一个工具可以帮助创建此类记录:
http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/
【讨论】:
【参考方案4】:我知道这已经有一个可以接受的答案,但这是针对可能像我一样遇到同样问题并最终来到这里的其他人。我有一个网站,从我的网站发送的邮件最终进入垃圾邮件箱。即使我尝试使用 phpmailer 并将我们公司的邮件服务器添加为 SMTP。
但是,通过将网站的 IP 地址列入您的邮件服务器的发送过滤器的白名单,可以轻松解决此问题。我不知道这是如何完成的,因为邮件服务器的管理员为我做了这个(我猜是谷歌)。
这样做意味着如果接收方对您的邮件服务器进行 DNS 查找或 IP 查找。邮件服务器告诉接收方它确实是从他或他的关联 IP 地址发送的,因此它不会最终进入垃圾邮件箱。
但是,如果您这样做,则不需要 phpmailer,标准的 mail() 函数也可以工作。
【讨论】:
以上是关于作为垃圾邮件发送的邮件 - phpmailer,如何避免的主要内容,如果未能解决你的问题,请参考以下文章