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

4/5 (7 avis)

Snippet vu 15 937 fois - Téléchargée 38 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_bakhoucha Messages postés 2 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 28 juillet 2006
28 juil. 2006 à 12:39
Désolé moi aussi ça ne marche pas chez moi
saadzizou Messages postés 3 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 1 novembre 2006
26 juil. 2006 à 22:03
Désolé,mais chez moi,Ca marche pas.J'ai toujours un problème avec les :objMessage.HTMLBody = message //// objMessage.Configuration et objMessage.Send().Le programme n'arrive pas à les identifier comme étant un membre du "System.web.Mail.MailMessage".
nquere Messages postés 17 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 21 mars 2006
14 oct. 2005 à 13:42
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,
jrbleboss Messages postés 480 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 3 septembre 2007 1
31 mars 2005 à 19:39
chez moi ca marche pas ca dit qu'il y a plein de choses pas déclarés

JRB
renocmoa Messages postés 135 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 10 mai 2012
1 oct. 2004 à 19:03
je serais moi aussi interéssé ar une possibilité d'avoir un rapport d'emission qqun à qqchose ??

Merci
Afficher les 7 commentaires

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.