C# 向本地域发送电子邮件

C# 向本地域发送电子邮件,c#,asp.net,smtp,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.

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

... // 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
文件夹中,从未发送给收件人


问题是-我如何才能绕过这个问题,向同一(本地)域上的人发送电子邮件?

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

根据说明,您端的任何错误配置(主机、凭据、端口、SSL、防火墙、防病毒等)都应引发
invalidoOperationException
SmtpException

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

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

值得考虑的是消息使用了哪些凭据。也许您有一条规则,只允许组成员(所有公司或类似的公司)向内部地址发送邮件。您可以使用真实的域凭据(并在测试后删除它们)来检查这一点


无论哪种方式,如果没有生成异常,邮件服务器都应该接收到邮件,由该服务器决定是否发送。

我制作了一个工具,用于发送具有以下配置的电子邮件:

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

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

试试这个,它对我有效

            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......
            }

它如何知道邮件服务器在哪里?是否在配置文件中指定它?是的,设置位于
web.config
文件中。是否检查了
web.config
smtp配置?您需要根据邮件服务器的配置进行调整。举个例子,如果你通过gmail发送邮件,你需要设置他们的特定端口(我猜是587)并启用SSL。这可能是DNS问题。你可以在。我知道,您可以在某些邮件服务器中启用/禁用基于IP(或其他属性)的本地域传递。但这也是一个服务器问题。这是我对该主题的知识范围。我认为您应该添加网络证书。我非常确定我在SMTP日志文件夹中看到了错误
RBL限制:被内部声誉服务列入黑名单,但现在无法找到它。我们将首先按照@VDWWD注释对DNS警告进行排序,然后我将发布结果。回答您的评论-catch块中没有记录任何内容。您是对的-这是邮件服务器配置问题。我不知道它到底是什么,因为管理员回来说“它应该被排序”。
            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......
            }