XL 2019 Créer en envoyer un mail sans avoir Outlook installé sur ma machine

ESCOUGER2022

XLDnaute Nouveau
Bonjour,
J'ai écrit un VBA qui envoie des mails, mais qui exige que Outlook soit installé .
Cet excel ne fonctionne pas si Outlook n'est pas installé car la référence "Microsoft Outlook 16.0 Object Library" est déclarée manquante, ce qui me semble normal.
Cet excel a été distribué aux membres de mon association, et ne fonctionne donc pas pour tous.

J'aimerais trouver une solution pour envoyer ce mail même si Outlook n'est pas présent sur le PC.
Le mail concerné est simpliste et ne contient que l'expéditeur, le destinataire, l'objet et un texte très court.
Jamais de pièce attachée.
Je ne connais pas les serveurs de messagerie "smtp" des personnes susceptibles d'utiliser cet excel.
J'ai bien trouvé quelques références à "CDO" mais ne sais pas ce que c'est et ne comprends pas bien si cela peut répondre à cette question.
Merci de me dire si cela est possible et comment le cas échéant.
Cordialement
 

Oneida

XLDnaute Impliqué

kiki29

XLDnaute Barbatruc
Salut, voir CDO sur le site de Ron de Bruin
Pourquoi utiliser le code CDO au lieu de l'automatisation Outlook ou SendMail dans VBA.

1 : Peu importe le programme de messagerie que vous utilisez (il utilise uniquement le serveur SMTP).
2 : Peu importe la version d'Office que vous utilisez (97…2016)
3 : Vous pouvez envoyer une plage/feuille dans le corps du courrier (certains programmes de messagerie ne peuvent pas le faire)
4: Vous pouvez envoyer n'importe quel fichier que vous aimez (fichiers Word, PDF, PowerPoint, TXT,….)
5 : Aucun avertissement de sécurité, vraiment génial si vous envoyez beaucoup de courrier en boucle
 

Oneida

XLDnaute Impliqué
Bonjour,

kiki29:​

En effet, mais les liens lui seront utiles

ESCOUGER2022:​

Un code que j'ai modifie en partant du code dont le site et le pseudo du createur sont au debut en commentaires
Chez moi, marche pas pour tous les smtp.
J'avais regarde y a pas mal de temps CDO pour des personnes qui le demandait.
Ici Le corps du message est formate:
1674802095582.png

VB:
'https://www.developpez.net/forums/d1382495/logiciels/microsoft-office/access/vba-access/envoi-e-mail-sans-outlook/
 'pc75
 Sub CDO_ki_Marche()
    Dim oMail As Object
    Dim oMailConfig As Object
    
    Set oMail = CreateObject("cdo.message")
    Set oMailConfig = CreateObject("cdo.configuration")
        'free-->free: ok
        'gmail-->free:ok
        'outlook-->free: ok si Outlook sur PC
        '
        'gmail-->gmail: spam ou pas marche ou tres tres tres long
        'free-->outlook:pas marche
        
        'Nom du serveur SMTP Gmail: smtp.gmail.com
        'Nom d’utilisateur SMTP Gmail: votre adresse Gmail
        'Mot de passe SMTP Gmail: votre mot de passe (si vous avez choisi une méthode d’authéntification)
        'Port SMTP Gmail: 25 ou 465


    Str_Destinataire = "@mail destinataire"
    '
    Str_From = "@mail de l'expediteur"
    
    NomUser = Environ("username")
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 ' 0 = aucune authentification ; 1 = authentification
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "LOGIN" ' Utilisateur exchange si authentification = 1
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "PWD" ' Mot de passe de l'utilisateur exchange si authentification = 1


    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.free.fr"      '"smtp.free.fr" ' Nom du serveur
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 ' ou 25      'Port utilisé
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ' On utilise un service SMTP
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 ' Timeout
    oMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 ' 0 = aucune authentification ; 1 = authentification
    oMailConfig.Fields.Update
    Set oMail.Configuration = oMailConfig
    oMail.Sender = Replace(Str_Destinataire, " ", ".")
    oMail.From = Str_From
    oMail.Fields.Update
    oMail.Subject = "Test messagerie Gmail"
    oMail.To = Str_Destinataire
    
    'texte = "<SPAN STYLE=background-color:white;font-size:12pt;font-family:Times New Roman>Bonjour,</SPAN><BR><BR>"
    'texte = texte & "<B><SPAN STYLE=background-color:white;font-size:18pt;font-family:arial>Essai</SPAN></B><BR><BR>"
          
    Body = ""
    Body = Body & "<html>"
    Body = Body & "<body>"
    Body = Body & "<font face=arial size=2 color=black>"
    Body = Body & "<b>"
    Body = Body & "<SPAN STYLE=background-color:white;font-size:12pt;font-family:Times New Roman>Bonjour," & NomUser & "</SPAN><BR><BR>"
    Body = Body & " Ah Que coucou! "                'texte message
    Body = Body & "</b>"
    Body = Body & "</font>"
    Body = Body & "<br /><br /><br /><br />"
    Body = Body & "<center>"
    Body = Body & "<font face=arial size=2 color=red>"
    Body = Body & "<em>"
    Body = Body & "<HR>"
    Body = Body & "*** Ce message a été envoyé par le système ; Merci de ne pas y répondre. ***"
    Body = Body & "<HR>"
    Body = Body & "</em>"
    Body = Body & "</font>"
    Body = Body & "</center>"
    Body = Body & "</body>"
    Body = Body & "</html>"
    oMail.HTMLBody = Body
    oMail.Send
    Set oMailConfiguration = Nothing
    Set oMailConfig = Nothing
    Set oMail = Nothing
 End Sub

Ce qu'il faut savoir, tres important:
Les seveurs peuvent bloquer les acces
La plupart de temps les messages qui sont delivres, sont places en Pourriels ou spam

Un autre exemple de code avec un corps message "normal": https://forum.excel-pratique.com/astuces/envoi-mail-avec-cdo-sans-outlook-38945
 

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
avec le serveur du FAI(votre fourniseur d'acces free, orange ,etc..) vous pouvez envoyer un mail avec une addesse émetteur bidon
cela dit
il y a 90% de chance de voir votre mail dans le dossier des indésirables dans la boite mail de votre destinataire
a bon entendeur
 

ESCOUGER2022

XLDnaute Nouveau
Merci pour toutes ces pistes.
Comme le fichier que je voulais réaliser doit être mis entre les mains d'une trentaine de personnes dont les équipements et les FAI sont très disparates et susceptibles de changer dans le temps, j'ai conclu qu'aucune des solutions proposées ne convienne sous peine de modifications fréquentes pour l'un ou l'autre des ces 30 personnes.
J'abandonne donc cette piste d'envoi automatique de mail.
Merci pour avoir pris un peu de votre temps pour vous pencher sur cette question.
 

fanch55

XLDnaute Barbatruc
Bonjour à tous,

J'arrive un peu tard, mais avec peut-être une solution , à voir .

CDO ne fonctionne pas avec les Smtp qui réclament le protocole TLS
et Microsoft ne le corrigera probablement pas .

Ma proposition est d'utiliser Powershell et son Send-MailMessage et ce bien sûr via VBA .
J'ai testé avec:
smtp Free ==> ok .
smtp Hotmail ==> ok .
smtp Orange ==> ok .
smtp Gmail ==> ok mais nécessite d'avoir un mot de passe applicatif pour le compte Gmail .

Petit bémol, microsoft a émis un encart de jésuite :
1674941517888.png

Mais au jour d'aujourd'hui, le cmdlet est opérationnel .

Testez le classeur ci-joint .
Compléter la table et cliquer sur un des liens Send

Concrètement, pour @ESCOUGER2022 ,
Vous pouvez utiliser une adresse mail commune aux 30 personnes pour envoyer un mail,
ou utiliser un compte individuel , à vous de voir,
Le code est indépendant de tout logiciel de messagerie .
 

Pièces jointes

  • Sendmail.xlsm
    22.8 KB · Affichages: 22

Laurent78

XLDnaute Occasionnel
Bonsoir,
Peut-être deux pistes à creuser :
- utiliser une API existante, genre les outils de emailing, peut-être qu'il y a des offres gratuites pour peu d'envois ou au tarif très résonnable.
- mettre en place une petit serveur web (ou utiliser celui du site web existant le cas échéant) avec un phpmailer et appeler le sendmail via un put ou un get, avec un petit peu de sécu si besoin.
Cdlt
 

fanch55

XLDnaute Barbatruc
Bonsoir,
Merci pour ce complément intéressant, mais le "bémol de Microsoft" m'ennuie un peu au regard de la pérennité de ce fichier.
On a utilisé Cdo depuis Vb6 pendant plus de 20 ans avant qu'il ne devienne obsolète ou plutôt dysfonctionnant .
Ce qui marche aujourd'hui peut très bien ne plus le faire dans 20 ans ...
Utiliser un logiciel tiers ne garantit pas que le tiers sera toujours présent ...
 

patricktoulon

XLDnaute Barbatruc
Bonsoir
CDO fonctionne encore très bien sur serveurSMTP du fai sans authentification
si serveur du genre entreprise ou reseau entreprise utiliser la config proxy
pour le serveur smtp (tout le monde n'a as le même FAI) j'avais fait une fonction a l’époque pour envoyer un ping et récupérer le smtp
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

J'arrive un peu tard, mais avec peut-être une solution , à voir .

CDO ne fonctionne pas avec les Smtp qui réclament le protocole TLS
et Microsoft ne le corrigera probablement pas .

Ma proposition est d'utiliser Powershell et son Send-MailMessage et ce bien sûr via VBA .
J'ai testé avec:
smtp Free ==> ok .
smtp Hotmail ==> ok .
smtp Orange ==> ok .
smtp Gmail ==> ok mais nécessite d'avoir un mot de passe applicatif pour le compte Gmail .

Petit bémol, microsoft a émis un encart de jésuite :
Regarde la pièce jointe 1161814
Mais au jour d'aujourd'hui, le cmdlet est opérationnel .

Testez le classeur ci-joint .
Compléter la table et cliquer sur un des liens Send

Concrètement, pour @ESCOUGER2022 ,
Vous pouvez utiliser une adresse mail commune aux 30 personnes pour envoyer un mail,
ou utiliser un compte individuel , à vous de voir,
Le code est indépendant de tout logiciel de messagerie .
Bjr fanch55, le Fil, le Forum :)

J'ai pas réussi à faire fonctionner ton fichier...
Photo ci-dessous
1675248297722.png

J'ai du zapper qqchose ?
:)
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 241
Membres
103 162
dernier inscrit
fcfg