如何将自定义标头添加到System.Net.Mail SMTP类?

时间:2010-02-23 11:00:35

标签: c# smtp header

我有一台SMTP服务器只接受预定义的From发件人 但是,我可以在DATA结构中添加一个自定义标题来设置另一个(发送者)地址。如果我使用Telnet测试撰写电子邮件消息,则可以这样做:

>helo there
>mail from:the.only.allowed.sender@mydomain.com
>rcpt to:magnus@mydomain.com
>data
From:magnus@mydomain.com
To:some.user@mydomain.com
Subject:Test
Test message
.

当此电子邮件到达收件人时,起始地址为magnus@mydomain.com,这是目标。
这是我的问题。

如何在System.Net.Mail SMTP类中模仿“from header”? 设置from属性失败,因为这会违反SMTP服务器策略。 像这样的东西会很棒,但它不起作用:

var fromAddress = new MailAddress("the.only.allowed.sender@mydomain.com");
var toAddress = new MailAddress("user@mydomain.com");
string subject = "Subject";
string body = "Body";

var smtp = new SmtpClient
{
  Host = "my-smtp-server",
  Port = 25,
  DeliveryMethod = SmtpDeliveryMethod.Network
};

using (var message = new MailMessage(fromAddress, toAddress)
{
  Subject = subject,
  Body = body,
  ReplyTo = new MailAddress("magnus@mydomain.com"),

})
{
  message.Headers.Add("From", "magnus@mydomain.com"); // <---- This would be great, if it worked
  smtp.Send(message);
}

有人有任何想法吗?

PS。使用TCP套接字自己编写自定义SMTP类,它可以工作,但这可以在标准的.NET类中完成吗?

1 个答案:

答案 0 :(得分:4)

嗯,我应该在发布问题之前做一些实验......
(但是如果其他人有同样的问题,我会把它留在这里而不是删除它)。

解决方案是在MailMessage对象上设置From和Sender属性 (我需要设置两者,否则它不起作用):

var message = new MailMessage(fromAddress, toAddress)
{
  Subject = subject,
  Body = body,
  From = new MailAddress("magnus@mydomain.com"),
  Sender = new MailAddress("the.only.allowed.sender@mydomain.com")
};

smtp.Send(message);