Autres ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Roland_M

XLDnaute Barbatruc
Bien le bonjour à tous,

J'ai réalisé ce classeur qui pourrait certainement intéresser plusieurs personnes !?
à tester ! faire des remarques ! chez moi ça fonctionne parfaitement mais j'y travaille encore qq fois.

Classeur avec plusieurs macros pour envoyer des Mails avec ou sans pièce jointe ou dans le corps du msg

EDIT: dernière modif 23/11/2020 (simplifié)
 

Pièces jointes

  • FICH_EnvoiMail_CdoPerso.xlsm
    85.5 KB · Affichages: 55
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Bonsoir à tous


Suite de mes investigations avec CDO et Exchange
Avant de tester le code tel que l'a écrit Roland_M, les deux codes ci-dessous fonctionnent mais si j'ai bien compris
on passe par Outlook (ou plutôt par le client MAPI par défaut qui se trouve être Outlook à mon taf)
Ces codes fonctionne si Outlook est ouvert avant l’exécution du code VBA
->Dans le doute, j'ai coché ces deux références :
• CDO 1.21 (cdo.dll)
• Microsoft CDO for Windows 2000 Library (cdosys.dll)

Si certains d'entre vous veulent tester (Prérequis: utilisation d'EXCHANGE)
Il faut remplacer dans le code strServer par le vrai nom du serveur Exchange
et strMailBox par un nom valide d'un compte message de votre boite
• Pour tester j'ai pris le nom de ma boite mail (pas l'adresse mail)
Le souci ici c'est qu'avec ces codes le fameux message de sécurité de Outlook apparaît :(
Chose qui ne devrait pas arriver si j'arrivais à adapter le code CDO (sans Outlook) de Roland_M.
Je poursuis mes investigations et vous tiens au courant.
PS: Personne sur le forum ne connait ou n'utilise Exchange (et/ou CDO + Exchange) ?
Un peu d'aide serait la bienvenue ;)
Code:
Sub TestSMI_OK()
Dim objSession As Object, objMessage As Object, objRecipient As Object
'test avec session OL ouverte
Dim strMailBox, strProfileInfo, strServer As String
strServer = "NOMSERVEUREXCHANGE"
strMailBox = "ACCOUNTNAME"
Set objSession = CreateObject("MAPI.Session")
objSession.Logon "", "", False, True, 0, True, strServer & Chr(10) & strMailBox

Set objMessage = objSession.Outbox.Messages.Add
objMessage.Subject = "SUJET DU JOUR: " & StrConv(Format(Date, "mmmm yyyy"), 3) & Format(Time, " hh:mm")
objMessage.Text = "Ceci est un message de test"

Set objRecipient = objMessage.Recipients.Add

objRecipient.Name = strMailBox
objRecipient.Resolve
objMessage.Send
MsgBox "Message envoyé correctement!", vbInformation, "INFO"
objSession.Logoff
End Sub
PS: Je pense que la version II est identique à la I mais avec une syntaxe simplifiée
Code:
Sub TestSMII_OK()
'test avec session OL ouverte
Dim objSession As Object, objOutBox
Dim objNewMessage As Object, objRecipients As Object, objOneRecip As Object

Set objSession = CreateObject("MAPI.session")
objSession.Logon showDialog:=False, NewSession:=False

Set objOutBox = objSession.Outbox
Set objNewMessage = objOutBox.Messages.Add
Set objRecipients = objNewMessage.Recipients
Set objOneRecip = objRecipients.Add
With objOneRecip
.Name = "ACCOUNTNAME"
.Resolve ' get MAPI to determine complete e-mail address
End With
With objNewMessage
.Subject = "SUJET DU JOUR: " & StrConv(Format(Date, "mmmm yyyy"), 3) & Format(Time, " hh:mm")
.Text = "Ceci est un message de test"
.Send
End With
objSession.Logoff
End Sub
 

Yaloo

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Salut Staple, le fil,

Merci pour ton retour, j'ai cherché pas mal également, mais n'ai rien trouvé de performant.
En tout cas, merci de ta ténacité, et tiens nous au courant.

A+
 

Staple1600

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Bonsoir Yaloo

Yaloo
Je n'arrive pas à savoir si il faut indiquer un numéro de port ou pas si on utilise Exchange.
Je viens encore de lire pas mal de trucs sur Exchange et CDO
et je viens de m’arrêter la dessus:
Fields("CdoSendUsing") = cdoSendUsingExchange
Je testerai cette piste demain au taf et vous dirai si cela fonctionne enfin ;)
 

Roland_M

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

bien le bonjour à tous,

petite info que j'ai collecté sur developpez.com

À partir de Office 2010, CDO n'est plus inclus dans le pack et ne fonctionnera pas avec les versions Office 64 bits.
Vous pourrez donc l'utiliser sans problème de Office 2000 à 2007.
Pour les versions ayant été mises à jour vers 2010 en 32 bits, les tests que nous avons effectués se sont révélés positifs.

comme quoi, à quoi ça sert que "ducon" se décarcasse ...!?

j'ai remarqué qu'en informatique, ce n'est pas tellement évoluer que l'on fait, mais plutôt toujours recommencer !
on passe son temps à chercher des solutions pour palier à l'incompatibilité des logiciels MS Office !
ça ne m'étonne pas que beaucoup disent que c'est une "daube" !
adapter une formule, une fonction, passe encore, mais des programmes qu'il faut refaire entièrement NON !

Bon, soit, si ça ne fait pas avancer le schmilblick, ça fait du bien !

EDIT:
j'en profite pour mettre l'adresse ou j'ai lu cette info, site qui document très clairement l'envoi mail cdo !
Application et mthode d'envoi de lettres d'information en CDO

et aussi mon classeur avec qq petites modif ...!
voir ici:
https://www.excel-downloads.com/thr...tp-avec-cdo-avec-ou-sans-piece-jointe.216747/
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Bonsoir à tous


Roland_M:
Merci pour ces infos.
Je suis toujours dans l'impasse avec CDO + Exchange.
Puisque cela fonctionne, en passant par MAPI.Session, normalement je présume que j'ai pas à utiliser ces lignes
sendusername et sendpassword (de plus je ne connais pas le password de ma boite mail boulot)
Code:
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0              
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = ""
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
Pour le moment je sèche, j'espère que d'autres ici finiront par éclairer ma lanterne.
(En attendant, si besoin je passerai pour le moment par Outlook ou par CDO + stmp gmail ou autre)
 

Roland_M

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

bonjour,

non !
mais ce n'est pas plus mal de les mettre !
Authentification = CdoAnonymous (0)
et par conséquence les deux autres = ""


.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = ""
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""

pour le reste effectivement c'est un problème apparemment insoluble !
 

Staple1600

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Bonjour à tous

Roland_M
pour le reste effectivement c'est un problème apparemment insoluble !
Attendons l'avis d'autres membres du forum utilisant une messagerie avec Exchange pour définitivement déclarer forfait ;)

PS:pour ma gouverne, je voudrai bien comprendre pourquoi cela fonctionne en passant par Outlook mais pas avec CDO.
Car avec Outlook* je suis identifié par mon login de session donc je n'ai pas besoin de renseigner username et mot de passe, logiquement je devrai pouvoir faire pareil avec CDO, non ?
*: voir mes exemples de test plus bas dans le fil ou celui-ci tout simple.
Code:
Sub mOL()
With CreateObject("Outlook.Application").CreateItem(0)
.To = "adressemail": .Subject = "TEST": .Send
End With
End Sub
• Lundi je testerai sans grande conviction, ceci:
Code:
Sub mCDO()
With CreateObject("CDO.Message")
    .Subject = "TEST"
    .From = "monemail": .To = "monemail"
    .TextBody = "I hope that someone gets my message in a bottle. ;o)": .Send
End With
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

Bonjour à tous

Roland_M
On utilise le même G()()gle ;)
Donc j'avais déjà lu ces liens que tu cites dans ton dernier message
Et j'avais bloqué ici:

Code:
' Note here: showing an HTTP URL but the
' location must be local to use the
' Exchange OLE DB Provider
Conn.Open "http://server/exchange/user1"
Je ne connais pas le nom du Exchange OLE DB Provider de mon taf sauf s'il s'agit du même nom
que celui que je mettais plus bas dans mes exemples
strServer = "NOMSERVEUREXCHANGE"

PS: Je suppose que les tentatives de connexion par ADO ou CDO doivent être "loggées" ou "tracées".
Alors n'est-ce point risqué sur le plan professionnel ? Cela mérite pas un blâme, non ?
Je vois bien les petits gars du Service Informatique me demandant ce que je "bouene" avec CDO et Exchange
:p


 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : ci-joint un classeur pour envoi mail en smtp avec cdo avec ou sans pièce jointe

re

c'est vrai si tu es dans le privé !!! :confused:
MAIS,
si tu es dans l'administration ... :cool:
il y a les avertissements^10 puis arrivent les blâmes^10 :(
si tu es sage, après trois années, remise à zéro des compteurs ... :)
et on repart pour un tour ... re-avertissements ... blâmes ... :(

ça fait déjà pas mal d'essais ! ;)


pour les intéressés mon classeur avec qq améliorations ...
voir ici:
https://www.excel-downloads.com/thr...tp-avec-cdo-avec-ou-sans-piece-jointe.216747/
 
Dernière édition:

Discussions similaires

Réponses
10
Affichages
1 K

Statistiques des forums

Discussions
312 370
Messages
2 087 689
Membres
103 639
dernier inscrit
NIEMASAFI