J'utilise la SmtpClient
bibliothèque pour envoyer des e-mails en utilisant les éléments suivants:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
Le code fonctionne correctement dans mon environnement de test, mais lorsque j'utilise des serveurs SMTP de production, le code échoue avec un SmtpException
«Échec de l'envoi du courrier». avec un IOException
"Impossible de lire les données de la connexion de transport: net_io_connectionclosed".
J'ai confirmé que les pare-feu ne sont pas un problème. Le port s'ouvre très bien entre le client et le serveur. Je ne sais pas quoi d'autre pourrait provoquer cette erreur.
Changez le port de 465 à 587 et cela fonctionnera.
la source
Pour tous ceux qui tombent sur ce post à la recherche d'une solution et que vous avez configuré sendgrid SMTP via Azure.
Le nom d'utilisateur n'est pas le nom d'utilisateur que vous avez configuré lorsque vous avez créé l'objet sendgrid dans azure. Pour trouver votre nom d'utilisateur;
J'espère que cela t'aides!
la source
Vous devrez peut-être également modifier le paramètre "Applications moins sécurisées" de votre compte Gmail. EnableSsl, utilisez le port 587 et activez les «applications moins sécurisées». Si vous recherchez sur Google la partie des applications les moins sécurisées, il existe des pages d'aide Google qui vous relieront directement à la page de votre compte. C'était mon problème mais tout fonctionne maintenant grâce à toutes les réponses ci-dessus.
la source
J'ai essayé toutes les réponses ci-dessus mais j'obtiens toujours cette erreur avec le compte Office 365. Le code semble fonctionner correctement avec le compte Google et smtp.gmail.com lorsque vous autorisez des applications moins sécurisées.
D'autres suggestions que je pourrais essayer?
Voici le code que j'utilise
MISE À JOUR ET COMMENT JE LE RÉSOLU:
Problème résolu en changeant Smtp Client en Mailkit. L'utilisation du client Smtp System.Net.Mail n'est désormais pas recommandée par Microsoft en raison de problèmes de sécurité et vous devriez plutôt utiliser MailKit. L'utilisation de Mailkit m'a donné des messages d'erreur plus clairs que je pouvais comprendre pour trouver la cause première du problème (problème de licence). Vous pouvez obtenir Mailkit en le téléchargeant en tant que package Nuget .
Consultez la documentation sur Smtp Client pour plus d'informations: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
Voici comment j'ai implémenté SmtpClient avec MailKit
la source
Votre bibliothèque SMTP prend-elle en charge la connexion cryptée? Le serveur de messagerie peut s'attendre à une connexion TLS sécurisée et, par conséquent, fermer la connexion en l'absence d'une négociation TLS
la source
SmtpClient
bibliothèque .NET par défaut , elle prend en charge encrytpion, le serveur nécessite un cryptage, et j'ai définiclient.EnableSssl = true;
. Bien que je pense que je vais poursuivre cela un peu plus loin avec Wireshark.Si vous utilisez un serveur SMTP sur le même boîtier et que votre SMTP est lié à une adresse IP au lieu de «Any Assigned», il peut échouer car il tente d'utiliser une adresse IP (comme 127.0.0.1) que SMTP ne fonctionne pas actuellement sur.
la source
Pour élever ce que jocull a mentionné dans un commentaire, je faisais tout ce qui est mentionné dans ce fil et je rayais ... parce que le mien était dans une boucle à répéter encore et encore; après la première fois dans la boucle, il échouait parfois. Toujours travaillé la première fois dans la boucle.
Pour être clair: la boucle comprend la création de SmtpClient, puis faire .Send avec les bonnes données. Le SmtpClient a été créé à l'intérieur d'un bloc try / catch, pour attraper les erreurs et pour être sûr que l'objet a été détruit avant le bas de la boucle.
Dans mon cas, la solution était de s'assurer que SmtpClient était supprimé après chaque fois dans la boucle (soit via l'instruction using (), soit en effectuant une suppression manuelle). Même si l'objet SmtpClient est implicitement détruit dans la boucle, .NET semble laisser des éléments traîner en conflit avec la prochaine tentative.
la source
Changez votre numéro de port à 587 de 465
la source
enlever
semblait le résoudre pour moi.
la source
Dans mon cas, le client a oublié d'ajouter une nouvelle adresse IP dans ses paramètres SMTP. Ouvrez IIS 6.0 dans le serveur qui configure le smtp, cliquez avec le bouton droit sur le serveur virtuel Smtp, choisissez Propriétés, onglet Accès, cliquez sur Connexions, ajoutez l'adresse IP du nouveau serveur. Cliquez ensuite sur Relais, ajoutez également l'adresse IP du nouveau serveur. Cela a résolu mon problème.
la source
Essayez ceci: voici le code que j'utilise pour envoyer des e-mails à plusieurs utilisateurs.
la source
SmtpClient
est également jetable, il doit donc être emballé dans unusing
blocSi toutes les solutions ci-dessus ne fonctionnent pas pour vous, essayez de mettre à jour le fichier suivant sur votre serveur (par publication, je veux dire, et une version antérieure serait utile).
Après la mise à jour, vous verrez cette erreur. comme je l'ai résolu avec cette solution.
la source
Pour Outlook, utilisez le paramètre suivant qui ne me donne pas d'erreur
Nom du serveur SMTP smtp-mail.outlook.com
Port SMTP 587
la source
Cette erreur est très générique. Elle peut être due à plusieurs raisons telles que le serveur de messagerie est incorrect. Certains hébergeurs utilisent le format mail.domainname. Si vous utilisez simplement un nom de domaine, cela ne fonctionnera pas. vérifiez les informations d'identification nom d'hôte nom d'utilisateur mot de passe si nécessaire Vérifiez auprès de la société d'hébergement.
la source
Dans mon cas, l'adresse IP du serveur Web a été bloquée sur le serveur de messagerie, elle doit être débloquée par votre société d'hébergement et la mettre sur la liste blanche. Utilisez également le port 587.
la source
Si votre serveur de messagerie est Gmail (smtp.google.com), vous obtiendrez cette erreur lorsque vous atteindrez la limite de messages. Gmail permet d'envoyer sur SMTP jusqu'à 2000 messages par 24 heures.
la source
J'ai rencontré cela lors de l'utilisation de smtp.office365.com, en utilisant le port 587 avec SSL. J'ai pu me connecter au compte en utilisant portal.office.com et j'ai pu confirmer que le compte possédait une licence. Mais lorsque j'ai déclenché le code pour envoyer des e-mails, j'ai continué à recevoir l'erreur net_io_connectionclosed.
Il m'a fallu un certain temps pour le comprendre, mais l'administrateur Exchange a trouvé le coupable. Nous utilisons O365 mais le serveur Exchange était dans un environnement hybride. Bien que le compte que nous essayions d'utiliser ait été synchronisé avec Azure AD et possédait une licence O365 valide, pour une raison quelconque, la boîte aux lettres résidait toujours sur le serveur Exchange hybride, et non sur Exchange en ligne. Après que l'administrateur de l'échange a utilisé la commande «Déplacer la boîte aux lettres» pour déplacer la boîte aux lettres du serveur d'échange hybride vers O365, nous pourrions utiliser le code pour envoyer des e-mails en utilisant o365.
la source
Préparez: 1. HostA est un serveur virtuel SMTP avec le port par défaut 25 2. HostB est un poste de travail sur lequel j'envoie du courrier avec SmtpClient et simule un réseau instable J'utilise maladroit
Cas 1 donné si HostB est 2008R2 Lorsque j'envoie un e-mail. Ensuite, ce problème se produit.
Cas 2 donné si HostB est 2012 ou version supérieure Lorsque j'envoie un e-mail. Ensuite, le courrier a été envoyé.
Conclusion: cette cause première est liée à Windows Server 2008R2.
la source