Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Applescript for creating New Message with Mail application

Tags:

applescript

I have an AppleScript for Mail.app which opens a new message window with pre-defined recipient address and subject. This script opens a new window every time I run it:

tell application "Mail"
    set newMessage to make new outgoing message with properties {subject:"some subject", content:"" & return & return}
    tell newMessage
        set visible to true
        make new to recipient at end of to recipients with properties {name:"some name", address:"some address"}
    end tell
    activate
end tell

But I want the script to open a new message window only when the previously opened window is closed – otherwise, the previously opened window should come to the front.

Can anyone please help me in modifying this script to achieve the above mentioned functionality?

like image 622
Ranjith Kumar G Avatar asked Oct 08 '22 18:10

Ranjith Kumar G


1 Answers

I didn't test this but it should do what you need... at least it shows you the proper approach. You basically use a "property" to keep track of some value from the last time the script was run. In this case we check for the name of the frontmost window and see if it matches your criteria. If the window name doesn't do what you need then just find some other value to track between launches of the script. The basic approach should work.

EDIT: using the ID of the message, which is unique, the following will do what you want:

property lastWindowID : missing value
tell application "Mail"
    set windowIDs to id of windows
    if windowIDs does not contain lastWindowID then
        set newMessage to make new outgoing message with properties {subject:"some subject", content:"" & return & return}
        tell newMessage
            set visible to true
            make new to recipient at end of to recipients with properties {name:"some name", address:"some address"}
        end tell
        activate
        set lastWindowID to id of window 1
    else
        tell window id lastWindowID
            set visible to false
            set visible to true
        end tell
        activate
    end if
end tell

the visibility toggle seems to be the only way to get the window in front, as frontmost is a read-only property. The lastWindowID property will store the ID as long as the script is not re-compiled (caveat empteor: do not put this into an Automator service, as these get re-compiled every time the service is loaded).

like image 156
regulus6633 Avatar answered Oct 12 '22 11:10

regulus6633