Sign in to follow this  
Followers 0
nore

Sending emails

5 posts in this topic

I was searching for some function to send an email, so I stumbled upon _INetSmtpMail.

What I want is to send an email to a gmail account, I found out that gmail's smtp server is smtp.gmail.com. After trying to send a test email, it failed with error code 51. So I wonder if gmail's smtp server(s) require any special input for $s_helo or $s_first.

Anybody tried sending emails to gmail accounts before ?

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

--

Edited by AL3X

Share this post


Link to post
Share on other sites

Hi ! Here you go :)

#Include<file.au3>
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
$s_SmtpServer = "smtp.gmail.com"            ; address for the smtp-server to use - REQUIRED
$s_FromName = "Nombre"                      ; name from who the email was sent
$s_FromAddress = "email@gmail.com"          ;address from where the mail should come
$s_ToAddress = "youremail@gmail.com"        ;destination address of the email - REQUIRED
$s_Subject = "Hi!"                          ;subject from the email - can be anything you want it to be
$as_Body = ""                               ;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 = ""                           ;address for cc - leave blank if not needed
$s_BccAddress = ""                          ;address for bcc - leave blank if not needed
$s_Username = "youremail@gmail.com"         ;username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$s_Password = "yourpassword"                ;password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
$IPPort = 465                               ;port used for sending the mail
$ssl = 1                                    ;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

hi when i run it i get this error code 2 transport code 0x80040217 what does that means?

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Some virus scanners and spyware tools prevent use of port 25 to prevent mass mailer worms. This could be why you cannot open port 25. Definately a firewall of some sort.

edit: looks like you're trying to use 465 instead, but still may be prevetned. You running Windows Firewall?

Edited by spudw2k

Share this post


Link to post
Share on other sites

Some virus scanners and spyware tools prevent use of port 25 to prevent mass mailer worms. This could be why you cannot open port 25. Definately a firewall of some sort.

edit: looks like you're trying to use 465 instead, but still may be prevetned. You running Windows Firewall?

well.. you're not far from the truth I guess.. According to that thread and other posts I have a little idea on what he's trying to do.. and you have one too now.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0