Jump to content
Sign in to follow this  

cdo with input

Recommended Posts


Trying to put Jos CDO to use in my GUI as a feedback form.

Since im using the internal smtp server there is no passwords needed etc however in my gui i have input box for email address and an edit box for the text however im not sure how i can correctly code it so that when they press 'Send' button it will use the input value for email address as $FromAddress and the edit box as $Body. getting stuck as my gui's are in functions and i cant seem to correctly put this in a function to call it with a button to make it send using the input values..

little bit of 'function syntax 101' would be good lol

Share this post

Link to post
Share on other sites


The structure of your code should look something like this (untested - no email server)...

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <file.au3>

Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")


func example()

    local $gui010   =   guicreate('Call Mailer with Parameters')
    local $inp010   =   guictrlcreateinput('Enter Destination Email Address',20,20,400,20)
    local $edt010   =   guictrlcreateedit('Enter Comments',20,50,360,300)
    local $btn010   =   guictrlcreatebutton('Send',20,370,360,20)


    while 1
        switch guigetmsg()
            case $gui_event_close
            case $btn010
                _send_mail( guictrlread($inp010),guictrlread($edt010) )


func _send_mail($to, $comment)

    $SmtpServer = "****************"    ; 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 = $to                    ; <<<--------------------------------------------------------------------------------------------------
    $Subject = "TEST"                   ; subject from the email - can be anything you want it to be
    $Body = $comment                    ; <<<--------------------------------------------------------------------------------------------------
    $AttachFiles = ""                   ; the file you want to attach- 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                       ; port used for sending the mail
    $ssl = 0                            ; enables/disables secure socket layer sending - put to 1 if using httpS

    $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)


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
        $objEmail.Textbody = $as_Body & @CRLF
    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(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment ($S_Files2Attach[$x])
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                Return 0
    $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
    If $ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    ;Update settings
    ; 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"
    ; Sent the Message
    If @error Then
        Return $oMyRet[1]
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
EndFunc   ;==>MyErrFunc


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post

Link to post
Share on other sites

Gotcha - this is where i fell over, using parameters after _Send_mail, works 100%!!!!!

_send_mail( guictrlread($inp010),guictrlread($edt010) )

Thanks Kylo!!!!!!

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  


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.