向本地域发送电子邮件

我有一个从网站发送电子邮件的简单方法:

... // local vars using (var mail = new MailMessage(from, sendTo)) { using (var smtp = new SmtpClient()) { mail.CC.Add(cc); mail.Bcc.Add(bcc.Replace(";", ",")); mail.Subject = subject; mail.Body = body; mail.IsBodyHtml = html == -1; mail.Priority = priority; mail.BodyEncoding = mail.SubjectEncoding = mail.HeadersEncoding = Encoding.UTF8; smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; try { if (mail.Body.IsNotEmpty()) { smtp.Send(mail); } } catch { smtp.DeliveryMethod = SmtpDeliveryMethod.Network; try { if (mail.Body.IsNotEmpty()) { smtp.Send(mail); } } catch(Exception e) { // I log the error here } } } } 

哪个效果很好; 但是,当发件人是anything@domainname.com且收件人是bob@domainname.com ,电子邮件会卡在inetpub/mailroot目录的Drop文件夹中,而不会发送给收件人。

问题是 – 如何解决这个问题,以便能够向同一(本地)域名的人发送电子邮件?

我认为这几乎肯定是邮件服务器配置问题。

根据SmptClient.Send()文档 ,您端的任何错误配置(主机,凭据,端口,SSL,防火墙,防病毒等)都应抛出InvalidOperationExceptionSmtpException

事实上,您可以使用相同的代码和配置发送外部邮件 – 这意味着您与邮件服务器的连接也非常强烈地表明问题出在下游。

我曾在过去的公司工作过,这些公司有不同的邮件服务器,用于内部和外部邮件传递。

值得考虑的是Credentials用于消息的内容。 也许你有一条规则只允许一个团体的成员(所有公司或类似的东西)将邮件发送到内部地址。 您可以使用您的真实域凭据进行检查(并在测试后删除它们)

 smtp.Credentials = new NetworkCredential("your.username", "your.password"); 

无论哪种方式,如果没有生成exception,则应该在邮件服务器上收到该消息,并由该服务器决定传送。

试试这个,它适用于我。

  MailMessage mail = new MailMessage(); mail.From = new MailAddress("mymail@mail.com"); mail.To.Add("anymail@mail.com"); mail.To.Add(empfaenger.Text); mail.Subject = "Betreff Text"; mail.Body = "body Text"; SmtpClient client = new SmtpClient("smtp", "port"); client.UseDefaultCredentials = false; try { client.Credentials = new System.Net.NetworkCredential("mymail@mail.com", "anymail@mail.com"); client.EnableSsl = true; client.Send(mail); } catch (Exception ex) { //If not than...... } 

我制作了一个使用此配置发送电子邮件的工具:

 MailMessage mail = new MailMessage("senderaddress", "recipientaddress"); SmtpClient client = new SmtpClient() { Host = "smtpserver", Port = 587,//standard port for the most of the server`s DeliveryMethod = SmtpDeliveryMethod.Network, EnableSsl = true, UseDefaultCredentials = false//I got the address and the password so I don`t need the default-credentials }; NetworkCredential na = new NetworkCredential("yoursender", "senderpassword");//I let the user input his email-address and password to get auntenthificated client.Credentials = na; mail.Subject = "subject"; mail.Body = "body"; mail.IsBodyHtml = true;//I use to send html formated text try { client.Send(mail); } catch (Exception)//for debugging purposes I used the default exception { MessageBox.Show("Sending failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } 

当我想从一个域发送到同一个主机时,它对我来说很好,所以我希望它对你来说也很好用!