我正在尝试使用asp.net mvc应用程序发送电子邮件。 Smtp客户端在web.config中配置,例如:
<mailSettings>
<smtp from="noreply@test.sk">
<network host="mail.test.sk" defaultCredentials="false" userName="noreply@test.sk" password="pass" port="25"/>
</smtp>
</mailSettings>
C#:
using (SmtpClient client = new SmtpClient())
{
MailMessage message = new MailMessage(from, to, subject, body);
client.Timeout = 10000;
client.Send(message);
return false;
}
问题是,在我尝试使用outlook发送电子邮件之前,它不起作用(我得到超时异常)。在通过outlook发送电子邮件之后,它也成功地通过我的Web应用程序发送它。是否有一些特殊的身份验证,Outlook正在进行,然后允许来自我的IP的所有电子邮件进行身份验证?它只是在通过outlook发送后才能起作用的原因是什么?
顺便说一句: 我正在VS asp.net开发服务器上运行该应用程序。当我将其部署到webhosting服务器时,它不起作用(超时)。 我的网站托管服务提供商告诉我,该服务器上有一个经典的smtp身份验证(不是smtp之前的pop3)。
编辑:
我想通了,当它工作时我通过telnet尝试或通过wireshark跟踪它,通信开始于:
220 mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-PIPELINING
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
...
与不工作时相比(仅在前一天尝试过),整个通信看起来像:
220-mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
因此支持的身份验证方法和流水线支持存在差异。我猜System.Net.Mail.SmtpClient然后不知道它应该使用哪种身份验证方法,因此它会卡住,因此我得到超时异常。
有趣的是,Outlook连接和发送电子邮件没有问题。
我没有使用他们的smtp服务器解决了我的问题,因为我已经没时间了。我正在使用gmail的smtp服务器。我创建了新的gmail帐户,我将别名设置为我需要的内容,因此电子邮件看起来就像第一次看起来不是来自gmail。
答案 0 :(得分:0)
我在网站上修复了类似的问题,并在研究问题时遇到了这个问题。
以下代码适用于Google Apps for Business;
public class SendSMTPEmail
{
public static void SendText(string ToName, string ToEmail, string FromName, string FromEmail, string Subject, string Content)
{
MailAddress from = new MailAddress(ToEmail, ToName);
MailAddress to = new MailAddress(ToEmail, ToName);
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("username@googlemail.com", "yourpassword"),
Timeout = 20000
};
MailMessage message = new MailMessage()
{
From = from,
Body = Content,
Subject = Subject
};
message.To.Add(to);
smtp.Send(message);
}
}
这有帮助吗?