0

我编写了一个控制台应用程序(只是站点代码的一部分,但它也必须分开工作,并且它具有与站点内部相同的错误结果)(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)都适用于从我们的邮件服务器发送电子邮件。

我在 Internet 上阅读的所有关于 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” - 为什么会这样?

4

4 回答 4

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。

于 2012-05-18T06:02:11.167 回答
0

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

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

于 2012-05-16T11:05:12.510 回答
0

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

于 2012-05-16T11:08:30.763 回答
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;               
    }
于 2017-07-21T05:55:48.413 回答