Как добавить пользовательские заголовки в класс SMTP System.Net.Mail? - PullRequest
5 голосов
/ 23 февраля 2010

У меня есть 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, что и является целью.
Вот моя проблема.

Как я могу имитировать это "из заголовка" в классе SMTP System.Net.Mail? Задать свойство 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 Ответ

4 голосов
/ 23 февраля 2010

Ну, я должен был поэкспериментировать, прежде чем отправлять вопрос ...
(Но вместо того, чтобы удалить это, я оставлю это здесь, если у других будет та же самая проблема).

Решением было установить свойства From и Sender для объекта 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);
...