2009-08-28 9 views
11

J'essaye d'envoyer un email du code de C# par l'intermédiaire du serveur d'échange de notre compagnie.Comment envoyer un email via un serveur Exchange sans utiliser 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); 

Quand je lance ce je reçois SmptException disant: « Service non disponible, fermeture canal de transmission. La réponse du serveur était 4.3.2 Service non disponible, canal de transmission de fermeture ».

J'interprète ceci pour signifier SMTP n'est pas activé sur notre boîte d'échange et que j'ai besoin d'utiliser les commandes natives Exchange Server pour envoyer le courrier. Est-ce exact, ou le SMTP devrait-il toujours fonctionner?

En outre, est-il possible que le serveur d'échange ait pu être configuré pour autoriser uniquement certains ordinateurs/utilisateurs à envoyer des messages via SMTP?

Comment puis-je envoyer du courrier via le serveur Exchange sans utiliser SMTP?

Merci.

+0

Avez-vous transfert activé sur le compte que vous envoyez l'e-mail? Je pense que c'est quelque chose que l'administrateur Exchange doit définir sur ce compte pour vous permettre d'envoyer des e-mails avec ce compte sans utiliser l'authentification. –

+0

Merci, je vais essayer de le savoir. –

Répondre

7

Vous pouvez utiliser le WCF Exchange Server Mail Transport un exemple de la façon de mettre en œuvre est Here

Plus précisément en ce qui concerne l'envoi de messages, il dit

Lorsqu'une application envoie un message, il appelle la méthode Envoyer le canal de sortie courant, qui doit être ouvert. Le canal de sortie série le message à une chaîne et crée le message dans le dossier Brouillons. définit les valeurs appropriées dans les champs de courrier électronique . Lorsque le message a été créé, il est placé dans la boîte d'envoi . Cela se produit via CEMAPI sur le périphérique ou via Exchange Web Services sur le bureau. Sur le périphérique , les messages dans la boîte d'envoi sont synchronisés avec d'autres messages sortants , tels que définis par ActiveSync.

3

Essayez d'ajouter ces deux lignes avant l'envoi:

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

Il est très probablement un problème avec l'existence d'aucune information d'identification si je triche un peu de Google ...
From dailycode.net

+0

Merci pour l'aide. J'ai peur d'avoir la même exception. –

4

Vous pouvez utiliser la nouvelle API gérée Exchange Web Services 1.0. Cela semble être la meilleure solution. Voici le lien.

http://msdn.microsoft.com/en-us/library/dd637749(v=exchg.80).aspx
https://blogs.technet.com/b/exchange/archive/2009/04/21/3407328.aspx
L'accepter acceptera des listes de distribution aussi bien.

Le 2.0 version de l'API
http://msdn.microsoft.com/en-us/library/office/dd633709.aspx

+0

"Ce sujet n'est plus disponible", alors n'y allez pas! – CSharper

+0

Juste un petit lien de pourriture. J'ai substitué un substitut et ajouté un lien vers la version 2.0 de l'API. – EBarr

0

Je sais que c'est un vieux fil, mais pour être complet, vous devriez considérer le package Microsoft Exchange WebServices de 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(); 
Questions connexes