2009-09-29 6 views
7

Je ne parviens pas à envoyer des e-mails à des adresses de domaine externes telles que '[email protected]' en utilisant le code ci-dessous.Impossible d'envoyer des e-mails à un domaine externe à l'aide du protocole SMTP

SmtpClient smtpClient = new SmtpClient(smtpMailServer); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 

//Sending mail. 
smtpClient.Send(mailMessage); 

je reçois une exception -

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for [email protected]

Si je change le DeliveryMethod à -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

Je suis en mesure d'envoyer les emails sur ma machine locale. Mais il échoue sur le site de production avec une exception -

Cannot get IIS pickup directory

Pouvez-vous s'il vous plaît me suggérer quoi faire?

+0

Est-ce que cela a déjà été résolu? J'ai le même comportement. – Kevin

+0

trouvé une solution? –

Répondre

1

Vous devez généralement vous authentifier auprès du serveur de messagerie externe à l'aide d'un nom d'utilisateur/mot de passe. Lorsque vous utilisez un serveur externe, les informations d'identification que vous transmettez ne sont pas connues. Cela peut être votre problème.

1

Si vous recherchez l'enregistrement MX pour l'adresse de destination (dans notre exemple, il s'agit de asdf.com) et que vous l'utilisez pour la propriété hôte de SmtpClient, devrait accepter le message pour la livraison sans authentification puisque c'est à un utilisateur local. Ce n'est pas facile à faire, car System.Net ne fournit pas de classe DNS gérée pouvant renvoyer des enregistrements MX, mais vous pouvez invoquer le code non managé pour le faire. Sinon, vous devrez vous assurer que le serveur SMTP auquel vous vous connectez vous relaiera, puis définira la propriété Credentials de SmtpClient sur les informations d'identification appropriées pour la connexion à ce serveur. La définition de DeliveryMethod sur PickupDirectoryFromIIS ne fait qu'écrire un fichier dans le répertoire de collecte IIS, ce qui signifie qu'il n'écrit qu'un fichier, qu'il n'envoie pas de message.

+0

+1 pour savoir comment le courrier électronique fonctionne. De plus, gardez à l'esprit qu'il y a d'autres choses que vous devez faire en plus d'envoyer directement au serveur pour ce domaine (recherche MX). Principalement en raison de la protection anti-spam, il y a beaucoup de règles dans le monde du courrier électronique. Faites une recherche sur "Sender ID", "SPF" et "SMTP Sender Header" pour vous aider à démarrer - pour tous ceux qui cherchent à suivre cette route. – eselk

4

j'ai eu ce problème et l'authentification fixe il voir ci-dessous:

 SmtpClient client = new SmtpClient(EmailServer, 25); 
     var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password"); 
     client.Credentials = SmtpUser; 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 

je devais utiliser la double barre oblique depuis une barre oblique est le caractère d'échappement donc utiliser deux pour que cela fonctionne.

0

J'ai fait face à ce problème, que j'ai résolu en ajoutant un domaine avec "* .com" comme nom de domaine et de type "distant", sous IIS 6.0 Manager/SMTP Virtual Server/Domains.

Bien que dans mon cas, le serveur SMTP a autorisé l'accès anonyme.