Page 1 sur 1

[R] Envoie d'un mail

Posté : lun. 02 nov. 2009 12:22
par Narmeke
Bonjour,
Je voudrais savoir si il n'existait pas une méthode plus simple pour envoyer un mail avec pièce jointe.
J'ai tous d'abord essayer d'envoyer un mail sans pièce jointe avec le code que j'ai trouver ici :
http://www.autoitscript.fr/forum/viewto ... f=20&t=822

Donc ce code avec mon smtp :

Code : Tout sélectionner

;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
$s_SmtpServer = "smtp.wanadoo.fr"

$s_FromName = "Autoit"                      ; name from who the email was sent
$s_FromAddress = "your@Email.Address.com" ;  address from where the mail should come
$s_ToAddress = "zackr33@live.fr"   ; destination address of the email - REQUIRED
$s_Subject = "Userinfo"                   ; subject from the email - can be anything you want it to be
$as_Body = "12345"                             ; the messagebody from the mail - can be left blank but then you get a blank mail
$s_AttachFiles = ""                       ; the file you want to attach- leave blank if not needed
$s_CcAddress = "CCadress1@test.com"       ; address for cc - leave blank if not needed
$s_BccAddress = "BCCadress1@test.com"     ; address for bcc - leave blank if not needed
$s_Username = "******"                    ; username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$s_Password = "********"                  ; password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$IPPort = 80                              ; port used for sending the mail
$ssl = 0                                  ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                            ; GMAIL port used for sending the mail
;~ $ssl=1                                 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _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)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Rc:" & $rc)
EndIf
;

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=25, $ssl=0)
    $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
;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
; Sent the Message
    $objEmail.Send
    if @error then
        SetError(2)
        return $oMyRet[1]
    EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $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
 
Puis avec smtp automatique :

Code : Tout sélectionner

;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
DirCreate(@TempDir & "\server_smtp\ATP_Mailer")
InetGet("http://arrkhan.free.fr/fai.php", @TempDir & "\server_smtp\ATP_Mailer\smtp")

$s_SmtpServer = FileRead(@TempDir & "\server_smtp\ATP_Mailer\smtp")
$s_FromName = "Autoit"                      ; name from who the email was sent
$s_FromAddress = "your@Email.Address.com" ;  address from where the mail should come
$s_ToAddress = "cloud1.33@hotmail.fr"   ; destination address of the email - REQUIRED
$s_Subject = "Userinfo"                   ; subject from the email - can be anything you want it to be
$as_Body = "12345"                             ; the messagebody from the mail - can be left blank but then you get a blank mail
$s_AttachFiles = ""                       ; the file you want to attach- leave blank if not needed
$s_CcAddress = "CCadress1@test.com"       ; address for cc - leave blank if not needed
$s_BccAddress = "BCCadress1@test.com"     ; address for bcc - leave blank if not needed
$s_Username = "******"                    ; username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$s_Password = "********"                  ; password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$IPPort = 80                              ; port used for sending the mail
$ssl = 0                                  ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                            ; GMAIL port used for sending the mail
;~ $ssl=1                                 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _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)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Rc:" & $rc)
EndIf
;

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=25, $ssl=0)
    $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
;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
; Sent the Message
    $objEmail.Send
    if @error then
        SetError(2)
        return $oMyRet[1]
    EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $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
 
Puis a chaque fois le script me les 2 mêmes erreurs:
► Afficher le texte
Ou ceci :
► Afficher le texte
Donc si vous avez une solution d'envoie de mail plus simple je suis preneur ! =)

Merci d'avance pour vos réponses.

P.S : Je souhaiterais envoyer 3 fichiers textes ce situant dans mes documents.
Les fichier .txt sont :
|->Texte1.txt
|-->Texte2.txt
|--->Texte3.txt

Re: [..] Envoie d'un mail

Posté : lun. 02 nov. 2009 13:48
par sksbir
bonjour,

voici ma petite contribution au sujet: utilisation simple de blat pour envoyer un mail : http://www.blat.net/
► Afficher le texte

Re: [..] Envoie d'un mail

Posté : lun. 02 nov. 2009 14:07
par DJSIR
Essaie avec le SMTP : smtp.free.fr et l'adresse test@free.fr

COMME JE T'AI DIT SUR MSN

Re: [..] Envoie d'un mail

Posté : lun. 02 nov. 2009 14:10
par Narmeke
Merci mais j'aime pas trop cette solution !
Je recherche à envoyer un mail rapidement de n'importe quelle PC !

Re: [..] Envoie d'un mail

Posté : lun. 02 nov. 2009 15:43
par Narmeke
Voici la solution :

Code : Tout sélectionner

 Include
;##################################
#Include<file.au3>
#Include<inet.au3>
;##################################
; Variables
;##################################

$s_SmtpServer =_INetGetSource("http://www.autoitscript.fr/smtp.php")

$s_FromName = "Autoit"                      ; name from who the email was sent
$s_FromAddress = "expéditeur@sender.com" ;  address from where the mail should come
$s_ToAddress = "déstinataire@test.com"   ; destination address of the email - REQUIRED
$s_Subject = "Salut sa va !"                   ; subject from the email - can be anything you want it to be
$as_Body = "Ceci est un test"                             ; the messagebody from the mail - can be left blank but then you get a blank mail
$s_AttachFiles = "test.txt"                       ; the file you want to attach- leave blank if not needed
$s_CcAddress = ""       ; address for cc - leave blank if not needed
$s_BccAddress = ""     ; address for bcc - leave blank if not needed
$s_Username = ""                    ; username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$s_Password = ""                  ; password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$IPPort = 25                             ; port used for sending the mail
$ssl = 0                                  ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                            ; GMAIL port used for sending the mail
;~ $ssl=1                                 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _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)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Rc:" & $rc)
EndIf
;

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=25, $ssl=0)
    $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
;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
; Sent the Message
    $objEmail.Send
    if @error then
        SetError(2)
        return $oMyRet[1]
    EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $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
 
Merci à la personne m'ayant fournit ce code !

Re: [R] Envoie d'un mail

Posté : jeu. 14 janv. 2010 23:50
par ne0vincent
Ce code à l'air de bien fonctionner. Du moins lorsqu'on clic dessus.

Je me suis vite pressé de configurer une planification de tache sous windows, du script exécutable.

Et là, problème, au moment de l'exécution je reçois une MsgBox de l'appli "Error code: 1 rc:0"

Il doit lui manquer qq chose. Mais comment savoir ce qu'il lui manque et comment lui fournir... :?

Re: [R] Envoie d'un mail

Posté : ven. 15 janv. 2010 00:15
par matwachich
Svp, pour celui qui disait que la fonction _INetSmtpMailCom lui cause le problème de: le transport a échoué..... bah regarde ca (on parlait de la même fonction dans ce poste):
http://www.autoitscript.fr/forum/viewto ... 9&start=30

Re: [R] Envoie d'un mail

Posté : ven. 15 janv. 2010 19:13
par ne0vincent
La fonction marche correctement. Là n'est pas le problème. Voici en détails ce que je fait :

Je compile mon fichier envoie_mail.au3 (dans le répertoire perso autoIT) => Ok
Je clic sur l'exécutable envoie_mail.exe (dans le répertoire perso autoIT) => Ok (le mail est envoyé)
Je fait une planification de tache sous windows 7. Donc je choisie d'exécuter envoie_mail.exe => Au moment de l'exécution, apparition d'une MessageBox de envoie_mail.exe "Error code:1 rc:0"

Autre exemple de situation qui me fait planter envoie_mail.exe : je place envoie_mail.exe sur le bureau et je clic dessus => idem, MsgBox "error code:1 rc:0"

mais fichtre, c'est quoi cette erreur 1...

Re: [R] Envoie d'un mail

Posté : ven. 15 janv. 2010 20:54
par matwachich
Le fait que l'erreur soit déclenché par le changement de dossier dit que le problème ne vient pas de la fonction mail, mais plutôt d'autre chose dans le script!

donne le script complet pour voir!

Re: [R] Envoie d'un mail

Posté : sam. 16 janv. 2010 00:30
par ne0vincent
Problême résolu. Le chemin de ma pièce jointe n'était pas complet. J'aurai du y penser plus tôt :|