我创建了一个社区门户网站,用户可以在其中创建自己的帐户。成功注册后,将在注册的电子邮件地址发送确认邮件。
我使用以下代码发送邮件 -
private void SendMail(string recvr, string recvrName, string verCode, int NewUserID)
{
try
{
string emailID = ConfigurationManager.AppSettings["WebMasterMail"];
string mailPass = ConfigurationManager.AppSettings["pass"];
string mailer = ConfigurationManager.AppSettings["mailer"];
MailMessage msg = new MailMessage();
MailAddress addrFrom = new MailAddress(emailID, "Panbeli.in.... Bari community portal");
MailAddress addrTo = new MailAddress(recvr, recvrName);
msg.To.Add(addrTo);
msg.From = addrFrom;
msg.Subject = "You have registered sucessfully on PanBeli.in.";
msg.Priority = MailPriority.High;
msg.Body = RegisterMessageBody(recvrName, verCode,NewUserID);
msg.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient(mailer);
smtp.Credentials = new System.Net.NetworkCredential(emailID, mailPass);
smtp.Send(msg);
}
catch (Exception Ex) { }
}
测试时我们发现所有确认邮件都是垃圾邮件文件夹而不是收件箱。
代码有什么问题,或者是否有任何与安全相关的内容。
任何人都可以建议解决这个问题。
感谢您分享您的时间。
答案 0 :(得分:27)
听起来您的电子邮件被SpamAssassin等标记,因此您只需要专注于更改您的电子邮件,以免被标记。
您的内容听起来没有任何理由为贝叶斯分数评分,所以我不认为这是问题所在。尝试删除可能的触发词并不会有什么坏处。
您的邮件标记为高优先级。你需要这个吗?这只是垃圾邮件过滤器中的一个评分指标。垃圾邮件通常标记为高优先级,因此您的邮件将受到更严格的审查。另一方面,对于某些过滤器来说,优先考虑你的信息将意味着更少的审查。
IsBodyHTML
标记为true,但您只提供text/html
。您最低限度需要包含text/plain
的备用视图。
message.IsBodyHtml = true;
string html = RegisterMessageBodyHtml(recvrName, verCode,NewUserID);
string plain = RegisterMessageBodyPlaintext(recvrName, verCode, NewUserID);
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html"));
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plain, new ContentType("text/plain"));
了解Google如何处理您的消息。在Gmail中,打开您发送的测试邮件,单击“回复”按钮旁边的向下箭头,然后选择“显示原始文件”。您会看到Google如何处理您的邮件。寻找像:
这样的标题Received-SPF: softfail (google.com: domain of transitioning xxx@xxx.org does not designate xx.xx.xx.xx as permitted sender) client-ip=xx.xx.xx.xx;
Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning xxx@xxx.org does not designate xx.xx.xx.xx as permitted sender)
阅读SpamAssassin的默认规则集,因为它可能是大多数过滤器规则集的一个很好的参考。如果您可以确定邮件被标记的原因,您可以修复它。
答案 1 :(得分:7)
电子邮件被标记为垃圾邮件
遗憾的是,这不是一个编程问题,但我可以理解为什么你会认为它是。 代码正在发送电子邮件,并且已按照您的报告发送。所以这不太可能是你的代码的问题,因为它完全符合它的目的!
绕过它
这一切都归结为收件人邮件客户端(他们用来查看电子邮件的软件),或者在某种网关上处理电子邮件的服务,或两者的组合!
所有这些元素都有各种各样的算法和指标,用于确定电子邮件是否可能是垃圾邮件。因此,一个人适合所有解决方案是不可能的。有些是聪明的,有些则不那么有些,有些人粗暴地丢弃了大量的电子邮件,其他人纯粹是在“不在白名单上”,“你没有进入”政策,然后有些人只是让一切都进来而不管内容/原点。
解决这个问题的方法有:
答案 2 :(得分:4)
您的发件人地址无效。尝试输入指向有效邮箱的真实电子邮件地址。此电子邮件地址最好与您用来发送邮件的SMTP服务器位于同一个域中。如果没有,请阅读SPF http://en.wikipedia.org/wiki/Sender_Policy_Framework
答案 3 :(得分:2)
在创建MailMessage
msg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");
答案 4 :(得分:1)
这件事发生在我身上,现在已经解决了, 我只是在MailMessage对象上设置BodyEncoding和SubjectEncoding属性, 并将DOCTYPE和html标签添加到我的电子邮件标题
var msg = new MailMessage
{
Subject = subject,
Body = body,
BodyEncoding = System.Text.Encoding.UTF8,
SubjectEncoding = System.Text.Encoding.Default,
IsBodyHtml = true
};
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
它现在正常运作
答案 5 :(得分:0)
即使对于房屋名称,这种情况也会发生很多。我很同情你,因为你只想要一个纯文本邮件,但如果你的客户真的想要那些电子邮件而你真的想要你的徽标,那么他们就可以白名单列出您的域名,以便所有电子邮件都能通过!
我们使用一家名为mailchimp的公司发送订阅者邮件,我询问他们如何避免使用垃圾邮件过滤器,特别是在基本上是一个广告群体的情况下,很难避免它们,这是他们的建议并且有很多。;
答案 6 :(得分:0)
对于有此问题的任何人,看起来Google都会使用默认的ASP.NET电子邮件身份验证主题和正文将所有邮件标记为垃圾邮件。即:
“请点击此处确认您的帐户。”
更改文本可以使电子邮件通过垃圾邮件过滤器