ASP.NET:发送邮件

时间:2009-10-21 14:51:03

标签: asp.net

我试图从asp.net脚本发送邮件,但是我收到了这个错误:

System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应是:4.1.8:发件人地址被拒绝:System.Net.Mail.SmtpClient.Send上的System.Net.Mail.SmtpTransport.SendMail(MailAddress sender,MailAddressCollection recipients,String deliveryNotify,SmtpFailedRecipientException& exception)中找不到域(MailMessage消息),位于Clematis_ADO.sites.Kvittering.Page_Load(对象发送者,EventArgs e)

据我所知,它不能使用我指定的smtp服务器,但我使用我的webhost提供的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();
         }

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我知道有些webhost会锁定他们的smtp服务器,只允许在“sender”是域中的有效邮箱时发送邮件。您的mail.sender值是否为有效邮箱?

答案 2 :(得分:0)

如果您想同时提供地址和显示名称,则可以更轻松地使用constructor that takes two parameters而不是自己将两者结合使用。

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

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

答案 3 :(得分:0)

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

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

  1. 该邮件适用于已知/本地收件人
  2. 发送计算机与SMTP服务器或
  3. 位于同一网络中(为了便于讨论)
  4. 以某种方式验证发件人(用户名/密码或类似名称)。
  5. 有些人更挑剔,并要求他们也知道发送(“来自”)域名。

    以上所有的原因是,如果我尝试将邮件发送给第三方而没有首先进行身份验证(或者是其中一个),您看到的错误基本上与我从我的提供商(服务器和托管服务器)看到的错误相同我们的专用服务器或电子邮件客户端)。

    如果您正在使用通用托管网站空间并收到此错误,那么您需要检查主机(帮助页面,知识库,等等),以了解他们希望您能够从您的应用程序发送电子邮件。

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