Jump to content

Email script. Cant send attachment


tonycst
 Share

Recommended Posts

I have this code i found. It works fine but i cant send attachment. Gives all sorts of errors.

Anyone any good at this ?

It sends me email just fine if i dont attach anything by simply pressing cancel.

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

$SmtpServer =IniRead ("Settings.ini","Email Settings","SmtpServer","")                            ; address for the smtp-server to use - REQUIRED
$FromName = IniRead ("Settings.ini","Email Settings","FromName","")                         ; name from who the email was sent
$FromAddress = IniRead ("Settings.ini","Email Settings","FromAddress","")                          ; address from where the mail should come
$ToAddress = IniRead ("Settings.ini","Email Settings","ToAddress","")                             ; destination address of the email - REQUIRED
$Subject = IniRead ("Settings.ini","Email Settings","Subject","")                      ; subject from the email - can be anything you want it to be
$Body = IniRead ("Settings.ini","Email Settings","Subject","")                  ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = FileOpenDialog ("","","Any (*.*)",4);IniRead ("Settings.ini","Email Settings","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 = IniRead ("Settings.ini","Email Settings","Importance","")                     ; Send message priority: "High", "Normal", "Low"
$Username = IniRead ("Settings.ini","Email Settings","Username","")                             ; username for the account used from where the mail gets sent - REQUIRED
$Password = IniRead ("Settings.ini","Email Settings","Password","")                             ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = IniRead ("Settings.ini","Email Settings","IPPort","")                              ; port used for sending the mail
$ssl = IniRead ("Settings.ini","Email Settings","ssl","")                                    ; 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($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(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
Link to comment
Share on other sites

All sorts of errors?

Can you please post the output of the SciTE console pane so we all know what you are talking about?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

### COM Error !  Number: 80020009   ScriptLine: 92   Description:The transport failed to connect to the server.

or

!> File not found to attach: C:UsersAdministratorDesktop|New Rich Text Document.rtf|New Text Document.txt when selecting multiple files

At this point its gives 1st error without attaching anything and email doesnt get sent.

Link to comment
Share on other sites

  • Developers

The second error is due to the wrong delimiter between the filenames. Semicolon is expected by the udf and fileopendialog uses vertical bar. So simply replace these verticalbar by a semicolon.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

After some more research, turned out its ur code.

Thanks for the multiple files select.

I found your original post and posted question related to
### COM Error !  Number: 80020009   ScriptLine: 92   Description:The transport failed to connect to the server.

there, that many have had.

Ist strange, it workd last night.

Link to comment
Share on other sites

  • Developers

I guess you meant to say that the problem is in your code ...not mine ...right? ;)

For the remaining error: Which Email provider are you using? when it is gmail or Yahoo you need to set the proper port and SSL.

Jos


SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

  • Developers

So, what did you change?

Make sure you have these lines not commented when using Gmail:

$IPPort=465                              ; GMAIL port used for sending the mail
$ssl=1                                   ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

i do. The only thing i changed is that it takes variables from INI file that i write with another script, thats all. Everything else is stock.

This is the INI

[Email Settings]

FromName="Laptop"
FromAddress="Laptop"
ToAddress="myusername@gmail.com"
Subject=""
Body=""
AttachFiles=""
Importance="Normal"
Username="myusername@gmail.com"
Password="mypassword"
IPPort="465"
ssl="1"

Edited by tonycst
Link to comment
Share on other sites

sorry i didnt paste whole thing.

i do have smtp entered.

its there, i just forgot to paste it.

FromAddress makes no difference.

port 587 same error ScriptLine: 92   Description:The transport failed to connect to the server.

FYI i have no antivirus or any network protection at all, not even a firewall.

Could Gmail block my email address from multiple attempts last night ?

How would i find out ?

all of my gmail setting at their default

Edited by tonycst
Link to comment
Share on other sites

sorry i didnt paste whole thing.

i do have smtp entered.

its there, i just forgot to paste it.

FromAddress makes no difference.

port 587 same error ScriptLine: 92   Description:The transport failed to connect to the server.

FYI i have no antivirus or any network protection at all, not even a firewall.

Could Gmail block my email address from multiple attempts last night ?

How would i find out ?

all of my gmail setting at their default

 

To make sure if Gmail block your email address or not, try to login "manually" through gmail.com and sending an email through their inferface, then please try your script again

Link to comment
Share on other sites

sending email to my self thru gmail web interface works fine.

script on the other hand doesnt.

i must have messed up somewhere as usual and i just cant see it.

 

EDIT:

Found it. As usual its my typo. I always make mistakes like that. too much of a HURRY

 

thank u much for wasting your time
 on me

.

As you adviced i replaced | with ; for multiple files bu i still had problem sending even 1 files. This was due to fileopendialogue and iniread.

Fileopendialogue would change working directory and settings.ini does not exist outside of script folder so i had to change Iniread ("Settings.ini" to @Scriptdir & "Settings.ini" and everything worked

Edited by tonycst
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...