Sign in to follow this  
Followers 0
13lack13lade

cdo with input

3 posts in this topic

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



13lack13lade,

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

example()

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)

                        guisetstate()

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

EndFunc

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

endfunc

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(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                $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=""
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

kylomas


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  
Followers 0