2009-10-21 114 views
0

我试着从一个asp.net脚本发送邮件,但即时得到这个错误:ASP.NET:发送邮件

System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应是:4.1.8:发件人地址被拒绝:在System.Net.Mail.SmtpTransport.SendMail(MailAddress发件人,MailAddressCollection收件人,String deliveryNotify,SmtpFailedRecipientException异常)找不到域Domain.Net.Mail.SmtpClient.Send在Clematis_ADO.sites.Kvittering.Page_Load(对象发件人,EventArgs e)项(消息MAILMESSAGE)

按照我的理解这一点,就不能使用我指定的SMTP服务器,但使用SMTP服务器通过给IM我虚拟主机提供商。那么错误是什么?

这是在虚拟主机上测试的,而不是本地主机。

并使用此代码IM:

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(); 
     } 

回答

2

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

您是使用假电子邮件地址进行测试还是真实电子邮件地址(请告诉我您并非真的想要发送电子邮件到****@****.com或从中发送邮件)?如果它是真实的,你可能必须打电话给你的ISP,看看他们正在使用什么黑名单,看看你试图发送到的域是否被列入黑名单。

1

我知道有些主机商锁定他们的SMTP服务器只允许邮件时的“发件人”是域中有效的邮箱发送。您的mail.sender值是否为有效邮箱?

0

如果您想同时提供地址和显示名称,则使用constructor that takes two parameters更容易,而不是自己将这两者结合在一起。

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

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

0

有点必要的背景: SMTP服务器按设计“中继”消息,即你发送一条消息到SMTP服务器,它看到它是否为“本地”收件人,如果不是它转发到另一台服务器交付(由MX记录等确定)。

不幸的是,这使得(以及取得)的东西容易为垃圾邮件发送者所以现在的SMTP服务器往往会被锁定,使下列条件之一必须满足:

  1. 该消息是一个已知/本地收件人
  2. 发件人计算机与SMTP服务器在同一网络上(为了讨论的缘故)或
  3. 发件人以某种方式进行了身份验证(用户名/密码或类似)。

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

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

如果您使用的是通用托管网站空间并且出现此错误,那么您需要与主机(帮助页面,知识库等)进行核对,以了解他们希望您能够如何从应用程序发送电子邮件。

似乎在SmtpClient中设置证书的范围,但我没有发现这个必要,所以不能帮助很多细节。