Page 1 sur 1
[..] Mail et accents
Posté : ven. 26 oct. 2012 09:54
par antolionel74
Bonjour,
J'utilise la fonction _INetSmtpMail() pour envoyer un mail, mais les caractères accentués apparaissent sous forme de symboles bizarre une fois arrivés dans ma boite mail. (ex: point interrogation dans un losange noir).
Peut'on spécifier un encodage de caractère autre que l'UDF de base ?
Cordialement,
Lionel
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 11:20
par FireFox
Bonjour,
Oui mais il faudra que tu modifies la fonction.
La ligne à modifier se trouve à la ligne 177 de l'include INet :
Donc il faut remplacer le charset US-ASCII par :
ou bien
Cdlt, FireFox.
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 11:32
par antolionel74
Super ça marche nickel
Merci beaucoup
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 11:52
par DimVar
@demon : Merci pour l'info, j'y ai été confronté aussi.
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 12:31
par antolionel74
Un autre détail : peut-on mettre plusieurs destinataire et aussi un destinataire en copie ?
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 12:36
par FireFox
antolionel74 a écrit :Un autre détail : peut-on mettre plusieurs destinataire et aussi un destinataire en copie ?
Ouep' :
Code : Tout sélectionner
"To: Mary <mary@example.com>, Kelly <kelly@example.com>" & @CRLF & _
"Cc: anniversaire_archive@example.com" & @CRLF & _
Tu peux utiliser la syntaxe du To pour le Cc.
Cdlt, FireFox.
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 12:57
par antolionel74
J'ai essayé ceci pour le paramètre $s_ToAddress :
Code : Tout sélectionner
...
$s_ToAddress = "To: adresse1@gmail.com" & @CRLF & "Cc: adresse2@gmail.com"
...
_INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
ça me retourne une erreure 52.
Es-tu sûre que ça fonctionne ainsi ?
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 13:14
par FireFox
antolionel74 a écrit :
Es-tu sûre que ça fonctionne ainsi ?
ha non ! Il faut modifier directement le code de la fonction pour ajouter des paramètres au header.
Donc autant refaire la fonction :
► Afficher le texte
Code : Tout sélectionner
...
Global $sHeader = "From: toto <toto@gmail.com>" & @CRLF & _
"To: Mary <mary@example.com>, Kelly <kelly@example.com>" & @CRLF & _
"Cc: anniversaire_archive@example.com" & @CRLF & _
"Content-Type: text/plain; charset=iso-8859-1"
_INetSmtpMailEx(..., ..., ..., $sHeader, ...
...
Func _INetSmtpMailEx($s_SmtpServer, $s_Subject = "", $s_Header = "", $as_Body = "", $s_helo = "", $s_first = " ", $b_trace = 0)
If $s_SmtpServer = "" Or $s_Subject = "" Or $s_Header = "" Then Return SetError(1, 0, 0)
If $s_helo = "" Then $s_helo = @ComputerName
If TCPStartup() = 0 Then Return SetError(2, 0, 0)
Local $s_IPAddress, $i_Count
StringRegExp($s_SmtpServer, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
If @extended Then
$s_IPAddress = $s_SmtpServer
Else
$s_IPAddress = TCPNameToIP($s_SmtpServer)
EndIf
If $s_IPAddress = "" Then
TCPShutdown()
Return SetError(3, 0, 0)
EndIf
Local $v_Socket = TCPConnect($s_IPAddress, 25)
If $v_Socket = -1 Then
TCPShutdown()
Return SetError(4, 0, 0)
EndIf
Local $s_Send[6], $s_ReplyCode[6] ; Return code from SMTP server indicating success
$s_Send[0] = "HELO " & $s_helo & @CRLF
If StringLeft($s_helo, 5) = "EHLO " Then $s_Send[0] = $s_helo & @CRLF
$s_ReplyCode[0] = "250"
$s_Send[1] = "MAIL FROM: <" & $s_FromAddress & ">" & @CRLF
$s_ReplyCode[1] = "250"
$s_Send[2] = "RCPT TO: <" & $s_ToAddress & ">" & @CRLF
$s_ReplyCode[2] = "250"
$s_Send[3] = "DATA" & @CRLF
$s_ReplyCode[3] = "354"
Local $aResult = _Date_Time_GetTimeZoneInformation()
Local $bias = -$aResult[1] / 60
Local $biasH = Int($bias)
Local $biasM = 0
If $biasH <> $bias Then $biasM = Abs($bias - $biasH) * 60
$bias = StringFormat(" (%+.2d%.2d)", $biasH, $biasM)
$s_Send[4] = $s_Header & @CRLF & _
"Subject:" & $s_Subject & @CRLF & _
"Mime-Version: 1.0" & @CRLF & _
"Date: " & _DateDayOfWeek(@WDAY, 1) & ", " & @MDAY & " " & _DateToMonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & $bias & @CRLF & _
@CRLF
$s_ReplyCode[4] = ""
$s_Send[5] = @CRLF & "." & @CRLF
$s_ReplyCode[5] = "250"
; open stmp session
If __SmtpSend($v_Socket, $s_Send[0], $s_ReplyCode[0], $b_trace, "220", $s_first) Then Return SetError(50, 0, 0)
; send header
For $i_Count = 1 To UBound($s_Send) - 2
If __SmtpSend($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then Return SetError(50 + $i_Count, 0, 0)
Next
; send body records (a record can be multiline : take care of a subline beginning with a dot should be ..)
For $i_Count = 0 To UBound($as_Body) - 1
; correct line beginning with a dot
If StringLeft($as_Body[$i_Count], 1) = "." Then $as_Body[$i_Count] = "." & $as_Body[$i_Count]
If __SmtpSend($v_Socket, $as_Body[$i_Count] & @CRLF, "", $b_trace) Then Return SetError(500 + $i_Count, 0, 0)
Next
; close the smtp session
$i_Count = UBound($s_Send) - 1
If __SmtpSend($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then Return SetError(5000, 0, 0)
TCPCloseSocket($v_Socket)
TCPShutdown()
Return 1
EndFunc ;==>_INetSmtpMail
Cdlt, FireFox.
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 13:16
par antolionel74
Parfait, je vais tester ton code, merci

Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 14:12
par antolionel74
Y'a t'il possibilité de demander un accusé de réception ?
Re: [..] Mail et accents
Posté : ven. 26 oct. 2012 14:22
par FireFox
antolionel74 a écrit :Y'a t'il possibilité de demander un accusé de réception ?
Tu ne peux pas avoir un accusé de réception pour savoir si l'utilisateur a "lu" ton mail.
Pour savoir si le mail a bien été envoyé tu regardes la valeur de retour de la fonction.
Cdlt, FireFox.
Re: [..] Mail et accents
Posté : ven. 07 déc. 2012 07:51
par antolionel74
Salut,
J'ai testé ta fonction, mais il y'a quelques problèmes que je ne parviens pas à identifier, puisque les adresses sont dans le header, les bloc MAIL FROM et RCPT TO pose problèmes. Du coup rien ne fonctionne vraiment. Peux tu m'aider ? Je ne comprend pas très bien les mécanismes smtp pour corriger par moi même ce qui devrait l'être
d3monCorp a écrit :antolionel74 a écrit :
Es-tu sûre que ça fonctionne ainsi ?
ha non ! Il faut modifier directement le code de la fonction pour ajouter des paramètres au header.
Donc autant refaire la fonction :
► Afficher le texte
Code : Tout sélectionner
...
Global $sHeader = "From: toto <toto@gmail.com>" & @CRLF & _
"To: Mary <mary@example.com>, Kelly <kelly@example.com>" & @CRLF & _
"Cc: anniversaire_archive@example.com" & @CRLF & _
"Content-Type: text/plain; charset=iso-8859-1"
_INetSmtpMailEx(..., ..., ..., $sHeader, ...
...
Func _INetSmtpMailEx($s_SmtpServer, $s_Subject = "", $s_Header = "", $as_Body = "", $s_helo = "", $s_first = " ", $b_trace = 0)
If $s_SmtpServer = "" Or $s_Subject = "" Or $s_Header = "" Then Return SetError(1, 0, 0)
If $s_helo = "" Then $s_helo = @ComputerName
If TCPStartup() = 0 Then Return SetError(2, 0, 0)
Local $s_IPAddress, $i_Count
StringRegExp($s_SmtpServer, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
If @extended Then
$s_IPAddress = $s_SmtpServer
Else
$s_IPAddress = TCPNameToIP($s_SmtpServer)
EndIf
If $s_IPAddress = "" Then
TCPShutdown()
Return SetError(3, 0, 0)
EndIf
Local $v_Socket = TCPConnect($s_IPAddress, 25)
If $v_Socket = -1 Then
TCPShutdown()
Return SetError(4, 0, 0)
EndIf
Local $s_Send[6], $s_ReplyCode[6] ; Return code from SMTP server indicating success
$s_Send[0] = "HELO " & $s_helo & @CRLF
If StringLeft($s_helo, 5) = "EHLO " Then $s_Send[0] = $s_helo & @CRLF
$s_ReplyCode[0] = "250"
$s_Send[1] = "MAIL FROM: <" & $s_FromAddress & ">" & @CRLF
$s_ReplyCode[1] = "250"
$s_Send[2] = "RCPT TO: <" & $s_ToAddress & ">" & @CRLF
$s_ReplyCode[2] = "250"
$s_Send[3] = "DATA" & @CRLF
$s_ReplyCode[3] = "354"
Local $aResult = _Date_Time_GetTimeZoneInformation()
Local $bias = -$aResult[1] / 60
Local $biasH = Int($bias)
Local $biasM = 0
If $biasH <> $bias Then $biasM = Abs($bias - $biasH) * 60
$bias = StringFormat(" (%+.2d%.2d)", $biasH, $biasM)
$s_Send[4] = $s_Header & @CRLF & _
"Subject:" & $s_Subject & @CRLF & _
"Mime-Version: 1.0" & @CRLF & _
"Date: " & _DateDayOfWeek(@WDAY, 1) & ", " & @MDAY & " " & _DateToMonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & $bias & @CRLF & _
@CRLF
$s_ReplyCode[4] = ""
$s_Send[5] = @CRLF & "." & @CRLF
$s_ReplyCode[5] = "250"
; open stmp session
If __SmtpSend($v_Socket, $s_Send[0], $s_ReplyCode[0], $b_trace, "220", $s_first) Then Return SetError(50, 0, 0)
; send header
For $i_Count = 1 To UBound($s_Send) - 2
If __SmtpSend($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then Return SetError(50 + $i_Count, 0, 0)
Next
; send body records (a record can be multiline : take care of a subline beginning with a dot should be ..)
For $i_Count = 0 To UBound($as_Body) - 1
; correct line beginning with a dot
If StringLeft($as_Body[$i_Count], 1) = "." Then $as_Body[$i_Count] = "." & $as_Body[$i_Count]
If __SmtpSend($v_Socket, $as_Body[$i_Count] & @CRLF, "", $b_trace) Then Return SetError(500 + $i_Count, 0, 0)
Next
; close the smtp session
$i_Count = UBound($s_Send) - 1
If __SmtpSend($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then Return SetError(5000, 0, 0)
TCPCloseSocket($v_Socket)
TCPShutdown()
Return 1
EndFunc ;==>_INetSmtpMail
Re: [..] Mail et accents
Posté : ven. 07 déc. 2012 13:14
par sylvanie
En activant les traces, vous avez quoi comme infos ?
cad, mettre
après l'argument contenant le corps du message dans _INetSmtpMail