Page 1 sur 1

[R] Problème de guillemets dans GuiCtrlRead()

Posté : lun. 18 janv. 2010 11:43
par lerin57
Bonjour,

En rapport avec un autre sujet sur lequel je travaille actuellement, je rencontre un probleme que nombre d'entre vous ont surement déja eu.

Dans l'exemple qui suit, nous voulons envoyer un mail, via la fonction inetmail(), avec un préformatage dans le coprs du mail :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <Inet.au3>


Local $nDest, $nObj, $nCorps ; Destinataire , Objet, Corps du message

Local $From = "toto"
Local $To = GUICtrlRead($nDest)
Local $Subject = GUICtrlRead($nObj)

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 593, 454, 192, 114)
$nDest = GUICtrlCreateInput("", 80, 24, 313, 21)
$Label1 = GUICtrlCreateLabel("A:", 58, 28, 14, 17)
$nObj = GUICtrlCreateInput("", 80, 112, 321, 21)
$Label3 = GUICtrlCreateLabel("Objet :", 40, 114, 35, 17)
$nCorps = GUICtrlCreateEdit("", 80, 208, 417, 137)
$Label4 = GUICtrlCreateLabel("Message", 80, 176, 47, 17)
$nSend = GUICtrlCreateButton("Envoyer", 256, 368, 100, 30, $BS_FLAT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Select
        Case $nMsg = $GUI_EVENT_CLOSE
            Exit
        Case $nMsg = $nSend
            _envoie()
    EndSelect
WEnd

Func _envoie()

    $body = ("l'objet du mail est :" & @CR & @CR & GUICtrlRead($nCorps) & @CR & @CR & "cordialement")
    _INetMail(GUICtrlRead($nDest), GUICtrlRead($nObj), $body)
    Exit
EndFunc

 
Le probleme, c'est que si le champs $nCorps = GUICtrlCreateEdit("", 80, 208, 417, 137) contient des guillemets, la logique veut que le script se temrine, ce qui, suivant le client de messagerie, va tronquer le message, ou bien déclencher une erreur tels que "parametres invalide".

J'ai essayé d'utiliser une condition de type For ... In ... Next afin d'indiquer que si le champs $nCorps contient une guillemet, nous ajoutons ' " ' avant et après le résultat de lecture du champs.

Mais cela ne fonctionne pas.

Quelqu'un aurait il une astuce ? :roll:

En vous remerciant.

Re: [..]Probleme de guillemets dans GuiCtrlRead()

Posté : lun. 18 janv. 2010 18:44
par pop45
Je comprend pas , tu peut expliquer un peut mieur

Re: [..]Probleme de guillemets dans GuiCtrlRead()

Posté : lun. 18 janv. 2010 19:35
par lerin57
C'est assez simple.

Executez le code ci-dessus.

Dans le champs le plus volumineux, si vous tapez toto titi tata, un message préformaté apparait, avec la mention suivante :

l'objet du mail est :

Toto titi tata
Cordialement


Maintenant, relancez le script en mettant cette fois ci des guillemets dans le corps, et voyez le résultat.

Ce que cherche, c'est poser une condition qui vérifie la présence de guillemet dans la variable $nCorps, et qui adapte le texte pour qu'aucune erreur ne se produise.

Re: [..]Probleme de guillemets dans GuiCtrlRead()

Posté : lun. 18 janv. 2010 20:04
par pop45
Sa me fait rien a moi
Quan j'apuis sur executer sa lance windows live mail mais peut'etre pas vous

Re: [..]Probleme de guillemets dans GuiCtrlRead()

Posté : lun. 18 janv. 2010 20:45
par sylvanie
+1, je n'ai pas de problème.
On va se lancer dans les pistes de premiers niveau :
1) Quel est la version d'Autoit utilisée
2) un copier / coller du message d'erreur peux aider
3) peut être est ce lié au mailer lancé ?? (Foxmail pour ma part)

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mar. 19 janv. 2010 10:37
par lerin57
Bonjour à tous,

Le client de messagerie est outlook 2003.

Et pour reprendre l'exemple.

Si moi je tape toto "titi" tata dans le corps de ma Gui (ce qui devient le corps du mail)

Soit on ne verra que :
l'objet du mail est :
Toto


Soit une erreur "argument incorrect"

Ce probleme est d'une manière ou d'une autre lié aux guillemets, c'est pourquoi je cherche juste à contrôler la présence d'un caractère dans le corps du message, et de le modifier sous condition le cas échéant.

Si l'un d'entre à vous a une idée, je suis preneur.

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mar. 19 janv. 2010 16:39
par pop45
peut pas t'aider j'ai pas de probleme

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mar. 19 janv. 2010 17:01
par Habibsbib
Ben, essaye ça alors, ça gère les espaces dans ton mail et les guillemets :

Code : Tout sélectionner

_INetMail('"'&guictrlread($ndest)&'" "'&guictrlread($nobj)&'"', $body)
Ça devrait marcher.

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mer. 20 janv. 2010 07:13
par pop45
sa va pas l'aider
1 tu a oublier une virgule
2 il voudrais mettre de guillemet a l'intérieur de son message pas au extrémité

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mer. 20 janv. 2010 09:23
par timmalos
Essayez de Rajouter un <html> au debut de votre Corps ($corps = '<html>' & $corps)
et </html> à la fin ($corps &= '</html>')

Puis Traitez votre corps de cette manière:
StringReplace($corps,'"','\"')
StringReplace($corps,'"','""')

Et essayez de voir comment se comporte votre Emaileur, car c'est de lui que vient le problème aparemment. Il faut surement l'aider un peu mais il faut trouver ce qu'il accepte, essayez les differentes combinaisons avec les StringReplace.

Re: [..] Problème de guillemets dans GuiCtrlRead()

Posté : mer. 20 janv. 2010 21:55
par lerin57
Bonsoir,

En réponse à timmalos, le probleme avec la fonction inetmail(), c'est qu'elle ne prend pas en charge un corps de message en HTML.

Le projet sur lequel je travaille (avec beaucoup de contribution du forum) me permettra d'utiliser un corps en html en utilisant une fonction issue de "macro" liée à outlook.

Toutefois je te remercie beaucoup car la commande stringreplace à entierement corrigé mon probleme.

Code : Tout sélectionner

$corps = guictrlread($nCorps)
$corps = stringreplace($corps, '"', "''", 0)
Merci pour votre aide à tous, je passe le sujet en résolu.