[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 377 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_bakhoucha
Messages postés
2
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
28 juillet 2006

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

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

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

chez moi ca marche pas ca dit qu'il y a plein de choses pas déclarés

JRB
renocmoa
Messages postés
137
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

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.