C#SMTP邮件发送通常由于缺少凭据而失败?

时间:2012-04-16 18:53:25

标签: c# asp.net email smtp smtpclient

似乎当你使用SmtpClient类和MailMessage发送电子邮件时,一切正常。它确实发送了它。但是,某些服务器(例如您的企业Exchange Server或Gmail.com或任何服务)有时会拒绝这些电子邮件(因为它们可能是网络钓鱼站点或垃圾邮件站点?)

我正在使用这个并且很多地方拒绝我认为的电子邮件:

SmtpClient smtp = new SmtpClient
{
 Host = smtpClient,
 Timeout = 40000, // 40 seconds
 DeliveryMethod = SmtpDeliveryMethod.Network
};

你是如何解决这个问题的?您是否必须使用登录凭据来识别/列入白名单的服务器,以便它是经过授权和信任的电子邮件?

我可以使用像GMAIL身份验证之类的东西,但我的服务器应该被允许发送电子邮件,它不应该依赖于gmail。

5 个答案:

答案 0 :(得分:4)

很久以前,互联网上有许多服务器提供电子邮件服务,而不会询问有关谁在使用该服务的太多问题。
然后是 SPAMMERS! 一个在世界各地自由发送邮件的服务器不再是互联网的恩人,而是一个问题 现在,越来越难以找到一台在没有要求凭证的情况下在互联网上发送邮件的服务器。

您的电子邮件服务器(smtp.yourbusiness.com或您想要的任何内容)不信任您。 当您要求它为您发送电子邮件时,它想知道您是谁。

SmtpClient smtp = new SmtpClient  
smtp.Host = "smtp.yourbusiness.com"; 
NetworkCredential credentials = new NetworkCredential("your_user_name_on_smtpserver", "your_password_on_smtpserver"); 
smtp.Credentials = credentials; 

答案 1 :(得分:2)

您是设置发件人邮件地址,是否可以通过反向DNS查找来解析您的邮件服务器?一些垃圾邮件过滤器不信任他们无法反向查找的邮件服务器。例如,如果您使您的邮件服务器使用虚假或外国邮件域发送邮件,垃圾邮件过滤器可能会选择此邮件并过滤您的邮件。如果您为域设置了SPF记录,并且您的发送邮件服务器不在该记录中,则来自该服务器的邮件通常也会被垃圾邮件过滤器过滤。另一个原因可能是来自已知由互联网提供商动态分配的范围的IP地址。从这些地址范围发送的邮件服务器主要是垃圾邮件机器人,因此通常也会被过滤。

答案 2 :(得分:0)

要发送GMail,您需要指定一些设置 - 是的,您需要使用身份验证(GMail不会向所有人开放中继,或者他们会被用于发送垃圾邮件)。

如果我没记错,您需要发送TCP端口587,启用SSL,托管mail.google.com并在SmtpClient上提供用户名和密码以使Gmail实际发送 - 忽略其中一个那些人通常会从他们那里发回一封电子邮件,告诉你你忘记了什么。

编辑:只是为了澄清用户名和密码位;您需要使用GMail帐户的用户名和密码创建新的NetworkCredential,并将Credentials的{​​{1}}属性设置为该属性。

答案 3 :(得分:0)

您应该查看此帖子,了解如何使用Gmail smtp服务器发送电子邮件。

sending emails with gmail

答案 4 :(得分:0)

如果我正确地解释了您的问题:邮件是从您的服务器发送给我们的,但是它们被困在接收端的垃圾邮件过滤器中?

如果这是问题所在,它与您发送邮件的方式无关,而是与邮件内容和服务器的特征有关。因此,您使用的凭据或使用SmtpClient或任何其他类发送的凭据无关紧要。移至Gmail无效,Gmail对您可以发送的邮件数量有限制。

像垃圾邮件刺客使用规则的垃圾邮件过滤器。匹配太多:您的邮件被视为垃圾邮件。

看看这个例子:

http://spamassassin.apache.org/tests_3_3_x.html

因此,请确保您的消息得分不会太高,而且会消失。