bourny

outlook save as oft

16 posts in this topic

I have a working script that sends an email without issue,  I wish to however instead of sending it , save it to a .msg or .oft for somebody else to pick it up off a share and send it.

 

I have noticed the correct code to use is ".SaveAs" object but I cannot seem to get any variations to work.  example of this is https://msdn.microsoft.com/en-us/library/office/ff868727.aspx

 

My code is 

#include <File.au3>

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


; OlSaveAsType Constants
Global Const $olTXT  = 0
Global Const $olRTF  = 1
Global Const $olTemplate = 2
Global Const $olMSG  = 3
Global Const $olDoc  = 4

$SetupSMTP_Host = "mailserver.co.uk"
$EmailName = "script"
$FromAddress = "me@me.co.uk"
$ToEmail = "you@you.co.uk"
$EmailSubject = "test"
$Body = "Test Report"
$AttachFiles = ""
$EmailCC = ""
$EmailBCC = ""
$SetupSMTP_Importance = "Normal"
$SetupSMTP_Username = "ussr" ;UserID
$SetupSMTP_Password = "pass" ;PassWD
$SetupSMTP_Port = 25
$SetupSMTP_Sll = 1
$ReplyTo = ""


$rc = _INetSmtpMailCom($SetupSMTP_Host, $EmailName, $FromAddress, $ToEmail, $EmailSubject, $Body, $AttachFiles, $EmailCC, $EmailBCC, $SetupSMTP_Importance, $SetupSMTP_Username, $SetupSMTP_Password, $SetupSMTP_Port, $SetupSMTP_Sll, $ReplyTo)



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 = "", $SetupSMTP_Port = 25, $SetupSMTP_Sll = 0, $s_ReplyTo = "")

   Local $objEmail = ObjCreate("CDO.Message")


   ;$objEmail.Subject = "Status Report"
   ;$objEmail.To = "status@you.co.uk"
   ;$objEmail.Display
   ;$objEmail.SaveAs ("HOMEPATH" & "\My Documents\statusrep.oft", OlSaveAsType.olTemplate)


   $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    $objEmail.ReplyTo = $s_ReplyTo


    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


    ;Split up multiple file attachments by ;
    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($SetupSMTP_Port) = 0 then $SetupSMTP_Port = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $SetupSMTP_Port
    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 $SetupSMTP_Sll Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update

   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



   $objEmail.Saveas( "c:\temp\test.oft", OlSaveAsType.olTemplate ) ;;;;;;THIS BIT DOES NOT WORK



    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""

EndFunc




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)
    Return
EndFunc

 

Share this post


Link to post
Share on other sites



You are mixing two things: You want Outlook functionality but the script you posted is using CDO.
If you need Outlook then my OutlookEX UDF with function _OL_ItemSave should do the job.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I am trying to use the above script as its the only way I can seem to formulate and email and then successfully send it.  this is why I was going down the route of using the $objemail.saveas script.  I have tried the outlookex but struggling to get it to send and email.  this is the  code I am testing at the moment.  i have had to rem out the folder access bit as it keeps failing with the folder does not exist message.  If I rem it out it goes a bit further then fails on the item send bit.

 

#include <OutlookEx.au3>
$iOL_Debug = 2
; Open the connection to Outlook
Global $oOL = _OL_Open()
; Access the default mail folder
;Global $aFolder = _OL_FolderAccess($oOL, "", "", $olMailItem)
;MsgBox(0, "", "FolderAccess: @error = " & @error & ", @extended = " & @extended)
; Create a mail item and set some properties
Global $oItem = _OL_ItemCreate($oOL, $olMailItem, "", "", _
  "Subject=TestMail", "BodyFormat=" & $olFormatHTML, "HTMLBody=Bodytext in <b>Test</b>.", "SentOnBehalfOfName=Doe Jane")
MsgBox(0, "", "ItemCreate: @error = " & @error & ", @extended = " & @extended)
; Add a recipient and resolve it
_OL_ItemRecipientAdd($oOL, $oItem, Default, $olTo, "mymailbox@mymail.co.uk")
MsgBox(0, "", "Add Recipient: @error = " & @error & ", @extended = " & @extended)
 ;Send the mail
_OL_ItemSend($oOL, $oItem)
If @extended = -2147352567 Then _
 MsgBox(16, "OutlookEX UDF - Example Script", "You don't have permission to send the mail on behalf of the specified person!")

This is why I have stayed with the CDO script I have above as its 100% working but I just need to figure out the CDO code bit to save the email.  I am sure i am on the right tracks with this line and just need to make a slight adjustment to complete it.

$objEmail.Saveas( "c:\temp\test.oft", OlSaveAsType.olTemplate ) ;;;;;;THIS BIT DOES NOT WORK

 

Share this post


Link to post
Share on other sites

"Does not work" is a bit vague.
Do you get any error message? What is the value of @error or @extended after you called the function? Do you have implemented a COM error handler?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

point well made.

 

When I execute without anything remmed out I get folderaccess msgbox with @error = 1 which means folder type is missing or not a number.  i then get a failure with this in the Scite debug 

 

"C:\Program Files (x86)\AutoIt3\Include\OutlookEx.au3" (4119) : ==> The requested action with this object has failed.:
$vItem.Send()
$vItem^ ERROR

 

Share this post


Link to post
Share on other sites

Which version of AutoIt do you run?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

v3.3.14.0

 

Share this post


Link to post
Share on other sites

Do you run the lastest version of the OutlookEX UDF?
Version 1.2.1.0 (released 20th July) fixed a bug with AutoIt versions > 3.3.12.0


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I will download it and try again.

Share this post


Link to post
Share on other sites

little further now I just get I have not got permissions to send on behalf of.  Clearly i am using this UDF all wrong.

Share this post


Link to post
Share on other sites
"SentOnBehalfOfName=Doe Jane"

is only needed if you want to send the mail in the name of another user. If you do not want to then simply delete this parameter. And I doubt you have a "Jane Doe" in your company ;)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

getting somewhere now.  I have managed to create a mail item and save it as a .msg file.   This pretty much is what I need to achieve.  I will test some more functions but it seems I had an incorrect version of the UDF.   Here is the code I am using 

 

I have had to strip down the _OL_iemCreate as the example had a folder in the mailbox but I cannot seem to define a folder to create them item in so removing it and leaving a blank field seems to work.,  not sure where it is dumping the mail item in the mailbox but at least it saves it to disk.

 

 

; *****************************************************************************
; Example 4
; Create a html mail plus two attachments (plus one inline picture = attachment)
; but don't send it
; *****************************************************************************
; Create the item without setting the body. We first need to add the picture before we can refer to in by the HTML body.
$oItem = _OL_ItemCreate($oOutlook, $olMailItem, "", "", "Subject=TestMail", "BodyFormat=" & $olFormatHTML, "HTMLBody=Bodytext in <b>bold</b>.", "To=myemailaddress")
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemCreate Example Script", "Error creating a mail in folder 'Outlook-UDF-Test\TargetFolder\Mail'. @error = " & @error & ", @extended = " & @extended)



_OL_ItemSave($oOutlook, $oItem, Default, "C:\temp\Outlook-UDF-Test\Dir1\", $olMSGUnicode)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemSave Example Script", "Error saving mail item to C:\temp\Outlook-UDF-Test\Dir1\. @error = " & @error & ", @extended = " & @extended)
;ShellExecute("C:\temp\Outlook-UDF-Test\Dir1\TestMail.html")
MsgBox(64, "OutlookEX UDF: _OL_ItemSave Example Script", "Example 1: Item successfully saved!")

 

Share this post


Link to post
Share on other sites

to be more specific it was $vFolder  that I had to remove.  not sure what this does.

 

Share this post


Link to post
Share on other sites

Where do you use $vFolder? Can not find it in the code you posted.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I am referring to your code in your outlookex udf.  If I pass in a 3rd parameter I think it refers to a folder in my outlook inbox that does not exist.  If I blank it out the script works.

is there a list of fields I can reference such as bcc, bc, etc.

 

; #FUNCTION# ====================================================================================================================
; Name...........: _OL_ItemCreate
; Description ...: Creates an item.
; Syntax.........: _OL_ItemCreate($oOL, $iItemType[, $vFolder = ""[, $sTemplate = ""[,$sP1 = ""[, $sP2 = ""[, $sP3 = ""[, $sP4 = ""[, $sP5 = ""[, $sP6 = ""[, $sP7 = ""[, $sP8 = ""[, $sP9 = ""[, $sP10 = ""]]]]]]]]]]]])
; Parameters ....: $oOL         - Outlook object returned by a preceding call to _OL_Open()
;                  $iItemType   - Type of item to create. Is defined by the Outlook OlItemType enumeration
;                  $vFolder     - Optional: Folder object as returned by _OL_FolderAccess or full name of folder where the item will be created.

 

Share this post


Link to post
Share on other sites

What is the value of @extended after calling _OL_ItemCreate?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

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