2011-03-24 5 views
0

J'ai un simple utilitaire de messagerie qui est censé envoyer un email via un serveur Exchange 2007 (qui est installé sur Windows Server 2008 R2 64bit) et cela ne fonctionnera pas, donnant le message d'erreur suivant à la ligne de commande: "Boîte aux lettres indisponible La réponse du serveur était: 5.7.1 Impossible de relayer". On m'a dit que je devais m'authentifier sur le serveur mais évidemment je ne le fais pas correctement. Aucune suggestion? Mon code est ci-dessous:s'authentifier à Exchange 2007

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Mail; 

namespace SendMail 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SmtpClient smtpClient = new SmtpClient("x.x.x.x", 25); 
      NetworkCredential basicCredential = new NetworkCredential("username", "password", "domain"); 
      MailMessage message = new MailMessage(); 
      MailAddress fromAddress = new MailAddress("[email protected]"); 
      smtpClient.Host = "x.x.x.x"; 

      smtpClient.UseDefaultCredentials = false; 
      smtpClient.Credentials = basicCredential; 
      message.From = fromAddress; 
      message.Subject = "test message"; 
      message.Body = "test message"; 
      message.To.Add("[email protected]");    
      try 
      { 
       smtpClient.Send(message); 
       Console.WriteLine("Message sent successfully"); 
      } 
      catch (Exception ex) 
      {  
       //Error, could not send the message 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 

Répondre

0

Je l'ai testé et votre code fonctionne bien. Vérifiez que le compte que vous utilisez est correctement configuré dans Exchange ou essayez d'utiliser un autre compte.

0

Le System.Net.Mail.SmtpClient ne s'authentifie pas facilement avec Exchange, sauf si vous créez un connecteur pour autoriser le relais ouvert sur le serveur Exchange. Vous pouvez le limiter uniquement à l'adresse IP du serveur d'envoi. Cependant, pour l'envoi de courrier via Exchange, vous trouverez la DLL EWS suivante comme étant la meilleure solution générale. C'est aussi simple que votre code actuel mais fonctionne mieux pour Exchange.

Vous pouvez essayer les services Web Microsoft Exchange à l'aide de la DLL suivante.

https://www.microsoft.com/en-us/download/details.aspx?id=42951

L'objet est assez simple et comparable à l'utilisation System.Net.Mail.

Voici un exemple que j'ai modifié à partir de l'exemple MSDN.

using Microsoft.Exchange.WebServices.Data; 


     protected void EmailEws() 
     { 
      ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

      service.Credentials = new WebCredentials("user", "password", "domain(local)"); 

      service.TraceEnabled = true; 
      service.TraceFlags = TraceFlags.All; 
// EWS service url. 
      service.Url = new Uri("https://example.com/EWS/Exchange.asmx"); 

      EmailMessage email = new EmailMessage(service); 

      email.ToRecipients.Add("[email protected]"); 

      email.Subject = "HelloWorld";   
      email.Body = new MessageBody("<p>This is the first email I've sent by using the EWS Managed API!</p>"); 
      // set Body before BodyType or an error is raised!               
      email.Body.BodyType = BodyType.HTML; 

      email.SendAndSaveCopy(); 
     } 

L'URL EWS peut être un peu déroutante. Cela dépend aussi si vous avez accès au serveur Exchange. Voici de l'aide.

https://msdn.microsoft.com/en-us/library/office/dn509511(v=exchg.150).aspx

utile si vous n'avez pas accès au serveur Exchange. http://nuanceimaging.custhelp.com/app/answers/detail/a_id/13098/~/determining-the-exchange-web-services-(ews)-url-for-the-sharescan-exchange

Modifier dernière partie à Exchange.asmx, non Services.wsdl

Questions connexes