Page 1 sur 2
[R] Envoi de mail avec accents
Posté : lun. 19 mai 2014 14:18
par lokomass
Bonjour à tous,
J'utilise depuis longtemps l'envoi de mail AutoIt, et je viens de me rendre compte que depuis toujours ou presque, j'ai un souci sur les accents dans le corps du mail (uniquement le corps, dans le sujet c'est ok pour les accents)...
Les accents sont remplacés par un autre caractère : è devient h et é devient i ???
Voici la fonction que j'utilise, est-ce normal ? Merci pour votre aide
► Afficher le texte
Code : Tout sélectionner
;Fonction d'envoi de mail
Func SendMail($s_Subject, $as_Body, $s_AttachFiles)
$s_SmtpServer = _INetGetSource("http://arrkhan.free.fr/fai.php")
$s_FromName = "*****"
$s_FromAddress = "*****"
$s_ToAddress = "*****"
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = "*****"
$s_Password = "*****"
$IPPort = 25
$ssl = 0
$mail = ""
$mail = INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username ="", $s_Password="", $IPPort, $ssl)
EndFunc
;Fonction d'envoi de mail
Func INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject , $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password , $IPPort, $ssl)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") And StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & "File not found to attach: " & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
$objEmail.Configuration.Fields.Update
$objEmail.Send
if @error then
SetError(2)
return
EndIf
EndFunc
Re: [..] Envoi de mail avec accents
Posté : lun. 19 mai 2014 15:04
par jchd
Re: [..] Envoi de mail avec accents
Posté : lun. 19 mai 2014 21:31
par lokomass
J'ai essayé de rajouter ces deux lignes comme dans ta page :
Code : Tout sélectionner
$as_Body = BinaryToString(StringToBinary($as_Body,4),1)
$objEmail.Fields.Item ("urn:schemas:mailheader:Content-type") = 'text/plain;charset="utf-8"'
On dirait que c'est un peu mieux j'ai des :
Mais pas encore mes accents propres...
Re: [..] Envoi de mail avec accents
Posté : lun. 19 mai 2014 22:12
par jguinch
Re: [..] Envoi de mail avec accents
Posté : lun. 19 mai 2014 22:14
par lokomass
Merci je suis tombé dessus entre temps, j'ai eu beau essayé de modifier en iso ou utf-8 ça change rien... Retour comme au début
Re: [..] Envoi de mail avec accents
Posté : lun. 19 mai 2014 22:59
par jchd
Avec quoi visualises-tu le corps du message ? Ce que tu montres est bien de l'UTF-8 mais pas interprété en tant que tel.
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 07:52
par lokomass
J'utilise Thunderbird.
J'ai beau retester pour refaire les mêmes accents je ne retrouve pas cette forme :
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 08:18
par aulus
Bonjour,
Faites une copie de Inet.au3. Modifiez la ligne 145 comme ceci :
Code : Tout sélectionner
"Content-Type: text/plain; charset=[b]iso-8859-1[/b]" & @CRLF & _
Changez le nom du fichier et incluez-le dans votre programme en remplacement de Inet.au3
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 08:27
par jchd
Ca devrait fonctionner : ThunderBird est "Unicode aware". Qu'y a-t-il dans les en-têtes ?
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 09:14
par lokomass
aulus a écrit :iso-8859-1
J'ai essayé en mettant iso-8859-1 ou utf-8 mais ça n'a rien changé dans les deux cas.
Pour l'entête de Thunderbird je regarde tout à l'heure.
C'est fou que ça soit si compliqué quand même, et qu'il n'y ait pas de souci dans le titre.
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 10:22
par jguinch
Tu n'aurais pas trifouillé dans les paramètres de Thunderbird ?
Dans TB, tu peux aller dans Affichage > Encodage des caractères puis choisir l'encodage approprié
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 12:50
par aulus
lokomass a écrit :
J'ai essayé en mettant iso-8859-1 ou utf-8 mais ça n'a rien changé dans les deux cas.
Avez-vous fait ce changement dans le fichier Inet.au3 et installé le fichier modifié dans le dossier de votre programme avec référencement à celui-ci ?
Chez moi, ça marche nickel.
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 14:13
par lokomass
J'ai modifié celui du répertoire include
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 15:31
par jchd
Mauvaise idée : tout changement sera perdu (et oublié) après mise à jour ou réinstallation.
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 16:50
par lokomass
Comment dois-je faire pour qu'un autre Inet.au3 soit pris en compte que dans le répertoire include ?
C'est pas pour ça que ça ne fonctionne pas, si ?
Re: [..] Envoi de mail avec accents
Posté : mar. 20 mai 2014 20:37
par aulus
Faites une copie de Inet.au3 que vous installez dans le dossier de votre programme.
Modifiez la ligne 145 comme indiqué plus haut.
Renommez le fichier, par exemple : _Inet.au3
Dans votre programme, déclarez : #include <_INet.au3>
Supprimez la ligne #include <INet.au3>
Re: [..] Envoi de mail avec accents
Posté : mer. 21 mai 2014 07:54
par lokomass
J'ai ré-ouvert on fichier Inet.au3 et la modif dont tu me parles se situait ligne 177, j'ai donc commencé par mettre à jour autoit.
Une fois ceci fait, j'ai suivi tes instructions, mais toujours le même résultat cette fois-ci en essayant avec utf-8 ou iso-8859-1, je vois ce message :
Au lieu de :
Si j'enlève ces deux lignes :
Code : Tout sélectionner
$as_Body = BinaryToString(StringToBinary($as_Body,4),1)
$objEmail.Fields.Item ("urn:schemas:mailheader:Content-type") = 'text/plain;charset="utf-8"'
J'obtiens :
En gros toutes mes modifs dans Mail.au3 (Inet.au3 renommé) ne changent rien.
Autre point qui n'a rien à voir, souvent j'avais l'erreur "ObjMail.send", apparemment du à :
Code : Tout sélectionner
$s_SmtpServer = _INetGetSource("http://www.autoitscript.fr/smtp.php")
J'ai mis le smtp en dur et plus d'erreur.
Voici le code que j'utilise :
► Afficher le texte
Code : Tout sélectionner
#include <Mail.au3>
#include <GuiConstants.au3>
#include <string.au3>
#include <file.au3>
SendMail("Tésééèèt", "corpèèès du méssaààge", "")
;Fonction d'envoi de mail
Func SendMail($s_Subject, $as_Body, $s_AttachFiles)
; $s_SmtpServer = _INetGetSource("http://www.autoitscript.fr/smtp.php")
$s_SmtpServer = "smtp.free.fr"
$s_FromName = "*****"
$s_FromAddress = "*****"
$s_ToAddress = "****"
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = "*****"
$s_Password = "****"
$IPPort = 25
$ssl = 0
$mail = ""
$mail = INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username ="", $s_Password="", $IPPort, $ssl)
EndFunc
;Fonction d'envoi de mail
Func INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject , $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password , $IPPort, $ssl)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
$as_Body = BinaryToString(StringToBinary($as_Body,4),1)
If StringInStr($as_Body,"<") And StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & "File not found to attach: " & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
$objEmail.Fields.Item ("urn:schemas:mailheader:Content-type") = 'text/plain;charset="utf-8"'
$objEmail.Configuration.Fields.Update
$objEmail.Send
if @error then
SetError(2)
return
EndIf
EndFunc
;Fonction d'erreur
Func MyErrFunc()
Return
EndFunc
Re: [..] Envoi de mail avec accents
Posté : mer. 21 mai 2014 09:59
par aulus
Voici le mien, pour comparaison :
► Afficher le texte
Code : Tout sélectionner
#include <_INet.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
Global $nb = 0
Global $erreurs[1]
$s_SmtpServer = "smtp.sfr.fr"
$s_FromName = "Moi-même"
$s_FromAddress = "mon.adresse@sfr.fr"
Dim $s_ToAddress[2] = ["destinataire1@free.fr","destinataire2@neuf.fr"]
$s_Subject = "Le sujet de mon courriel"
Dim $as_Body[1]
$as_Body[0] = "Bonjour," & @CRLF & @CRLF & "Nous vous informons de la prochaine conférence gratuite organisée par l'association :" & @CRLF & @CRLF
$as_body[0] = $as_body[0] & "Sujet : Construire son arbre généalogique" & @CRLF
$as_body[0] = $as_body[0] & "Conférencières : Cécile Malaix et Joëlle Terrat" & @CRLF
$as_body[0] = $as_body[0] & "Date et heure : Samedi 26 avril 2014, de 15 h à 17 h" & @CRLF
$as_body[0] = $as_body[0] & "Lieu : Salle de l'association" & @CRLF & @CRLF
$as_body[0] = $as_body[0] & "Amitiés" & @CRLF & @CRLF
$as_body[0] = $as_body[0] & "Le président de l'association." & @CRLF & @CRLF
;envoi
For $i=0 to ubound($s_ToAddress)-1 step 1
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress[$i], $s_Subject, $as_Body, @computername, -1)
next
Re: [..] Envoi de mail avec accents
Posté : mer. 21 mai 2014 10:51
par lokomass
Merci, je vais tester ton script à midi.
Par contre, il permet l'envoi de PJ ?
Et concernant mon "souci aléatoire" sur _INetGetSource, est-ce plus judicieux de le mettre en dur du coup ? Il m'ait déjà arrivé de perdre 1 mail ou 2, surement à cause de ça je pense.
Re: [..] Envoi de mail avec accents
Posté : mer. 21 mai 2014 18:34
par lokomass
J'ai testé ton script, j'ai des � à la place des accents maintenant.
J'ai essayé en mettant "utf-8" et "iso-8859-1" mais j'ai toujours des �.
De plus, est-ce possible de mettre une pièce jointe avec ?