[vb.net] envoyer un mail sans utiliser un server open relay (pbm du 'cdo.message')

Contenu du snippet

Salut tout le monde,
Je vous propose cette source qui est en fait un moyen de contrecarré le message d'erreur du wrapper CDO dans le namespace 'System.Web.Mail'.

Avec le namespace cidessus, si le serveur qui nous sert à envoyer un message n'est pas OpenRelay (le serveur demande une authentification login/pass), on a parfois un message d'erreur "Impossible d'accéder à l'objet 'CDO.Message' et natturellement, l'envoi du mail est intérrompu.

J'ai trouvé en fait dans les composant COM (Projet/Ajouter un reference / onglet COM) qu'il y avait un composant nommé "Miccrosoft CDO 2000 library".

Ajoutez le, fait un "Imports CDO" et rajouter les lignes suivantes avant l'envoi du mail:

objMessage.Configuration.Fields "http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "XXX.XXX.XXX.XXX" 'L'IP de votre serveur
objMessage.Configuration.Fields "http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2
objMessage.Configuration.Fields.Update()

Ou XXX.XXX.XXX.XXX est votre serveur mail.

->> La fonction Addinfos() est une fonction perso, donc pas la pein de la copier dans votre source, elle ne marchera pas :) Remplacer la par un "MessageBox.Show("blablabla").

Source / Exemple :


'En haut de votre feuille de code, après avoir ajouter le COM "Microsoft CDO 2000 library":
Imports CDO

Private Sub SendMail(ByVal szFichierLog As String, ByVal szDestinataires As String, ByVal szDestinatairesCc As String, ByVal szSubject As String)
Try
            AddInfo("Création du mail..", Color.Green, FontStyle.Regular)

            Dim objMessage As New CDO.Message
            objMessage.From = "admin@YoplaBoom.com"
            objMessage.To = "Niko@YoplaBoom.com"
            objMessage.BCC = "admin@YoplaBoom.com"
            objMessage.Subject = szSubject

            'Créé un stream pour lire le rapport à envoyer:
            Dim objSR As StreamReader
            Dim message As String
            objSR = New StreamReader(szFichierLog, System.Text.Encoding.Default)

            'tant qu'on est pas à la fin du rapport...
            While objSR.Peek <> -1
                message &= objSR.ReadLine()     'récupère le contenu du rapport
            End While

            objSR.Close()
            objSR = Nothing                     'désalloue la mémoire occuppée

            'Créer le mail au format HTML:
            objMessage.HTMLBody = message

            'On envoi le mail aux destinataires:
            AddInfo("Envoi du mail...: ", Color.Green, FontStyle.Regular)

            objMessage.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "192.168.2.15"     'L'IP de votre serveur
            objMessage.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2
            objMessage.Configuration.Fields.Update()
            objMessage.Send()

            AddInfo("MAIL ENVOYE !", Color.Green, FontStyle.Bold, True)

        Catch ex As Exception
            Errors += 1
            AddInfo("-> [ERROR] Function SendMail(): " & ex.Message, Color.OrangeRed, Font.Bold)
        End Try
    End Sub

Conclusion :


Préférez le namespace System.Web.Mail si vous avez un server Open Relay car CDO devient petit à petit obsolète.

@+luche

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.