How to Send iCal Invites to Outlook

By J.S. Copper

When sending invitations with Apple's iCal program, the recipient receives an email with an attached .ics file that allows the recipient to add the event to their calendar and accept or decline the invitation. In sending out these invitations to an Outlook user, the functionality gets lost in translation and is not properly formatted or accessed with Microsoft Outlook. Editing the way iCal sends out the invitations, albeit a daunting task, helps to improve the Mac and PC interaction.

Things You'll Need

  • Apple Mac OS X

Step 1

Open the Applications folder. Navigate to the iCal application. Right-click (Control-click) the iCal icon and select \"Show Package Contents.\"

Step 2

Navigate through iCal's contents to \"Resources.\" Inside the \"Resources\" folder, locate \"Mail.applescript.\"

Step 3

Highlight \"Mail.applescript.\" From the menu bar, select \"Edit\" > \"Copy.\" On the Desktop, paste (\"Edit\" > \"Paste\") the file as a backup. Return to the original \"Mail.applescript.\"

Step 4

Right-click the file and select \"Open with AppleScript.\" The AppleScript Editor will open.

Step 5

Navigate about midway down the script to the heading \"on send_mail_sbrp(subjectLine, messageText, myrecipient, invitationPath.\" Highlight the entire section starting with that heading and ending with \"end send_mail_sbrp\" and press \"Delete.\" (Don't worry, you made a back up in Step 3).

Step 6

Highlight, copy and paste the entire following entry within AppleScript in place of the entry you deleted in Step 5:

on send_mail_sbrp(subjectLine, messageText, myrecipient, invitationPath)
set pfile to POSIX file invitationPath
set myfile to pfile as alias

-- define a carriage return
set cr to (ASCII character 13) & (ASCII character 10)

-- retrieve the user's name and e-mail
set listOfAccounts to {}

tell application \"Mail\"
repeat with oneAccount in every account
set listOfAccounts to listOfAccounts & ¬
{\"\\\"\" & (get full name in oneAccount) & \"\\\" <\" & ¬
(get email addresses in oneAccount) & \">\"}
end repeat
end tell

if ((get length of listOfAccounts) is 1) then
set theAccountTouse to get first item of listOfAccounts
set theAccountTouse to ¬
choose from list listOfAccounts ¬
default items (get first item of listOfAccounts) ¬
with prompt ¬
\"Please select which mail account to send the invitation from:\" ¬
without multiple selections allowed and empty selection allowed
end if

-- open and read the iCal event file to insert into an e-mail
set myEventFileHandle to ¬
open for access myfile without write permission
set myEventFileContent to read myEventFileHandle
close myEventFileHandle

-- pre-pend mail headers to the event contents
set myNewEmailText to ¬
\"Subject: \" & subjectLine & cr & ¬
\"From: \" & theAccountTouse & cr & ¬
\"To: \" & myrecipient & cr & ¬
\"content-class: urn:content-classes:calendarmessage\" & cr & ¬
\"Content-Type: text/calendar;\" & cr & ¬
\" method=REQUEST;\" & cr & ¬
\" name=\\\"meeting.ics\\\"\" & cr & ¬
\"Content-Transfer-Encoding: 8bit\" & cr & cr & ¬

-- create a random event file name
set tempMailName to (random number from 1 to 1000000) & \".ics\"
set aliasTempMail to \"/tmp/\" & tempMailName

-- write the new e-mail to a temp file
set myEventFileHandle to ¬
open for access (POSIX file aliasTempMail as string) with write permission
write myNewEmailText starting at 1 to myEventFileHandle
close myEventFileHandle

-- use SENDMAIL to send the file with proper headers
do shell script \"sendmail < \" & aliasTempMail

-- delete the temp file
do shell script \"rm \" & aliasTempMail
on error errMsg
display dialog errMsg
end try
end send_mail_sbrp

Step 7

Select \"Compile\" from the navigation toolbar. Select \"Save\" and exit AppleScript.

Step 8

Send out an iCal invitation. The Windows user with Microsoft Outlook will properly receive your iCal invitations now.

Tips & Warnings

  • Be extremely careful when editing the AppleScript. If you have made an error, replace the \"mail.applescript\" file in iCal's Resources folder with the one you saved to your desktop, and start the process over from the beginning.