Envoi de mail via CDO

JeremyLambert Messages postés 8 Date d'inscription vendredi 1 novembre 2019 Statut Membre Dernière intervention 24 juin 2020 - Modifié le 1 nov. 2019 à 22:14
JeremyLambert Messages postés 8 Date d'inscription vendredi 1 novembre 2019 Statut Membre Dernière intervention 24 juin 2020 - 10 nov. 2019 à 15:08
Bonjour tout le monde,
je suis de retour sur le forum après des années d’inactivité, car j'ai une question qui me reste sans réponse malgré mes recherches.

En effet, j'utilise la classe CDO pour envoyer mes mails, car je n'arrive pas à l'utiliser avec System.Net.Mail avec mon adresse professionnelle (@nomentreprise.fr)

J'ai donc ce bout de code (avec Imports.CDO et référence Microsoft CDO pour librairie Windows 2000)
qui fonctionnait en VBA mais que je n'arrive pas à retranscrire en VB.Net :

Dim EnMail As New CDO.Message

            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "mail.entreprise.fr"
            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CdoSendUsing.cdoSendUsingPort
            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = "25"
            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1
            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = False
            EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "moi@entreprise.fr"

EnMail.Fields.Update()

EnMail.From =  "moi@entreprise.fr"
EnMail.To = "adresse@exemple.com" 
EnMail.Subject = "Demande de prix"
EnMail.HTMLBody = "<p>Bonjour, veuillez trouver ci-joint la demande de devis "
EnMail.Send()



Lorsque le débogueur arrive sur la dernière ligne, j'ai un message "System.Runtime.InteropServices.COMException : 'La valeur de configuration "SendUsing" est non valide."

J'ai essayé plusieurs choses comme :
- EnMail.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2
- J'ai essayé de mettre avec ou sans guillemets à /sendusing").Value = 2 et /smtpserverport").Value = "25"

Les adresses mails que j'utilise sont correctes, et les paramètres d'envoi sont les mêmes que mon ancien code VBA

Auriez-vous des pistes à suggérer ?

Merci d'avance, cordialement

3 réponses

cs_Le Pivert Messages postés 7894 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 9 juin 2023 136
1 nov. 2019 à 18:45
Bonjour,

Sur ta question précise Envoi de mail via CDO, je ne peux pas te répondre.

Par contre j'ai utilisé ce code qui fonctionne très bien, si cela peut t'aider comme piste:

https://support.openhost-network.com/autres/programmation-developpement/envoi-email-vb-net-microsoft-visual-studio/

0
JeremyLambert Messages postés 8 Date d'inscription vendredi 1 novembre 2019 Statut Membre Dernière intervention 24 juin 2020
3 nov. 2019 à 13:17
Bonjour et merci pour votre réponse. Malheureusement j'ai eu une coupure de courant qui a endommagé mon projet et je ne pense pas que ça soit récupérable, je dois donc tout retaper avant de donner suite à ce problème.
A bientôt
0
JeremyLambert Messages postés 8 Date d'inscription vendredi 1 novembre 2019 Statut Membre Dernière intervention 24 juin 2020
9 nov. 2019 à 13:30
Bonjour, je reviens vers vous après plusieurs essais

J'ai essayé le code que vous m'avez envoyé avec plusieurs paramètres différents sur le port et le SSL, mais rien y fait, j'ai toujours l'erreur "WebException : Le nom distant n'a pas pu être résolu 'mail.entreprise.fr'"

J'ai donc essayé d'utiliser le client "smtp.google.com" avec plusieurs paramètres aussi, jusqu'à recevoir un mail "Alerte de sécurité critique". Après plusieurs recherches j'ai vu que les comptes googles avaient une sécurité supplémentaire pour bloquer les applications "moins sécurisées", et donc il faut désactiver une option. Malheureusement, étant dans une entreprise, je ne peux pas toucher à ces paramètres.

Auriez-vous une autre piste ou un conseil ? Merci d'avance !
0
cs_Le Pivert Messages postés 7894 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 9 juin 2023 136
9 nov. 2019 à 13:54
Voici 2 méthodes à tester

Option Strict On
Imports System.Net.Mail
Imports System.Net.Mail.SmtpClient
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        oh_MySendMail()
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        envoimail()
    End Sub
    'https://support.openhost-network.com/autres/programmation-developpement/envoi-email-vb-net-microsoft-visual-studio/
    Public Sub oh_MySendMail()

        'Création de l’objet objSmtpMail pour utiliser la classe SMTPClient de DotNet

        Dim objSmtpMail As New System.Net.Mail.SmtpClient

        'Création de l’objet Mailmsg Qui représente le « mail » que nous voulons envoyer et que nous allons
        'paramétrer en vu de son expédition

        Dim Mailmsg As New System.Net.Mail.MailMessage
        Try
            'Paramétrons d’abord les infos concernant les serveurs SMTP utilisés par OpenHost

            objSmtpMail.Host = "smtp.free.fr" 'a adapter

            objSmtpMail.Port = 25

            'Ajout de l’identité de l’expéditeur du mail

            Mailmsg.From = New System.Net.Mail.MailAddress("expediteur@free.fr")   'mettre votre adresse mail

            Mailmsg.Sender = New System.Net.Mail.MailAddress("expediteur@free.fr")   'mettre votre adresse mail

            'Si vous souhaitez utiliser une connexion Sécurisée mettre TRUE sinon,

            'pour commencer les tests mettez FALSE

            objSmtpMail.EnableSsl = False

            'Chargement des paramètres d’authentification, à savoir le login et le password de

            'connexion pour s’authentifier sur le serveur SMTP

            Dim SMTPUserInfo As New System.Net.NetworkCredential("expediteur@free.fr", "****")   'mettre votre adresse mail et votre mot de passe

            objSmtpMail.UseDefaultCredentials = False

            objSmtpMail.Credentials = SMTPUserInfo

            'Petite remarques sur l’utilisation de l’authentification
            'Information provenant de Microsoft
            ' http://msdn.microsoft.com/fr-fr/library/system.net.mail.smtpclient.usedefaultcredentials.aspx
            'Certains serveurs SMTP exigent que le client soit authentifié avant que le serveur
            'envoie le message électronique pour son compte. Définissez cette proprité à True
            'lorsque cet objet SmtpClient doit, si le serveur le demande, s’authentifier à l’aide
            'des informations d’identification par défaut de l’utilisateur actuellement connecté.

            'Pour les applications clientes, c’est le comportement souhaité dans la plupart des scénarios.
            'Les informations d’identification peuvent être spécifiées également à l’aide des fichiers
            'de configuration machine et de l’application. Pour plus d’informations, consultez la page
            '<mailSettings>, élément (paramètres réseau).

            'Si la proprité UseDefaultCredentials a la valeur false, la valeur définie dans la propriété
            'Credentials est utilisée pour les informations d’identification lors de la connexion au serveur.
            'Si la propriété UseDefaultCredentials a la valeur false et que la propriété Credentials n’a pas été
            'définie, le courrier électronique est envoyé anonymement au serveur.

            'Remarque

            'Si vous fournissez des informations d’identification pour l’authentification de base,
            'elles sont envoyées au serveur en texte clair. Cela peut présenter un problème de securité,
            'car vos informations d’identification peuvent être vues, puis utilises par d’autres personnes.

            'Ajout du destinataire du mail
            'Si vous voulez ajouter plusieurs destinataires, il vous suffit de répéter cette ligne pour chaque destinataire
            'Idem pour les destinataires en copie et les destinataires en copie masquée.

            Mailmsg.To.Add("destinataire @free.fr") 'adresse destinataire A
            ' Mailmsg.CC.Add(Mail.txtCC.Text) 'adresse destinataire CC copie carbone
            '  Mailmsg.Bcc.Add(Mail.txtBCC.Text) 'adresse destinataire CCI copie carbone invisible

            'Mailmsg.Bcc = txtBCC.Text
            'Ajout du Sujet du Mail et du message

            Mailmsg.Subject = "essai"

            Mailmsg.Body = "mon message"
            'Ajout possible de « Headers » pour customiser votre e-mail
            'Mailmsg.Headers.Add(« X-Organization », « demo.openhost.fr »)

            'Ajout possible du degré de priorité du mail
            'Mailmsg.Priority = Net.Mail.MailPriority.High
            'Mailmsg.Priority = Net.Mail.MailPriority.Low
            Mailmsg.Priority = Net.Mail.MailPriority.Normal

            'Il ne reste plus qu’ envoyer le mail

            objSmtpMail.Send(Mailmsg)
            MessageBox.Show("E-Mail bien envoyé.", "Envoi de l'E-Mail", MessageBoxButtons.OK, MessageBoxIcon.Information)
            'Libration des ressources utilises
            Mailmsg = Nothing
            objSmtpMail = Nothing
        Catch ex As Exception
            MessageBox.Show("Impossible d'envoyer l'E-Mail!", "Envoi de l'E-Mail", MessageBoxButtons.OK, MessageBoxIcon.Error)
            'Libration des ressources utilises
            Mailmsg = Nothing
            objSmtpMail = Nothing
        End Try
    End Sub
     Public Sub envoimail()
        Dim MySMTPClient As New SmtpClient("smtp.free.fr") 'adresse serveur
        Dim MyMail As New MailMessage
        ' Dim nom As String
        ' nom = "Amboise 003"   'image
        Try
            MyMail.From = New MailAddress("expediteur@free.fr")   'expediteur
            ' MyMail.Sender = New MailAddress("destinataire @free.fr")
            MyMail.To.Add(New MailAddress("destinataire@free.fr")) 'destinataire
            MyMail.Body = "mon message_2"
            'MyMail.Priority = MailPriority.Low
            MyMail.Priority = MailPriority.Normal
            ' MyMail.Priority = MailPriority.High
            MyMail.Subject = "essai_2"
            ' MyMail.IsBodyHtml = CBool("<html><p>Voici mon image.</p>" & _
            '"<img src='cid:" & nom & "'" & "width='100' height='100'><br>")
            MySMTPClient.Send(MyMail)
            MessageBox.Show("E-Mail bien envoyé.", "Envoi de l'E-Mail", MessageBoxButtons.OK, MessageBoxIcon.Information)
            MyMail.To.Clear()
            MyMail.Attachments.Clear()
            'Liberation des ressources utilisées
            MyMail.Dispose()
            MySMTPClient.Dispose()
        Catch ex As Exception
            MessageBox.Show("Impossible d'envoyer l'E-Mail!", "Envoi de l'E-Mail", MessageBoxButtons.OK, MessageBoxIcon.Error)
            'Liberation des ressources utilisées
            MyMail.Dispose()
            MySMTPClient.Dispose()
        End Try
    End Sub
End Class


Voilà

@+ Le Pivert
0
JeremyLambert Messages postés 8 Date d'inscription vendredi 1 novembre 2019 Statut Membre Dernière intervention 24 juin 2020
10 nov. 2019 à 15:08
Bonjour, j'ai essayé les deux méthodes et elles ne fonctionnent pas, mais je pense avoir trouvé pourquoi. Je pense qu'en fait il faut que je sois branché sur le réseau industriel pour pouvoir envoyer des mails, car j'ai retesté ma macro VBA chez moi et ça ne fonctionne pas non plus. Je retesterais tout les codes à l'entreprise, je vous tient au courant
0