web-dev-qa-db-fra.com

Le nom distant n'a pas pu être résolu lors de l'envoi de courrier avec SMTP avec Host comme adresse IP

MailMessage message = new MailMessage();
message.Subject = "test";
message.Body = "test";
message.To.Add("[email protected]");
message.From = new MailAddress("[email protected]");
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Host = "172.22.0.20";
smtp.Port = 25;
smtp.Send(message);

Toute idée pourquoi je pourrais avoir une erreur 

Le nom distant n'a pas pu être résolu. 

Il est clair qu'aucune résolution n'est requise car j'ai spécifié une adresse IP. Je peux cingler l'IP et même telnet sur le port 25 et envoyer avec succès un email. Mais je ne peux pas envoyer de courrier électronique.

J'ai exécuté une trace wireshark et il ne semble pas que du trafic soit envoyé à 172.22.0.20

11
Lee Tickett

J'utilise ce code et cela fonctionne bien de mon côté Assurez-vous que vous utilisez l'adresse IP correcte et le numéro de port. Je pense que votre numéro de port est incorrect . (Ouvrez votre identifiant de messagerie et vérifiez la configuration de votre messagerie)

MailMessage mail = new MailMessage("[email protected]", "[email protected]");
mail.Subject = "Subject";
mail.IsBodyHtml = true;
mail.Body = "this is email body";

SmtpClient client = new SmtpClient("172.22.0.20");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");
client.Port = 25;

client.Send(mail);
8
Zulqarnain Jalil

J'ai testé votre code avec:

static void Main(string[] args)
        {
            try
            {
                MailMessage message = new MailMessage();
                message.Subject = "test";
                message.Body = "test";
                message.To.Add("[email protected]");
                message.From = new MailAddress("[email protected]");
                SmtpClient smtp = new SmtpClient();
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.UseDefaultCredentials = false;
                smtp.Host = "127.0.0.1";
                smtp.Port = 25;
                smtp.Send(message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadLine();
            }
        }

Et ça a l'air bien. J'ai utilisé smtp4dev Tools et c'est ce qui suit:

220 localhost smtp4dev ready
EHLO Aepro
250-Nice to meet you.
250-8BITMIME
250-STARTTLS
250-AUTH=CRAM-MD5 PLAIN LOGIN ANONYMOUS
250-AUTH CRAM-MD5 PLAIN LOGIN ANONYMOUS
250 SIZE
MAIL FROM:<[email protected]>
250 Okey dokey
RCPT TO:<[email protected]>
250 Recipient accepted
RSET
250 Rset completed
RSET
250 Rset completed
MAIL FROM:<[email protected]>
250 Okey dokey
RCPT TO:<[email protected]>
250 Recipient accepted
DATA
354 End message with period
MIME-Version: 1.0

Mais quand je mets une fausse adresse IP, j'ai une exception (c'est normal).

Je pense que votre adresse IP est mauvaise ou que vous devez avoir un problème avec un pare-feu

3
user5447154

Le code ci-dessous fonctionne bien à ma fin .....

        MailMessage mailMessage = new MailMessage("[email protected]", "[email protected]");
        mailMessage.Priority = System.Net.Mail.MailPriority.High;
        mailMessage.Body = "message";
        mailMessage.IsBodyHtml = true;
        SmtpClient smtpClient = new SmtpClient("Host/IP", 25);
        NetworkCredential credentials = new NetworkCredential("[email protected]", "password");
        smtpClient.Credentials = credentials;
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtpClient.Credentials = credentials;
        smtpClient.Send(mailMessage);
3
Sukhvindra Singh

Si votre code est exécuté dans un pool d'applications de service, vous devez définir l'identité sous Paramètres avancés dans le modèle de processus comme "Service réseau" plutôt que par défaut "ApplicationPoolIdentity". Si vous faites cela, ça va marcher à chaque fois. Si vous ne le faites pas, certains courriels fonctionnent, d'autres non. C'est une chose étrange de permission.

2
Robin Johnson

Un problème similaire est apparu ici: System.Net.WebException: le nom distant n'a pas pu être résolu:

Comme vous pouvez le constater, un simple mécanisme d'interrogation intégré à une instruction try-catch peut vous donner l'occasion d'essayer plusieurs fois votre bloc de méthode (ce qui échoue sporadiquement) avant de le signaler à l'utilisateur. 

1
yantraman

Votre adresse IP n'est pas correcte ou vous travaillez peut-être sous un pare-feu. Vérifiez également vos paramètres DNS.

0
Ankit Zalani

Le problème que je vois est cette ligne: 

smtp.Host = 172.22.0.20; 

smtp.Host s'attend à une chaîne. Donc, ça devrait être smtp.Host = "172.22.0.20"; 

try 
{
    smtp.Send(mail); 
}
catch (Exception e) 
{
    Debug.WriteLine("Exception Message: " + e.Message);
}
0

Peut-être que le nom inversé est obligatoire, avez-vous essayé d'enregistrer un nom pour cette adresse IP dans le fichier hôte? (Ou dans votre DNS bien sûr)

Essayez d'ajouter:

172.22.0.20 my-smtp.example
0
Leahkim