Il y a deux façons de faire SMTP sur SSL: explicite et implicite. Explicite signifie que vous vous connectez à un port SMTP normal (généralement 25 ou 587) en texte clair, puis lancez la commande "starttls" pour passer en mode SSL. Implicite signifie que vous vous connectez à un port qui s'attend à ce que tout soit SSL (généralement 465).
Asp.net utilise "System.Net.Mail.SmtpClient()" pour envoyer un courriel. Le problème principal est que SmtpClient ne supporte pas les connexions SSL implicites, mais supporte les connexions explicites (System.Net.Mail avec SSL pour s'authentifier sur le port 465). Ainsi, si le serveur de messagerie (SMTP) ne prend pas en charge la connexion explicite, il ne parvient pas à envoyer des e-mails et afficher des messages tels que "Délai de connexion", "Le message n'a pas pu être envoyé au serveur SMTP. Le code d'erreur de transport était 0x80040217. La réponse du serveur n'était pas disponible "etc.
Pour résoudre ce problème dans ASP.net, nous pouvons utiliser la bibliothèque CDO (Collaboration Data Objects) pour Windows 2000 (Cdosys.dll) pour envoyer un message électronique avec des pièces jointes. Microsoft Outlook utilise cette DLL pour envoyer un courrier électronique. Dans votre solution ASP.net, vous devez ajouter la référence "Microsoft CDO pour Windows 2000 Library". Il va ajouter deux DLL marqué dans le dossier Bin.
Maintenant, faites le code ci-dessous en C# .net:
public static void SendMail(string FromName, string FromEmail, string ReceiverEmail, string CC, string BCC, string subj, string Mssg)
{
const var cdoSendUsingPort = 2;
const var cdoBasicAuth = 1;
const var cdoTimeout = 60;
var mailServer = "mail.XXXXXXX.net";
var SMTPport = 465;
var mailusername = "[email protected]";
var mailpassword = "PPPPXXXX";
var objEmail = CreateObject("CDO.Message");
var objConf = objEmail.Configuration;
var objFlds = objConf.Fields;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword;
objFlds.Update();
objEmail.To = ReceiverEmail;
objEmail.From = FromEmail;
objEmail.CC = CC;
objEmail.BCC = BCC;
objEmail.Subject = subj;
objEmail.HTMLBody = Mssg;
objEmail.Send();
}
Dans VB.net
Public Shared Sub SendMail(ByVal FromName As String, ByVal FromEmail As String, ByVal ReceiverEmail As String, ByVal CC As String, ByVal BCC As String, ByVal subj As String, ByVal Mssg As String)
''#################Sending Email##########################
Const cdoSendUsingPort = 2 ' Send the message using SMTP
Const cdoBasicAuth = 1 ' Clear-text authentication
Const cdoTimeout = 60 ' Timeout for SMTP in seconds
Dim mailServer = "mail.XXXXXXX.net"
Dim SMTPport = 465
Dim mailusername = "[email protected]"
Dim mailpassword = "PPPPXXXX"
Dim objEmail = CreateObject("CDO.Message")
Dim objConf = objEmail.Configuration
Dim objFlds = objConf.Fields
With objFlds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword
.Update()
End With
objEmail.To = ReceiverEmail
objEmail.From = FromEmail
objEmail.CC = CC
objEmail.BCC = BCC
objEmail.Subject = subj
objEmail.HTMLBody = Mssg
'objEmail.AddAttachment "C:\report.pdf"
objEmail.Send()
End Sub
Referance: Original post Implicite & SMTP explicite http://help.fogcreek.com/9002/using-an-smtp-server-with-ssl utiliser la Bibliothèque Cdosys.dll pour envoyer un message électronique avec pièces jointes https://support.microsoft.com/en-us/help/310212/how-to-use-the-cdosys-dll-library-to-send-an-e-mail-message-with-attac
Pouvez-vous vous connecter via un client de messagerie standard? Sinon, cela pourrait être un problème avec votre pare-feu. Avez-vous activé l'accès POP dans votre compte? – MiffTheFox
Oui, je peux, et oui je l'ai fait. – Paul