Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Outlook > VBA Outlook
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2007, 08h46   #1
Invité régulier
 
Inscription : juin 2003
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 14
Points : 6
Points : 6
Par défaut Images locales dans mail vba

Bonjour,

Je cherche à envoyer un mail en VBA via Outlook 2003 (utilisation de CDO). Je suis un débutant en VBA et j'ai trouvé ça et là des morceaux de codes qui me conviennent.

Le but est de réaliser une newsletter rudimentaire :
- une base Access des contacts est alimentée (noms, prénoms, mails, ...)
- des modèles HTML sont produits (HTML exporté de Word, c'est impératif)
- Outlook 2003 (marco VBA) lit la source du modèle HTML souhaité. Cela constituera le corps du mail.
- Outlook se connecte à la base Access pour récupérer les adresses des contacts, crée le mail et l'envoie.

J'arrive à lier Outlook avec Access, à envoyer un mail avec un contenu HTML.

Le problème se pose lorsque mon modèle HTML issu de Word contient des images stockées en local : les images ne sont pas "embarquées" dans le mail. J'utilise la méthode CreateMHTMLBody, qui semble destinée à ce genre de tâche, mais cela ne fonctionne toujours pas : dans le mail reçu, l'attribut src de mes balises img contient toujours le lien vers l'image locale.

Je précise qu'il faut que cela soit réalisé en VBA (donc, pas de suggestion du genre : "pourquoi tu n'utilise pas PHP ?"), que les contacts existent déjà dans la base Access (donc, pas de suggestion du genre : "pourquoi tu n'utilise pas MySQL ?") et que je ne souhaite pas utiliser une solution déjà programmée (donc, pas de suggestion du genre : "pourquoi tu n'utilise pas un gestionnaire de newsletter ? Il en existe des très bien qui répondent à tes besoins.").

Merci d'avance, le code suit.

[edit] Je précise que je n'utilise pas de serveur Exchange. Cela est-il la clef du problème ? J'utilise un serveur mail qmail sous linux qui se trouve sur une machine déportée [/edit]
nico_nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2007, 08h48   #2
Invité régulier
 
Inscription : juin 2003
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 14
Points : 6
Points : 6
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
Sub envoyerMailsAPartirDAccess()
 
   'Set up DAO Objects:
   Dim oDataBase As Object
   Dim rst As Object
   Dim iMsg As Object, iConf As Object, mailFrom As String, mailDestinataire As String, sendusing As Integer, smtpServer As String, smtpserverport As Integer
 
   mailFrom = "monAdresse"
   sendusing = 2
   smtpServer = "monServeur"
   smtpserverport = 25
 
   Set oDataBase = OpenDatabase("C:\Documents and Settings\nicolas\Mes documents\access\contacts.mdb")
   Set rst = oDataBase.OpenRecordset("selectMails")
 
   With rst
    .MoveFirst
    ' Loop through the Access records
    Do While Not .EOF
 
        mailDestinataire = ![Mail]
        '**************** ENVOI DU MAIL
 
 
        Set iMsg = CreateObject("CDO.Message")
        Set iConf = CreateObject("CDO.Configuration")
 
        With iMsg
            Set .Configuration = iConf
            .To = mailDestinataire
            .from = mailFrom
            .Subject = "Le titre du message"
            '.HTMLBody = contenuHTML
            .CreateMHTMLBody "C:\Documents and Settings\nicolas\Bureau\NEWSLETTER.html", cdoSuppressNone
            .Fields("urn:schemas:mailheader:disposition-notification-to") = mailFrom
            .Fields("urn:schemas:mailheader:return-receipt-to") = mailFrom
            .Fields.Update
            .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = sendusing
            .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtpServer
            .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = smtpserverport
            .Configuration.Fields.Update
            .Send
        End With
 
        .MoveNext
    Loop
   End With
End If
 
End Sub
nico_nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 11h25   #3
Membre chevronné
 
Avatar de Oliv-
 
Inscription : mars 2006
Messages : 643
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2006
Messages : 643
Points : 699
Points : 699
Salut,
C'est normal ton programme ne sait pas que c'est des PJ, il faut les ajouter.
sinon tu peux aussi utiliser le publipostage de WORD.
Oliv- est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h08.


 
 
 
 
Partenaires

Hébergement Web