2012-01-19 9 views
11

Utilizzo API EWS Managed per inviare e-mail. Account "account @ domain.com" disporre delle autorizzazioni "Invia come" per utilizzare "mittente @ domain.com" cassetta postale per inviare messaggi (da Outlook, funziona bene).EWS Managed API: come impostare From of email?

Ma provo dal codice - non è lavoro, in posta elettronica sono letto nel campo "Da" "account @ domain.com".

.... 
EmailMessage message = new EmailMessage(service); 
message.Body = txtMessage; 
message.Subject = txtSubject; 
message.From = txtFrom; 
.... 
message.SendAndSaveCopy(); 

Come effettuare l'invio di posta per conto di un altro utente? :)

risposta

6

È passato un po 'di tempo da quando mi sono occupato della stessa cosa e ho concluso che non è possibile, nonostante i diritti "Invia come".

rappresentazione è l'unico modo per andare con EWS, vedere MSDN:

ExchangeService service = new ExchangeService(); 
service.UseDefaultCredentials = true; 
service.AutodiscoverUrl("[email protected]"); 

// impersonate user e.g. by specifying an SMTP address: 
service.ImpersonatedUserId = new ImpersonatedUserId(
    ConnectingIdType.SmtpAddress, "[email protected]"); 

Se la rappresentazione non è abilitato, dovrete fornire le credenziali dell'utente per conto dei quali si desidera agire . Vedi this MSDN article.

ExchangeService service = new ExchangeService(); 
service.Credentials = new NetworkCredential("user", "password", "domain"); 
service.AutodiscoverUrl("[email protected]"); 

In alternativa è sufficiente specificare un reply-to address.

EmailMessage mail = new EmailMessage(service); 
mail.ReplyTo.Add("[email protected]"); 

Tuttavia, "Invia come" diritti fanno applica quando l'invio di posta elettronica utilizzando System.Net.Mail, che in molti casi farà bene quando solo l'invio di e-mail. Ci sono tons of examples che illustrano how to do this.

// create new e-mail 
MailMessage mail = new MailMessage(); 
mail.From = new MailAddress("[email protected]"); 
mail.To.Add(new MailAdress("[email protected]")); 
message.Subject = "Subject of e-mail"; 
message.Body = "Content of e-mail"; 

// send through SMTP server as specified in the config file 
SmtpClient client = new SmtpClient(); 
client.Send(mail); 
+0

mail.ReplyTo non funziona, non v'è alcuna setter su questo. public EmailAddressCollection ReplyTo {get; } – RobDigital

+0

Esatto, è una raccolta. Quindi dovrai fare 'mail.ReplyTo.Add (" [email protected] ")' - risolverò l'esempio sopra. – bernhof

+0

Utilizzo della rappresentazione Ho ricevuto un errore su mail.send. - L'indirizzo SMTP primario deve essere specificato quando si fa riferimento a una casella postale – markthewizard1234

0

Credo che si dovrebbe utilizzare la proprietà Sender in modo che il vostro codice dovrebbe essere simile:

EmailMessage message = new EmailMessage(service); 
message.Body = txtMessage; 
message.Subject = txtSubject; 
message.Sender= txtFrom; 
.... 
message.SendAndSaveCopy(); 
+0

No, questo non sembra funzionare. Ho provato a impostare mittente, sender.name e sender.Address e anche se vengono impostati, l'email proviene ancora dall'account specificato nella configurazione del servizio. – RobDigital