Problème API\MailTo\vbCrLf (création d'une nouvelle ligne dans le corps du messa [Résolu]

Signaler
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012
-
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012
-
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?

titicar

7 réponses

Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012

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.

titicar
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
base16
%0D => 0 + D = 0^2 + 13^1 = chr$(13)
%0A => 0 + A = 0^2 + 10^1 = chr$(10)

chr$(13) & chr$(10) => VBCRLF

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,
vbcr pour une cellule excel, vblf pour word, faut tenter....

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012

salut PCPT,

Quelle réaction rapide !
Hélas, vbCr ou vbLf ne fonctionne pas non plus.

titicar
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
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
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012

Code rapido : Ouvrir un nouveau projet avec une form nommée Form1
Et écrire ce code dans cette form:

Option Explicit
Private Const SW_NORMAL = 1
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWDEFAULT = 10
Private Const SW_SHOWNOACTIVATE = 4
Private Const SW_SHOWNORMAL = 1

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

'Fin de la source
titicar
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012

Merci pour l'explication en base 16.
Et dommage que ce bout de code ne fonctionne pas dans tous les cas.

titicar