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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 300 fois - Téléchargée 36 fois

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

Ajouter un commentaire

Commentaires

cs_jipef
Messages postés
56
Date d'inscription
lundi 23 août 2004
Statut
Membre
Dernière intervention
1 août 2008
-
j'uilise aussi cdo mais je n'ai pas de solution pour savoir si un mail est arrivé ????
que faire sans un bon OCX ( gratuit si possible )
nquere
Messages postés
17
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
21 mars 2006
-
Arghh chuis désolé, mais j'en ai aucune idée ! Je me suis jamais posé la question car je n'ai jamais eu besoin de savoir si le mail était arrivé à destination :)
renocmoa
Messages postés
138
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
10 mai 2012
-
je serais moi aussi interéssé ar une possibilité d'avoir un rapport d'emission qqun à qqchose ??

Merci
jrbleboss
Messages postés
480
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
3 septembre 2007
-
chez moi ca marche pas ca dit qu'il y a plein de choses pas déclarés

JRB
nquere
Messages postés
17
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
21 mars 2006
-
Avec un pti peu de jujotte JRBLEBOSS, il faut virer mes fonctions qui me servent à envoyer des commentaires ("addinfos" et autres...).
Sinon, vite fait comme ca en regardant le code, il faut:
imports System.IO en haut,
puis un "public Errors as integer = 0" apres ta déclaration de classe.

Bref, faut cherche un peu, le code fait meme pas 50 lignes !

Cordialement,

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.