我知道,在第一眼看,很多用户将这个问题标记为重复,但在阅读了10多个问题之后,我没有得到任何满意的答案,几乎所有问题都有答案,例如“你可以做的事情不多。 “,”我不确定“,”没有确定的射击技巧“等等,这就是我写这个问题的原因,我认为这是非常普遍的问题,而且每个php开发人员至少面对它一次,确实足够的语言:) ,现在我的问题是......
我在项目管理应用程序上工作,并且在创建任何任务时使用phpmailer发送邮件,或者任何有关任何错误邮件的评论被发送给相关用户,实际上不是在动作发生后立即发送邮件我创建了'通知表我实际保存所有邮件数据和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设置了所需的标题,它还在标题中设置了'Return-Path:'和'Reply-To:'。
这个问题是否有任何确切的解决方案
答案 0 :(得分:15)
答案 1 :(得分:3)
这个问题是否有任何确切的解决方案
不幸的是没有。这是一个非常重要的问题,其复杂程度很高,无法准确解决问题。
相反,您需要查找标记为垃圾邮件的每个电子邮件,这些电子邮件会导致垃圾邮件评分,并将其反向工程,然后再转换为您使用的软件和系统的部分 - 配置(改进配置和设置)或处理(修补您使用的软件并重新编译/部署)。
如果你想改善这个网站上的情况 - 你写道许多现有的问题都令人失望 - 请保留一份工作日志并记录每个案例。将此作为答案,以便将来的用户可以从中受益。这不会像以前的用户在网站上做的那样做错误,因为没有这个文档,因此缺少信息。
答案 2 :(得分:2)
接受的答案中有很多好的建议。此外,在我的DNS中添加SPF记录有助于避免垃圾邮件过滤器。了解有关SPF记录的更多信息:
http://en.wikipedia.org/wiki/Sender_Policy_Framework
Microsoft有一个帮助创建此类记录的工具:
http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/
答案 3 :(得分:1)
我知道这已经有了一个公认的答案,但这适用于那些可能像我一样遇到同样问题并在此结束的人。我有一个网站,邮件从我的网站发送到垃圾邮箱。即使我尝试使用phpmailer并将我们公司的邮件服务器添加为SMTP。
但是,通过白名单将网站的IP地址列入邮件服务器的发送过滤器,可以轻松解决这个问题。这是怎么做的我不知道,因为邮件服务器的管理员为我做了这个(谷歌,我猜)。
这样做意味着如果接收方对您的邮件服务器进行DNS查找或IP查找。邮件服务器告诉接收方它确实是从他或他的关联IP地址发送的,因此它不会最终出现在spambox中。
但是,如果你这样做,则不需要phpmailer,标准的mail()函数也可以。