代码之家  ›  专栏  ›  技术社区  ›  Magnus Johansson

如何向system.net.mail smtp类添加自定义头?

  •  5
  • Magnus Johansson  · 技术社区  · 15 年前

    我有一个只接受来自发件人的预定义邮件的SMTP服务器。
    但是,我可以在数据结构中添加一个自定义的From头来设置另一个From(发件人)地址。如果我使用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.自己编写一个自定义的smtp类,使用tcp套接字,它可以工作,但这可以在标准的.NET类中完成吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Magnus Johansson    7 年前

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

    解决方案是设置mailmessage对象的“发件人”和“发件人”属性。
    (我需要两者都设置,否则不起作用):

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