.NET - 邮件服务器不通过SmtpClient.Send发送邮件

时间:2012-05-16 11:02:41

标签: email smtpclient

我编写了一个控制台应用程序(只是站点代码的一部分,但它也必须分开工作,并且它与站点内部有相同的错误结果)(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中继到拒绝(需要身份验证)

如果我将“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转发拒绝” - 为什么会这样?

4 个答案:

答案 0 :(得分: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设置。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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