Mise à jour du code hérité de System.Web.Mail vers System.Net.Mail dans Visual Studio 2005 :Problèmes d'envoi d'e-mail
-
09-06-2019 - |
Question
L'utilisation du système obsolète System.Web.Mail pour l'envoi d'e-mails fonctionne correctement, voici l'extrait de code :
Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
Try
Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
Message.To = recipent
Message.From = from
Message.Subject = subject
Message.Body = body
Message.BodyFormat = MailFormat.Html
Try
SmtpMail.SmtpServer = MAIL_SERVER
SmtpMail.Send(Message)
Catch ehttp As System.Web.HttpException
critical_error("Email sending failed, reason: " + ehttp.ToString)
End Try
Catch e As System.Exception
critical_error(e, "send() in Util_Email")
End Try
End Sub
et voici la version mise à jour :
Dim mailMessage As New System.Net.Mail.MailMessage()
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
mailMessage.Subject = subject
mailMessage.Body = body
mailMessage.IsBodyHtml = True
mailMessage.Priority = System.Net.Mail.MailPriority.Normal
Try
Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
smtp.Send(mailMessage)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
J'ai essayé de nombreuses variantes différentes et rien ne semble fonctionner, j'ai le sentiment que cela peut avoir à voir avec SmtpClient, y a-t-il quelque chose qui a changé dans le code sous-jacent entre ces versions ?
Aucune exception n’est rejetée.
La solution
J'ai testé votre code et mon mail est envoyé avec succès.En supposant que vous utilisez les mêmes paramètres pour l'ancien code, je suggère que votre serveur de messagerie (MAIL_SERVER) accepte le message et qu'il y a un retard dans le traitement ou qu'il le considère comme du spam et le rejette.
Je suggérerais d'envoyer un message en utilisant une troisième méthode (telnet si vous vous sentez courageux) et de voir si cela réussit.
MODIFIER:Je note (d'après votre réponse ultérieure) que spécifier le port a quelque peu aidé.Vous n'avez pas dit si vous utilisez le port 25 (SMTP) ou le port 587 (Soumission) ou autre chose.Si vous ne le faites pas déjà, l'utilisation du port de soumission peut également aider à résoudre votre problème.
Autres conseils
La bibliothèque System.Net.Mail utilise les fichiers de configuration pour stocker les paramètres. Il vous suffira donc peut-être d'ajouter une section comme celle-ci.
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
As-tu essayé d'ajouter
smtp.UseDefaultCredentials = True
avant l'envoi ?
De plus, que se passe-t-il si vous essayez de modifier :
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
pour ça:
mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)
-Kevin Fairchild
Définissez-vous les informations d'identification pour l'e-mail ?
smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")
J'ai eu cette erreur, mais je crois qu'elle a généré une exception.
Tout ce que vous faites est correct.Voici les choses que je vérifierais.
- Vérifiez à nouveau que le service SMTP dans IIS fonctionne correctement.
- Assurez-vous qu'il n'est pas signalé comme spam.
ce sont généralement les plus grands coupables chaque fois que nous rencontrons des problèmes d’envoi d’e-mails.
De plus, je viens de remarquer que vous utilisez MsgBox (ex.Message).Je crois qu'ils ont empêché MessageBox de fonctionner avec asp.net dans un service pack, il se peut donc qu'il y ait une erreur, vous ne le savez peut-être pas.vérifiez votre journal des événements.
J'ai ajouté le numéro de port du serveur de messagerie et il a commencé à fonctionner sporadiquement, il semble que ce soit un problème avec le serveur et un retard dans l'envoi des messages.Merci pour vos réponses, elles ont toutes été utiles !