问题是关于在ASP.NET中发送电子邮件

时间:2011-01-25 20:38:34

标签: c# asp.net

protected void SendEmail(object sender, EventArgs e)
    {
        SmtpClient smtpClient = new SmtpClient();
        MailMessage message = new MailMessage();
        try
        {
            MailAddress fromAddress = new MailAddress("fromemail", "From Me");
            MailAddress toAddress = new MailAddress("toemail", "To You");
            message.From = fromAddress;
            message.To.Add(toAddress);
            message.Subject = "Testing!";
            message.Body = "This is the body of a sample message";
            smtpClient.Host = "smtp.host.com";
            smtpClient.Credentials = new System.Net.NetworkCredential("username", "password");
            smtpClient.EnableSsl = true;
            smtpClient.Port = 587;
            smtpClient.Send(message);
            statusLabel.Text = "Email sent.";
        }
        catch (Exception ex)
        {
            statusLabel.Text = "Coudn't send the message!\n"+ex.Message;
        }
    }

错误是

  

“发送邮件失败。”

我不能发送任何内容。 有什么问题?

innerexception是

System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应System.Net.Sockets.Socket上的74.125.39.109:587 System.Net.SService.ConnectSocketInternal的System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)上的.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)(布尔值connectFailure,套接字s4,套接字s6,套接字&套接字,IPAddress&地址,ConnectSocketState state,IAsyncResult asyncResult,Int32 timeout,Exception& exception)---内部异常堆栈跟踪的结束---在System.Net.ServicePoint.GetConnection(PooledStream PooledStream,Object owner,Boolean async,IPAddress& address,Socket& abortSocket, System.Net.Poole上的System.Net.PooledStream.Activate(Object owningObject,Boolean async,Int32 timeout,GeneralAsyncDelegate asyncCallback)中的Socket& abortSocket6,Int32 timeout) System.Net上的System.Net.Mail.SmtpConnection.GetConnection(String host,Int32 port)上的System.Net.ConnectionPool.GetConnection(Object owningObject,GeneralAsyncDelegate asyncCallback,Int32 creationTimeout)中的dStream.Activate(Object owningObject,GeneralAsyncDelegate asyncCallback)。 System.SNet.Mail.SmtpClient.Send(MailMessage消息)中的System.Net.Mail.SmtpClient.GetConnection()上的Mail.SmtpTransport.GetConnection(字符串主机,Int32端口)

7 个答案:

答案 0 :(得分:2)

对于SmtpException,您总是必须通过Exception.InnerException属性检查内部异常。总是

答案 1 :(得分:2)

删除try / catch,看看会发生什么: - )

您可以先在本地测试:

<mailSettings>
    <smtp deliveryMethod='SpecifiedPickupDirectory'>
        <specifiedPickupDirectory pickupDirectoryLocation="c:\maildrop" />
    </smtp>
</mailSettings>

更多详情:

http://weblogs.asp.net/gunnarpeipman/archive/2010/05/27/asp-net-using-pickup-directory-for-outgoing-e-mails.aspx

答案 2 :(得分:1)

从内部异常:74.125.39.109:587无法到达。

确保:

  1. 74.125.39.109:587实际上有一台运行的SMTP服务器
  2. 从运行代码的服务器,确保您可以连接到该IP:端口(没有防火墙或病毒扫描程序阻止传出的smtp连接尝试)。
  3. 测试的一种方法是从同一台服务器打开到74.125.39.109:587的telnet连接。

答案 3 :(得分:0)

尝试取出所有smtp服务器设置并将mailSettings放入app / web.config

                                   

有时邮件服务器不允许邮件中继。在这种情况下,您需要设置虚拟smtp服务器。

Relaying in IIS 6

如果您使用的是Windows Server 2008,则需要安装IIS 6管理控制台来配置中继。

答案 4 :(得分:0)

默认SMTP端口为25.您使用的是587,这可能是问题所在。或者是否有使用端口的原因?

答案 5 :(得分:0)

你使用587作为端口....这类似于gmail的smtp服务端口号....如果你使用gmail smtp服务...尝试使用这个......

主持人:smtp.gmail.com 港口:587

在网络清单中提供有效的gmail用户名及其密码......

还检查您的互联网连接

答案 6 :(得分:-1)

我记得我遇到类似的问题,我找到的解决方案是:

之前:

smtpClient.Send(message);

把这一行:

ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

顺便说一句:

端口应该是: smtp.Port = 25;