2010-02-23 2 views
5

У меня есть SMTP-сервер, который принимает только предопределенный От отправителя.
Однако я могу добавить пользовательский заголовок в структуре DATA, чтобы установить другой адрес (отправителя). Это возможно, если я проверить с помощью Telnet, чтобы составить сообщение по электронной почте:Как добавить пользовательские заголовки в класс SMTP System.Net.Mail?

>helo there 
>mail from:[email protected] 
>rcpt to:[email protected] 
>data 
From:[email protected] 
To:[email protected] 
Subject:Test 
Test message 
. 

Когда это письмо прибывшие на получателе, от адреса [email protected], который является целью.
Вот моя проблема.

Как я могу подражать этому «из заголовка» в классе SMTP System.Net.Mail? Невозможно установить свойство from из свойства, поскольку это нарушит политики сервера SMTP. Нечто подобное было бы здорово, но это не работает:

var fromAddress = new MailAddress("the.onl[email protected]"); 
var toAddress = new MailAddress("[email protected]"); 
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("[email protected]"), 

}) 
{ 
    message.Headers.Add("From", "[email protected]"); // <---- This would be great, if it worked 
    smtp.Send(message); 
} 

Кто-нибудь есть какие-нибудь идеи?

PS. Написав собственный SMTP-класс, используя TCP-сокеты, он работает, но это можно сделать в стандартных классах .NET?

ответ

4

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

Решение заключалось в том, чтобы установить свойства From и Sender объекта MailMessage.
(я должен был бы установить как, в противном случае она не работает):

var message = new MailMessage(fromAddress, toAddress) 
{ 
    Subject = subject, 
    Body = body, 
    From = new MailAddress("[email protected]"), 
    Sender = new MailAddress("[email protected]") 
}; 

smtp.Send(message); 
+0

Это не может работать «сообщение» выходит за рамки, когда smtp.Send называется. синтаксис полностью неверен, и ответ не показывает решение – GregJF

+0

@GregJF, добро пожаловать в Stackoverflow. Если вы считаете, что есть способ улучшить ответ, вы можете предложить отредактировать его. –

+0

Magnus, спасибо, что приветствовал меня в Stackoverflow: я был участником более 6 лет. Я предложил способ улучшить ваш ответ: исправьте свой синтаксис !! Речь идет о заголовках, но вы не упоминаете их в своем ответе. В синтаксисе попробуйте использовать блокнот для проверки кода перед публикацией. например LINQPad – GregJF

Смежные вопросы