Page 1 sur 1
[R] Erreur envoi de mail $objEmail.Send
Posté : mar. 15 sept. 2015 10:02
par lokomass
Bonjour à tous,
J'ai un souci sur un de mes scripts. Celui-ci s’exécute chaque semaine depuis plusieurs années, tous les samedis à 3h00 sans aucun problème.
Samedi dernier, donc le 12/09, mon script est tombé en erreur :
En fouillant un peu (en lançant le fichier au3, plutôt que l'exe), j'ai trouvé que l'erreur venait du send mail...
Alors là je ne comprend vraiment rien... je n'ai pas modifié le script depuis 3 ans, et il fonctionne parfaitement depuis toujours....
Je n'ai pas changé de FAI, pas changé de boîte mail ou de mot de passe, l'ordinateur en question a bien internet....
Je ne vois vraiment pas d’où vient le souci.. J'ai relancé plusieurs fois et à chaque fois la même erreur, donc pas un souci ponctuel.
Voici mon code, une idée ?
► Afficher le texte
Code : Tout sélectionner
Mail()
;Fonction d'envoi de mail
Func Mail($Attache = "")
Global $Duree
$Body = "Test"
$Sujet = "Test"
$Smtp = "smtp.free.fr"
$From = "Lokomass"
$De = "******"
$Vers = "******"
$Avec = ""
$Cache = ""
$Username = "******"
$Password = "******"
$Port = 25
$Ssl = 0
$Mail = Smpt($Smtp, $From, $De, $Vers, $Sujet, $Body, $Attache, $Avec, $Cache, $Username = "", $Password = "", $Port, $Ssl)
_MySQLEnd($Sql)
EndFunc
;Fonction d'envoi de mail
Func Smpt($Smtp, $From, $De, $Vers, $Sujet , $Body, $Attache, $Avec, $Cache, $Username, $Password , $Port, $Ssl)
$Email = ObjCreate("CDO.Message")
$Email.From = '"' & $From & '" <' & $De & '>'
$Email.To = $Vers
Local $Error = 0
Local $Description = ""
If ($Avec <> "") Then $Email.Cc = $Avec
If ($Cache <> "") Then $Email.Bcc = $Cache
$Email.Subject = $Sujet
If (StringInStr($Body,"<") And StringInStr($Body,">")) Then
$Email.HTMLBody = $Body
Else
$Email.Textbody = $Body & @CRLF
EndIf
$Email.BodyPart.Charset = "UTF-8"
If ($Attache <> "") Then
Local $File = StringSplit($Attache, ";")
For $x = 1 To $File[0]
$File[$x] = _PathFull($File[$x])
If (FileExists($File[$x])) Then
$Email.AddAttachment($File[$x])
Else
$Description = $Description & @lf & "Fichier introuvable : " & $File[$x]
SetError(1)
Return 0
EndIf
Next
EndIf
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $Smtp
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $Port
If ($Username <> "") Then
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $Username
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $Password
EndIf
If ($Ssl) Then
$Email.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpuseSsl") = True
EndIf
$Email.Configuration.Fields.Update
$Email.Send
If @error Then
SetError(2)
Return
EndIf
EndFunc
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 13:30
par lokomass
En complément, j'ai testé une fonction qui est censé fonctionner chez tout le monde (d'après ce que j'ai vu sur les forums), et j'ai l'erreur suivante :
Voici le code utilisé cette fois-ci.
► Afficher le texte
Code : Tout sélectionner
#include-once
;
;##################################
; Include
;##################################
#include<file.au3>
;##################################
; Variables
;##################################
$SmtpServer = "free.smtp.fr" ; address for the smtp-server to use - REQUIRED
$FromName = "****" ; name from who the email was sent
$FromAddress = "*****" ; address from where the mail should come
$ToAddress = "*****" ; destination address of the email - REQUIRED
$Subject = "ssdf" ; subject from the email - can be anything you want it to be
$Body = "sdfsdf" ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = "" ; address for cc - leave blank if not needed
$BccAddress = "" ; address for bcc - leave blank if not needed
$Importance = "Normal" ; Send message priority: "High", "Normal", "Low"
$Username = "*****" ; username for the account used from where the mail gets sent - REQUIRED
$Password = "*****" ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25 ; port used for sending the mail
$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $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])
;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
If FileExists($S_Files2Attach[$x]) Then
ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
$objEmail.AddAttachment($S_Files2Attach[$x])
Else
ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
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
If Number($IPPort) = 0 Then $IPPort = 25
$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
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
;Update settings
$objEmail.Configuration.Fields.Update
; Set Email Importance
Switch $s_Importance
Case "High"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High"
Case "Normal"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal"
Case "Low"
$objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low"
EndSwitch
$objEmail.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return $oMyRet[1]
EndIf
$objEmail = ""
Return 1
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
Local $HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 13:58
par walkson
Bonjour,
avez vous essayé avec
$IPPort = 465
$ssl = 1
avec parefeu et antivirus désactivés et en vérifiant les ports autorisés dans la box ?
Pour ma part, avec ce port, je n'ai pas de problème tout en étant sous le FAI orange (envoie sous SMTP.free.fr compte gratuit)
J'oublie, en début de script, j'ai rajouté
#AutoIt3Wrapper_Run_AU3Check=n
mais je ne pense pas que le problème vient de là...
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 14:03
par lokomass
Bonjour et merci pour ta réponse,
Peux-tu me donner exactement la fonction que tu utilises, que je repartes sur un truc qui fonctionne bien stp ?
Merci d'avance
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 14:28
par walkson
C'est exactement la même que tu as mise dernièrement
[Edit]
Après vérif avec votre deuxième script, aucun problème mais avec >> #AutoIt3Wrapper_Run_AU3Check=n << sinon le script bloque sur $objEmail.To = $s_ToAddress
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 14:45
par lokomass
Je testerai ce soir depuis mon PC, mais du coup ce que je ne comprend vraiment pas, c'est comment du jour au lendemain sans jamais rien avoir touché au niveau AutoIT, ça peut ne plus fonctionner ? ça me dépasse...
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 20:13
par lokomass
Même erreur avec #AutoIt3Wrapper_Run_AU3Check=n et en mettant le port 465 avec ssl à 1.
Au niveau des ports, ça m'étonne de devoir ouvrir des ports sur la box pour envoyer des mails ?
J'ai essayé de désactiver l'antivirus mais pareil.
EDIT :
En mettant le port 25 et le ssl à 0 (ce que j'avais de base, et que j'utilise depuis 3 ans), j'ai ce message......
Une autre piste ?
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 20:57
par jchd
Si ton FAI considère que tes envois sont du spam (il a peut-être raison de son point de vue) tu ne peux pas contourner ce problème, sauf à adhérer aux règles qu'il t'indique dans son lien.
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 21:27
par lokomass
JE ne peux pas utiliser un autre serveur smtp que celui de mon FAI ?
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 22:35
par jchd
Bien sûr que si, mais il faut avoir un compte adequat sur la machine qui t'ouvre un service SMTP (gmail, hotmail, turlutemail, ...). Les FAI grand public n'acceptent plus de SMTP provenant de non abonnés.
Les spammers cherchent des services SMTP ouverts (c'est fort rare de nos jours), tentent de pirater des comptes par attaque de type dictionnaire et surtout utilisent des réseaux de machines "plombées" pour faire leurs envois en masse.
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : mer. 16 sept. 2015 22:59
par lokomass
Du coup j'ai essayé le smtp de Gmail mais je retombe sur l'erreur du début
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 00:03
par walkson
lokomass a écrit :
Au niveau des ports, ça m'étonne de devoir ouvrir des ports sur la box pour envoyer des mails ?
En principe, les box ont un parefeu. Dans le cas d'Orange quand je suis passé à la livebox2, Free et Google en SMTP ne fonctionnaient plus car le port d'orange est 587 et le port 465 était fermé.
Avec Free, le SMTP fonctionnait avec le port 25 mais depuis plusieurs années le port 465 est obligatoire (je suis sous Orange).
Je tiens à préciser un point lors de mes essais, quand j'envoie un message avec le script via le SMTP Free à ma boite Orange avec copie à Free, le mail arrive comme un spam dans les 2 boites et je suis obligé de configurer une règle pour qu'il soit accepté. Mais je n'ai pas ce problème avec Thunderbird.
Il y a quelques temps je m'étais fais un "mouchard" sur ma clef USB qui envoyait un mail avec l'IP de celui qui s'était branché mais j'ai eu beaucoup de problèmes dés que la clef n'était pas branché sur mon PC et donc pas beaucoup d’intérêts.
Depuis, j'ai réglé le problème en envoyant les informations par FTP. (il me semble qu'il y a un exemple sur le forum pour signaler la position des ordinateurs portables). Ce peut être une solution à votre problème...
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 09:17
par lokomass
Du coup je pense laisse tomber le smtp de free, qui se met à bloquer mes mails du jour au lendemain sans raison valable...
Bref, j'ai pensé à reprendre un autre système. J'utilise également sous unix la commande nail, qui permet de m'envoyer le même type de mail, et qui fonctionne très bien.
En jetant un coup d’œil sur la configuration que j'avais mis en place, j'ai trouvé ceci !!
Code : Tout sélectionner
# Set variables for send messages.
set smtp-use-starttls
set ssl-verify=ignore
set smtp="smtp://smtp.gmail.com:587"
set from="Synology"
set smtp-auth-user="****"
set smtp-auth-password="****"
set sendcharsets="utf-8"
set ttycharset="utf-8"
Ceci est très intéressant, ça veut dire que j'envoie bien mes mails via un autre smtp que celui de mon fournisseur (ce que tu disais jchd).
J'ai donc de suite modifié la conf autoit ci-dessus :
Code : Tout sélectionner
$SmtpServer = "smtp.gmail.com" ; address for the smtp-server to use - REQUIRED
$FromName = "lokomass" ; name from who the email was sent
$FromAddress = "***********" ; address from where the mail should come
$ToAddress = "*****" ; destination address of the email - REQUIRED
$Subject = "ssdf" ; subject from the email - can be anything you want it to be
$Body = "sdfsdf" ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = "" ; address for cc - leave blank if not needed
$BccAddress = "" ; address for bcc - leave blank if not needed
$Importance = "Normal" ; Send message priority: "High", "Normal", "Low"
$Username = "*******" ; username for the account used from where the mail gets sent - REQUIRED
$Password = "*********" ; password for the account used from where the mail gets sent - REQUIRED
$IPPort=587 ; GMAIL port used for sending the mail
$ssl=0 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS
Concernant ssl, comme j'ai plus haut ssl-verifiy=ignore j'ai mis ssl=0. (si je met ssl à 1, je retombe sur le message : transport a échoué).
Et j'ai un autre message d'erreur qui dit qu'il faut utiliser smtp-use-starttls.
Seulement comment le configurer dans autoit ? (en effet je vois bien dans le script nail qu'il utilise set smtp-use-starttls au début) ?
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 10:50
par jchd
walkson,
Je ne connais aucune "box" qui bloque en sortie des ports de la machine destination (et surtout pas ceux-là, par défaut) !
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 12:22
par lokomass
Moi aussi ça me paraît impossible. Du coup j'ai toujours mon souci de ssl... Certains disent que c'est le port 465 pour gmail, quelle est la bonne configuration ?
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 12:45
par walkson
Bonjour,
@jchd, Sans doute parce que j'étais en configuration personnalisée. Cependant, et je viens de vérifier, le port 465 n'est pas proposé et j'avais du le rajouter. Aujourd'hui, je suis repassé sur la configuration "moyenne" et aucun SMTP n'est bloqué.
@ lokomass , si je propose de passer par FTP, c'est parce que je présume que vous envoyez régulièrement des informations sur le comportement de votre PC. Free (comme Orange) propose la création (gratuite) d'un site qui est modifiable par FTP d’où mon idée...
A titre indicatif, j'envoie du courrier au travers de 4 SMTP différents sans aucun problème. Mais avec le script Autoit, ce n’est pas le cas. Avec Orange et Free, aucun problème mais pour les autres (Google), ça passe très difficilement.
Certains disent que c'est le port 465 pour gmail, quelle est la bonne configuration ?
Oui, tout à fait
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : jeu. 17 sept. 2015 13:02
par lokomass
Avec le port 465 et ssl à 1 ça fonctionne impecc !!!
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : ven. 18 sept. 2015 09:12
par lokomass
Petit question subsidiaire ?
Je me retrouve avec ces signatures dans mes mails :
Code : Tout sélectionner
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Je suppose que c'est le fait d'avoir passé le ssl à 1, mais est-ce possible de virer cette signature ?
Merci d'avance.
Re: [..] Erreur envoi de mail $objEmail.Send
Posté : ven. 18 sept. 2015 13:07
par lokomass
il suffisait de désactiver le scan à l'envoi des mails dans avast.

Re: [..] Erreur envoi de mail $objEmail.Send
Posté : ven. 18 sept. 2015 15:21
par jguinch
Merci de passer le sujet en [R] si le problème est résolu. Il suffit pour cela de modifier le titre du premier message.