Interfacing with MS Outlook

Ken Ray kray at sonsothunder.com
Tue Apr 12 14:16:03 EDT 2005


On 4/12/05 11:16 AM, "Rosenberg, Joe" <jrosenberg at gilsonco.com> wrote:

> Basically, what I would like to do is allow a user to generate an email
> from an email address field within the stack, attach a pdf file (the
> path of which will also be stored somewhere within the stack), and then
> either send the message automatically or open it on screen for review
> and allow the user to click the "send" button manually.

I'll get to this one after I show you how to do the Calendar item because
it's a bit tricker...

> A more critical task is scheduling- I could save myself a tremendous
> amount of time and energy in development if I could somehow schedule a
> task within Outlook's calendar. Being able to use Revolution to stick an
> appointment in for two hours on May 25th at 2PM with a reminder 15
> minutes before would be a huge benefit to me.

Here's the basic .vbs script, with placeholders surrounded in double angle
brackets << >> :

----
Const olCalendarFolder = 9

Set oOutlook = WScript.CreateObject("Outlook.Application")
Set mNameSpace = oOutlook.GetNameSpace("MAPI")
Set oCalFolder = mNameSpace.GetDefaultFolder(olCalendarFolder)
Set oApptItem = oCalFolder.Items.Add
With oApptItem
    .Start = "<<START_DATE_TIME>>"
    .End ="<<END_DATE_TIME>>"
    .Subject = "<<SUBJECT>>"
    .Body="<<BODY>>"
    .ReminderMinutesBeforeStart = <<REMIND_MINS>>
End With
----
Of course, there are other properties that can be set for an appointment
item, but you get the picture.

Now put that into a custom property (I use "uVBScript" below), and then when
you need it, retrieve it, replace the placeholders with real info, and then
run it like this:

on mouseUp
  put "4/12/05 9:00AM" into tStart
  put "4/12/05 10:00AM" into tEnd
  put "Doctor's Appointment" into tSubject
  put "Call 555-5555 beforehand to confirm." into tBody
  put 30 into tRemindMins
  SetAppointment tStart,tEnd,tSubject,tBody,tRemindMins
end mouseUp

on SetAppointment pStart,pEnd,pSubject,pBody,pRemindMins
  put the uVBScript of this stack into tScript
  replace "<<START_DATE_TIME>>" with pStart in tScript
  replace "<<END_DATE_TIME>>" with pEnd in tScript
  replace "<<SUBJECT>>" with pSubject in tScript
  replace "<<BODY>>" with pBody in tScript
  replace "<<REMIND_MINS>>" with pRemindMins in tScript
  runScript tScript
end SetAppointment 

on runScript pVBS
  set the hideConsoleWindows to true
  put "C:\temp.vbs" into tTempPath
  put pVBS into url ("file:" & tTempPath)
  get shell("cscript.exe //nologo" && tTempPath)
  send "delete file" && quote & tTempPath & quote to me in 1 second
  -- this gives enough time for the script to run before you delete it
end runScript

Now, back to your original request about creating a mail message in Outlook
with an attachment. Here's the basic .vbs again, without placeholders this
time (so I can show you what the deal is) - it's similar to the calendar
stuff above, though:

----
Const olInbox = 6
Const olCC = 2
Const olBCC = 3

Set oOutlook = WScript.CreateObject("Outlook.Application")
Set mNameSpace = oOutlook.GetNameSpace("MAPI")
Set oMailFolder = mNameSpace.GetDefaultFolder(olInbox )
Set oMailItem = oMailFolder.Items.Add
With oMailItem
    .Recipients.Add("kray at sonsothunder.com")
    .Recipients.Add("jrosenberg at gilsonco.com").Type = olCC
    .Recipients.Add("hiddenguy at uknowwho.com").Type = olBCC
    .Subject = "Here's my attached file"
    .Body = "This is line 1" & vbCrLf & "This is line 2"
    .Attachments.Add("C:\myfile.txt")
    .Display
End With
----
A few notes:

    1) For a multiline "body", you'll need to replace CRs in your variable
you want to use with the "vbCrLf", and make sure things are quoted, so using
the <<BODY>> variable, I might set it up like:

    .Body = <<BODY>>

(note no quotes around the placeholder, unlike what I did for the
Appointment Item), and then use a function like:

function MakeBody pMultiLineVal
  replace CR with (quote & " & vbCrLf & " & quote) in pMultiLineVal
  return quote & pMultiLineVal & quote
end MakeBody

to format it properly.

    2) If you want to show it in Outlook and not send it, use the ".Display"
command just before the "End With". If you want to send it, use ".Send".

    3) Outlook security will bring up a dialog for the end user asking them
for permission to allow an outside entity to do something with their Outlook
program (I have Outlook 2002, so it may be a bit different in 2003). Either
way, the user has to acknowledge the intrusion and allow it to happen.

In any event, I hope the above gives you some insight on how to use VB
Script to automate Outlook.

Have fun, and forgive any typos...

Ken Ray
Sons of Thunder Software
Web site: http://www.sonsothunder.com/
Email: kray at sonsothunder.com




More information about the use-livecode mailing list