如何从我的C#代码隐藏发送电子邮件 – 获取System.Net.Mail.SmtpFailedRecipientException

我有一个网络表单,有人可以设置帐户 – 我想给他们发送电子邮件确认。

我正在使用的代码:

// Create e-mail message MailMessage mm = new MailMessage(); mm.From = new MailAddress("OurOrganisationEmail@ourdomain.com", "Our Organisation"); mm.To.Add(new MailAddress("webuser@domain.com", "Web User")); mm.Subject = "Confirmation"; mm.Body = "You are now registered test"; mm.IsBodyHtml = true; // Send e-mail sc = new SmtpClient(); NetworkCredential basicAuthenticationInfo = new NetworkCredential(“OurOrganisationEmail@ourdomain.com”, “ourorganisationemailPassword”); sc.Credentials = basicAuthenticationInfo; sc.UseDefaultCredentials = false; sc.Send(mm); 

web.config中:

        

但得到:

 System.Net.Mail.SmtpFailedRecipientException was caught HResult=-2146233088 Message=Mailbox unavailable. The server response was: Authentication is required for relay Source=System FailedRecipient= 

看起来它想要我想要发送到的url的用户登录详细信息。 我该如何修改并发送所有其他商业公司的确认电子邮件?

好的 – 让它工作。 以下是工作编码; 看起来像我配置NetworkCredential对象是问题。 感谢大家帮助我帮助我找到解决方案。

  MailAddress fromAddress = new MailAddress("OurOrganisationEmail@ourdomain.com","Our Organisation");//"name@yourdomain.com"; MailAddress toAddress = new MailAddress("webuser@domain.com", "Web User"); //"name@anydomain.com"; //Create the MailMessage instance MailMessage myMailMessage = new MailMessage(fromAddress, toAddress); //Assign the MailMessage's properties myMailMessage.Subject = "Confirmation"; myMailMessage.Body = "You are now registered test"; myMailMessage.IsBodyHtml = true; //Create the SmtpClient object SmtpClient smtp = new SmtpClient(); //Send the MailMessage (will use the Web.config settings) smtp.Send(myMailMessage); 

web.config中

        

您的客户端代码看起来很好,问题可能出在web.config

 host="mail.OurOrganisationEmail@ourdomain.com" 

它是一个email address ,而不是有效的hostname它应该如下所示:

 host="mail.ourdomain.com" 

你测试过smtp server有效吗? 只需使用telnet进行一些基本测试。 http://technet.microsoft.com/en-us/library/aa995718(v=exchg.65).aspx

此外,请查看此post了解更多信息通过C#通过Google Apps帐户发送电子邮件

我猜这是因为您的网站没有在域帐户下运行。 许多邮件服务器不允许匿名用户发送电子邮件。

您可以尝试创建域中的服务帐户,并将应用程序池设置为在该服务帐户下运行。