Jump to content
Sign in to follow this  
tonycst

Email script. Cant send attachment

Recommended Posts

tonycst

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

Share this post


Link to post
Share on other sites
water

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 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-09-01 - Version 1.3.4.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
tonycst

### 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.

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
tonycst

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.

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
tonycst

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

Share this post


Link to post
Share on other sites
michaelslamet

Try to change the FromAddress to a valid email address like myusername@gmail.com

Edit: I use this UDF for sending email (with attachment) through gmail with no problem at all

Edited by michaelslamet

Share this post


Link to post
Share on other sites
michaelslamet

And you dont have a entry for SmtpServer in your INI file?

[autoit]
$SmtpServer =IniRead ("Settings.ini","Email Settings","SmtpServer","") 
[/autoit]

And also, please try SMTP Port 587

Edited by michaelslamet

Share this post


Link to post
Share on other sites
tonycst

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

Share this post


Link to post
Share on other sites
michaelslamet

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

Share this post


Link to post
Share on other sites
tonycst

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

Share this post


Link to post
Share on other sites
michaelslamet

Glad you solve it :) Me too few time mess with INI file reading because of the fact that I dont use full path,

so now I always put full path to make sure it point to a correct/existing file

Share this post


Link to post
Share on other sites
tonycst

I also found that Live aka Outlook and Yahoo requires From address, where as Gmail doesnt.

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  

×