2016-01-08 1 views
3

Я использую этот код для отправки электронной почты через Outlook в приложении winforms.ExchangeService с AutodiscoverUrl отправки с неправильного адреса электронной почты

_exchangeService = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
_exchangeService.AutodiscoverUrl(_sender); 
// ... 
var email = new EmailMessage(_exchangeService) 
{ 
    Subject = mailMessage.Subject, 
    Body = mailMessage.Body 
}; 
email.ToRecipients.AddRange(mailMessage.To.Select(x => x.Address)); 
email.SendAndSaveCopy(); 

я поставил точку останова на _exchangeService.AutodiscoverUrl(_sender); и я могу видеть, что отправитель [email protected]. Тем не менее, письмо отправляется «От» фактического пользователя, зарегистрированного в приложении winforms. Например, [email protected].

Мы попытались настроить Active Directory на «Отправить как» и «Отправить по имени» для этого пользователя, чтобы разрешить отправку как [email protected], но это не помогло. Мы также рассмотрели журнал Exchange Server для этого электронного письма, и он явно отправляется «От» [email protected]

В примере кода https://msdn.microsoft.com/en-us/library/dd634273 они используют NetworkCredential. Нужно ли мне это делать?

Почему отправитель (электронная почта отправляет с) неправильно?

+0

почему бы вам не использовать 'PrincipalContext' вы можете получить по электронной почте пользователям, что путь пользователя входа в сеть. Введенная вами ссылка использует сетевые учетные данные, поэтому попробуйте использовать ее с использованием того же примера – MethodMan

+0

@MethodMan Я хочу отправить электронное письмо ** из ** customerservice, а не с адреса электронной почты пользователя. – Jess

+0

, то вы можете добавить запись в файл .config или можете переключить свой код, чтобы использовать smtp для отправки электронной почты .. если вам нужен рабочий пример того, что я могу опубликовать его для вас .. на самом деле я знаю, как вы могли бы получить он работает, но я не уверен, что это сделает трюк. Я отправлю ответ за секунду. – MethodMan

ответ

2
_exchangeService = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
_exchangeService.AutodiscoverUrl(_sender); 
using email = new EmailMessage(_exchangeService) 
{ 
    From = new MailAddress("[email protected]"), 
    Subject = subject, 
    Body = body 
}) 
{ 
    //System.Net.Mail.Attachment attachment; 
    //attachment = new System.Net.Mail.Attachment("your attachment file"); 
    //mail.Attachments.Add(attachment); 
    message.To.Add(address);//[email protected] for example 
    _exchangeService.Send(message); 
}; 

если вы хотите хороший способ SendEmail здесь статический метод, который я создал для вас, а

public static void SendEmail(string subject, string body) 
{ 
    using (var client = new SmtpClient(utilities.EmailHost, 25)) 
    using (var message = new MailMessage() 
    { 
     From = new MailAddress(utilities.FromEmail), 
     Subject = subject, 
     Body = body 
    }) 
    { 
     System.Net.Mail.Attachment attachment; 
     attachment = new System.Net.Mail.Attachment("your attachment file"); 
     mail.Attachments.Add(attachment); 
     message.To.Add(address);//[email protected] for example 
     client.Send(message); 
    }; 
} 
+0

' client' не определен в ваш первый код. Вы имеете в виду _exchangeService? Человек, если мне просто нужно установить 'From', я думаю, будет стоять на ладони. – Jess

+0

О да .. жаль, что я отредактирую реальный быстрый @Jess – MethodMan

+0

FYI Надеюсь попробовать ваше решение сегодня ... получил что-то еще, блокируя банкомат. – Jess

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

  • Нет связанных вопросов^_^