cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012
-
23 févr. 2008 à 15:18
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012
-
23 févr. 2008 à 21:10
Bonjour,
Pour créer et gérer l'envoie d'un mail à partir d'un programme VB, j'utilise l'API ShellExecute [Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long], avec le paramètre "mailto:" suivi du corps du mail (avec "&Subject=...", "&Body=..."etc), dans la variable lpFile.
Rien de bien méchant jusque là, par contre quand mon logiciel mail s'affiche à l'écran avec le corps du message, ce dernier ne comporte aucun retour de ligne que j'avais écrit dans mon prog VB en utilisant vbCrLf.
Sauf erreur de ma part, cela prouverait que l'API ne gère pas vbCrLf dans la variable lpFile (pour info, j'utilise Outlook 2003 comme logiciel Mail).
D'où ma question : quelle séquence de caractères dois-je utiliser dans cet API pour créer un 'retour-chariot' (ou nouvelle ligne) dans mon corps du message?
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 23 févr. 2008 à 19:34
Ca y est, j'ai trouvé une solution (qui ne vient pas de moi)
En cherchant sur Google, je suis tombé sur une page ... de vbfrance! Comme quoi, c'est qui le meilleur? C'est vbfrance !
J'avais pourtant rechercher sur vbfrance avant de poster, mais je n'ai pas trouvé.
Bref, sur
'http://files.codes-sources.com/fichier.aspx?id=3227&f=VBLocker%2fmodCourriel.vb'
, il y a un exemple de code qui remplace ce vbCrLf par la séquence "%0D%0A".
Je ne sais pas à quoi ça correspond, mais ça fonctionne dans mon cas.
Par contre, je n'ai testé l'API que sous Outlook 2003. Donc si
quelqu'un veut bien tester le code ennoncé juste avant, mais avec
d'autres logiciels que celui de l'oncle Bill (et en écrivant Const
Mail_Body_LineSeparator As String="%0D%0A", au lieu de vbCrLf), ça
serait sympa de sa part.
ton code ("%0D%0A") ne fonctionne sous firefox QUE si mon mail est au format html. même ligne au format texte
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 févr. 2008 à 16:59
tu peux copier ton code exact? (l'appel de l'API)
quand j'essaye, j'ai juste mon client qui s'ouvre mais pas de nouveau message (pas outlook, foxmail)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Const Mail_Body_LineSeparator As String = vbCrLf '<- Séquence de caractère à modifier!!!
Private Sub Form_Load()
Dim Subject As String, Body As String, MailTo As String
'Pas de bouton de commande ou autre fioriture. Pour cet essai, on envoie le mail dès l'ouverture de la Form:
Subject = "Essai d'envoi de mail" 'Titre du message
Body = "Qu'importe... bienvenu..." & Mail_Body_LineSeparator & "Une autre ligne..." 'Corps du message
MailTo = "UnCorrespodante@free.fr" 'Ex. bidon
Call EnvoieEMail_ShellExe(Form1.hwnd, MailTo, Subject, Body)
End Sub
Private Function EnvoieEMail_ShellExe(ByVal hwnd As Long _
, Optional ByVal MailTo As String, Optional ByVal Subject As String, Optional ByVal Body As String _
, Optional ByVal CC As String, Optional ByVal CCC As String) As Long
Dim Temp As String
' Créé la chaîne de commande avec les paramètres fournis
If Len(Subject) Then Temp = "&Subject=" & Subject
If Len(Body) Then Temp = Temp & "&Body=" & Body
If Len(CC) Then Temp = Temp & "&CC=" & CC
If Len(CCC) Then Temp = Temp & "&BCC=" & CCC
'Remplace le premier '&' (s'il existe) par un '?' If Mid(Temp, 1, 1) "&" Then Mid(Temp, 1, 1) "?"
'Ajoute la commande 'mailto:' et l'adresse
Temp = "mailto:" & MailTo & Temp
'Execute la commande par l'API
EnvoieEMail_ShellExe = ShellExecute(hwnd, "open", Temp, _
vbNullString, vbNullString, SW_SHOWNORMAL)
' 5 : OutLook ne se lance pas! Peut-être que le body est trop long.
' 42 : Envoi réussi
If EnvoieEMail_ShellExe <> 42 Then
MsgBox "Il y a peut être un echec lors de l'envoi du mail." _
& vbCrLf & "Erreur n°" & EnvoieEMail_ShellExe _
, vbExclamation + vbOKOnly
End If
End Function