【问题标题】:.NET - Mail server doesn't send mail through SmtpClient.Send.NET - 邮件服务器不通过 SmtpClient.Send 发送邮件
【发布时间】:2012-05-16 11:02:41
【问题描述】:

我写了一个控制台应用程序(只是站点代码的一部分,但它也必须分开工作,并且与站点内部的故障结果相同)(C#):

MailMessage message = new MailMessage("login@ourDomenInPunycode", "toMail")
{
    Subject = "Hello",
    Body = "Hello world"
};

SmtpClient client = new SmtpClient();
client.Host = "ourIP";
client.Credentials = new System.Net.NetworkCredential("login@ourDomenInPunycode", "ourPassword");
client.Port = 25;
client.UseDefaultCredentials = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(message); 

那么,发送电子邮件不应该是小事吗?但是无论我通过我们的邮件服务器从本地机器发送邮件(只是运行这个控制台应用程序),都会出现以下异常:

System.Net.Mail.SmtpFailedRecipientException:邮箱不可用。服务器响应为:5.7.1 Relaying to denied (authentication required)

如果我将“login@ourDomenInPunycode”数据更改为我自己的邮箱(在 gmail 或其他邮箱 - 无论如何),一切正常。它也不依赖于“toMail”地址。

那么,我们的邮件服务器可能出了什么问题?有什么特殊设置吗?我们使用在另一个 Windows Server 2008 中虚拟化的 Windows Server 2008 和 Kerio Connect 7 作为虚拟 Windows Server 2008 上的邮件服务器。所有其他邮件程序(如 Outlook)都适用于从我们的邮件服务器发送电子邮件。

我在网上看到的所有关于SmtpClient设置的文章都只有这些(以上)琐碎的设置和代码,没什么特别的。

更新

我在上面的文字中做了一些修复。

当我尝试通过从邮件服务器虚拟 PC 启动的控制台应用程序发送邮件时,这是我们邮件服务器的一部分日志(上面的“ourIP”相关的“mail.ourDomen.local”):

Task 215 handler BEGIN
Task 215 handler starting
SMTP server session begin; client connected from mail.ourDomen.local:49399
Sent SMTP greeting to mail.ourDomen.local:49399
Command EHLO OurMailServer
Sent reply to EHLO: 250 mail.ourDomenInPunycode ...
Command MAIL FROM:<login@ourDomenInPunycode>
Sent reply to MAIL: 250 2.1.0 Sender <login@ourDomenInPunycode> ok
Command RCPT TO:<toMail>
Sent reply to RCPT: 550 5.7.1 Relaying to <toMail> denied
Connection to SMTP server mail.ourDomen.local lost: connection closed by remote host.
SMTP server session end
Task 215 handler END

“向 RCPT 发送回复:550 5.7.1 Relaying to denied” - 为什么会这样?

【问题讨论】:

    标签: email smtpclient


    【解决方案1】:

    好吧,我们用这个描述

    https://kb.kerio.com/article/550-571-relaying-to-email%40addresscom-denied-authentication-required-411.html.

    虽然我们知道这个设置,但是我们纠结于我们的虚拟机。我们有一个用于 Web 服务器的虚拟机和另一个用于邮件服务器的虚拟机。仅在 Kerio Connect 中为邮件服务器虚拟机配置了权限,而不为 Web 服务器配置了权限。我们刚刚为web服务器的虚拟机添加了权限,邮件正常发送了。

    还有“ourIP”中的

    SmtpClient client = new SmtpClient();
    client.Host = "ourIP";
    

    是我们的邮件服务器虚拟机的IP。 SmtpClient对象中没有设置Web服务器虚拟机的IP。

    【讨论】:

      【解决方案2】:

      根据建议,您的邮件服务器需要配置为允许通过端口 25 进行“中继”。这是您正在寻找的“中继”设置/配置。

      “中继”背后的想法/目的是阻止您的服务器被(ab)用于发送垃圾邮件。

      【讨论】:

        【解决方案3】:

        在不设置 client.Host 和 client.DeliveryMethod 属性的情况下尝试代码。

        【讨论】:

        • 我评论了 Host 和 DeliveryMethod 设置并得到“未指定 SMTP 主机”异常。所以必须指定主机。
        • 主机名是必需的,因为应用程序无法连接到 Outlook 使用的默认主机。当 Windows Exchange 服务器的邮件帐户配置不允许从应用程序发送邮件时,可能会出现“需要身份验证”的问题。其次,一些防火墙阻止了这一点。您可以要求您的网络管理员允许来自任何应用程序的 SMTP 协议。
        【解决方案4】:
          //used this referances
        
            using System.Net.Mail;
            using System.Net;
            using System.IO;
            try
            {
            string em_from = "your seding e mail";
            string em_to = Ricever e mail Address;
            SmtpClient Smtp_Server = new SmtpClient();
            MailMessage e_mailx = new MailMessage();
            Smtp_Server.UseDefaultCredentials = false;
            Smtp_Server.Credentials = new System.Net.NetworkCredential("sender email address", "sender passsword"); 
        
            Smtp_Server.Port = 25; //your mail server port
            Smtp_Server.EnableSsl = false;
            Smtp_Server.Host = "192.XXX.XX.XX"; //your mail server IP
        
            e_mailx = new MailMessage();
            e_mailx.From = new MailAddress(em_from);
            e_mailx.To.Add(em_to);
            e_mailx.Bcc.Add("BCC Address");//you cad add both BCC and CC addresss
            e_mailx.IsBodyHtml = false;
            e_mailx.Subject = esub;
            e_mailx.Body = ebody;
            e_mailx.Attachments.Add(new Attachment(emsg));  //emsg mean attach file name with location
            Smtp_Server.Send(e_mailx);
            return 1;
            }
            catch (Exception ex)
            {
            MessageBox.Show(ex.Message);
            return 0;               
            }
        

        【讨论】:

          猜你喜欢
          • 2012-11-19
          • 2018-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多