我有一种从网站发送电子邮件的简单方法:
... // 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
,则电子邮件会卡在Drop
目录的inetpub/mailroot
文件夹中,而不会发送给收件人。< / p>
问题是 - 我如何解决这个问题,以便能够向同一(本地)域名的人发送电子邮件?
答案 0 :(得分:5)
我认为这几乎肯定是邮件服务器配置问题。
根据SmptClient.Send() Documentation您端的任何不正确配置(主机,凭据,端口,SSL,防火墙,防病毒等)应该抛出InvalidOperationException
或SmtpException
。< / p>
您可以使用相同的代码和配置发送外部邮件 - 这意味着您与邮件服务器的连接也非常强烈地表明问题出在下游。
我曾在过去的公司工作,这些公司有不同的邮件服务器,用于内部和外部邮件传递。
值得考虑的是Credentials用于消息的内容。也许你有一条规则只允许一个团体的成员(所有公司或类似的东西)向内部地址发送邮件。您可以使用真实的域凭据进行检查(并在测试后删除它们)
smtp.Credentials = new NetworkCredential("your.username", "your.password");
无论哪种方式,如果没有生成异常,应该在邮件服务器上收到邮件,并由该服务器决定传递。
答案 1 :(得分:2)
我制作了一个使用此配置发送电子邮件的工具:
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);
}
当我想从一个域发送到同一个主机时,它对我来说很好用,所以我希望它对你来说也很好用!
答案 2 :(得分:2)
试试这个,它适用于我。
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......
}