【问题标题】:ASP.NET: Send MailASP.NET:发送邮件
【发布时间】:2010-12-08 18:02:34
【问题描述】:

我尝试从 asp.net 脚本发送邮件,但收到此错误:

System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应为:4.1.8:发件人地址被拒绝:在 System.Net.Mail.SmtpTransport.SendMail(MailAddress 发件人,MailAddressCollection 收件人,字符串 deliveryNotify,SmtpFailedRecipientException& 异常)处找不到域 System.Net.Mail.SmtpClient.Send( MailMessage 消息)在 Clematis_ADO.sites.Kvittering.Page_Load(Object sender, EventArgs e)

据我了解,它不能使用我指定的 smtp 服务器,但我使用的是我的虚拟主机提供的 smtp 服务器。那么错误可能是什么?

这是在 webhost 上测试的,而不是 localhost。

以及我为此使用的代码:

 try
         {
             StringWriter sw = new StringWriter();
             HtmlTextWriter w = new HtmlTextWriter(sw);
             OrderConfirmationContainer.RenderControl(w);
             string s = sw.GetStringBuilder().ToString();

             MailMessage mail = new MailMessage();

             string emailSubject = "Testing";

             mail.To.Add(new MailAddress(order.getFname() + " " + order.getLname() + "<"+order.getEmail()+">"));
             mail.Sender = new MailAddress("****** <***@***.com>");
             mail.From = new MailAddress("***@***.com");
             mail.Subject = emailSubject;
             mail.IsBodyHtml = true;
             mail.Body = "<h3>" + emailSubject + "</h3>" + s;

             SmtpClient smtp = new SmtpClient();
             smtp.Host = "mailoutb1.surf-town.net";
             smtp.Send(mail);

         }
         catch (Exception exception)
         {
             if(exception != null)
                MailLabel.Text = "Mail fejlen er: " + exception.ToString();
         }

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    一些必要的背景知识: SMTP 服务器通过设计“中继”消息,即您将消息发送到 SMTP 服务器,它会查看它是否用于“本地”收件人,如果不是,则将其转发到另一台服务器进行传递(由 MX 记录等确定)。

    不幸的是,这使得垃圾邮件发送者(很好制作)事情变得容易,所以现在 SMTP 服务器往往被锁定,因此必须满足以下条件之一:

    1. 邮件是给已知/本地收件人的
    2. 发送计算机与 SMTP 服务器位于/位于同一网络中(为了便于讨论)或
    3. 发件人已通过某种方式进行身份验证(用户名/密码或类似名称)。

    有些甚至更挑剔,要求他们也知道发送(“发件人”)域。

    上述所有问题的原因是,您看到的错误与我从我的提供商(服务器和托管)看到的错误基本相同,如果我尝试在没有先进行身份验证的情况下(来自我们的专用服务器或来自电子邮件客户端)。

    如果您使用的是通用托管网络空间并收到此错误,那么您需要与主机(帮助页面、知识库等)核实,以了解他们希望您如何从您的应用程序发送电子邮件。

    在 SmtpClient 中似乎确实有设置凭据的范围,但是我没有发现这有必要,因此对细节没有太大帮助。

    【讨论】:

      【解决方案2】:

      如果您想同时提供地址和显示名称,使用constructor that takes two parameters 而不是自己连接两者更容易。

      mail.To.Add(new MailAddress( order.getEmail(), order.getFname() + " " + order.getLname()));
      

      我知道这并不能解决您的问题,但我想我会提到它。

      【讨论】:

        【解决方案3】:

        您收到的错误似乎是因为 SMTP 服务器实际上拒绝了电子邮件,因为您尝试发送或发送的域名错误或被列入黑名单。

        您是使用虚假电子邮件地址还是真实电子邮件地址进行测试(请告诉我,您并没有真正尝试向 ****@****.com 发送电子邮件或从 ****@****.com 发送电子邮件)?如果是真的,您可能需要致电您的 ISP 并查看他们使用的黑名单,并查看您尝试发送到的域是否被列入黑名单。

        【讨论】:

        • 嘿,我也有同样的问题,是否可以检查我的域是否错误或被列入黑名单?
        【解决方案4】:

        我知道一些虚拟主机会锁定他们的 smtp 服务器,只允许在“发件人”是域中的有效邮箱时发送邮件。您的 mail.sender 值是有效邮箱吗?

        【讨论】:

          猜你喜欢
          • 2012-04-20
          • 1970-01-01
          • 2012-12-11
          • 2016-09-15
          • 2011-06-26
          • 2011-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多