向本地域发送电子邮件

Mor*_*eus 4 c# asp.net smtp

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

... // 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

ste*_*-fu 5

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

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

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

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

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

smtp.Credentials = new NetworkCredential("your.username", "your.password");
Run Code Online (Sandbox Code Playgroud)

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