2009-08-28 14 views
11

Sto provando a inviare un messaggio di posta elettronica dal codice C# tramite il server di scambio della nostra azienda.Come inviare e-mail tramite Exchange Server senza usare smtp?

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("exchangebox1.mycompany.com"); 
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage("[email protected]", 
       "[email protected]", 
       "title here", 
       "body here"); 
      client.Send(msg); 

Quando eseguo questo ricevo SmptException dire "Servizio non disponibile, chiusura canale di trasmissione. Risposta del server 4.3.2 Servizio non disponibile, chiusura canale di trasmissione".

Sto interpretando questo per indicare che SMTP non è abilitato sulla nostra casella di scambio e che ho bisogno di utilizzare i comandi nativi di Exchange Server per inviare la posta. È giusto, o dovrebbe sempre funzionare SMTP?

Inoltre, è possibile che il server di Exchange sia stato configurato per consentire solo a determinati computer/utenti di inviare il principale via SMTP?

Come posso inviare posta tramite Exchange Server senza utilizzare SMTP?

Grazie.

+0

Hai inoltro abilitato sull'account che stai inviando l'email come? Penso che sia qualcosa che l'amministratore di Exchange deve impostare su quell'account per consentirti di inviare email con quell'account senza utilizzare l'autenticazione. –

+0

Grazie, proverò a scoprirlo. –

risposta

7

È possibile utilizzare la WCF Exchange Server Mail Transport un esempio di come implementare è Here

In particolare per quanto riguarda l'invio di messaggi si dice

Quando un'applicazione invia un messaggio, chiama il metodo Send sul canale di uscita corrente, che deve essere aperto. Il canale di uscita serializza il messaggio in una stringa e crea il messaggio nella cartella Bozze. È imposta i valori appropriati nei campi di posta elettronica . Quando il messaggio è stato creato , viene spostato nella cartella In uscita . Ciò avviene tramite CEMAPI su il dispositivo o tramite i servizi Web Exchange sul desktop. Sul dispositivo , i messaggi nella cartella Posta in uscita sono sincronizzati con altri messaggi in uscita, come definito da ActiveSync.

3

Prova ad aggiungere queste due righe prima di inviare:

client.UseDefaultCredentials = true; 
client.EnableSsl = true; 

E 'più probabile un problema con che vi sia nessuna credenziale quindi mi imbrogliare un po' da parte di Google ...
From dailycode.net

+0

Grazie per l'aiuto. Temo di ottenere la stessa eccezione. –

4

È possibile utilizzare la nuova API gestita da Servizi Web di Exchange 1.0. sembra essere la soluzione migliore. ecco il link.

http://msdn.microsoft.com/en-us/library/dd637749(v=exchg.80).aspx
https://blogs.technet.com/b/exchange/archive/2009/04/21/3407328.aspx
La accettare accetterà le liste di distribuzione pure.

Il 2.0 versione dell'API
http://msdn.microsoft.com/en-us/library/office/dd633709.aspx

+0

"Questo argomento non è più disponibile", quindi non andare lì! – CSharper

+0

Basta un piccolo marciume. Ho sostituito un altro e aggiunto un collegamento alla versione 2.0 dell'API. – EBarr

0

So che questo è un vecchio thread, ma per completezza, si dovrebbe considerare il WebServices Microsoft Exchange pacchetto NuGet:

https://www.nuget.org/packages/Microsoft.Exchange.WebServices

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

EmailMessage message = new EmailMessage(service); 
message.Subject = "my subject"; 
message.Body = "my body"; 
message.ToRecipients.Add("[email protected]"); 
message.Save(); 

message.SendAndSaveCopy(); 
Problemi correlati