applescript for Mail.app to duplicate outgoing message and send as a newly formatted message
So i've been searching around for a way to do the 开发者_JS百科following, sequentially in Mail.app, using AppleScript:
- intercept an outgoing message (let's call this "A")
- make and exact duplicate message (let's call this "B") of the outgoing message "A"
- format the text/content etc of this newly made message ("B")
- send this newly formatted message ("B")
- disregard the original one ("A").
Why would i want to do something that appears to be so retarded?
- Apple's Mail.app amazingly doesn't format the outgoing content of your messages.
- By doing the basic Message > Preference > etc etc it only changes the font-style of the message that you see through Mail.app. When your recipient gets the message, the font chosen is that of the client's default (which can be an abhorring Times New Roman for clients like Outlook).
So why not just ask for an Applescript that formats your outgoing message directly?
- (Now we're on to something... )
- Apple doesn't allow us to get hold of the current outgoing message as an object, which is silly.
- Apple does however allow us to get hold of a "newly made message" (via make new outgoing message) with an object
Still learning the ropes with Applescript, so would greatly appreciate it if anyone could cook up an AppleScript that does the requested.
My intention is to trigger the Applescript when i hit "Send Message" (through the lovely Keyboard Maestro).
Here's the skeleton applescript code i could come up with:
set theFont to "Lucida Sans, Lucida Sans Unicode, Lucida Grande, Verdana, Arial"
set theSize to 12
tell application "Mail"
-- 1. intercept an outgoing message
set outMsg to front outgoing message
-- 2. make and exact duplicate of this outgoing message
-- need a little help with extracting...
set fmtMsg to make new outgoing message with properties
{ sender:,
subject:”Convert”,
content:”Please convert and send”
message signature:,
to recipient:,
cc recipient:,
bcc recipient:
}
tell fmtMsg
-- 3. format the text/content etc of this newly made message
set font of content to theFont
set size of content to (theSize)
-- set visible to true
-- 4. send this newly formatted message
send
-- 5. disregard the original one.
-- help?
end tell
end tell
Cheers.
I haven't worked with Mail that much, but I've composed a script that should do the job...
set the mail_recipient to the text returned of (display dialog "To:" default answer "")
set the mail_subject to the text returned of (display dialog "Subject:" default answer "")
set the mail_content to the text returned of (display dialog "Enter your message here (for a new line type \"\\n\"):" default answer "")
set prevTIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to "\\" & "n"
set this_text to every text item of the mail_content
set AppleScript's text item delimiters to return
set the mail_content to this_text as string
tell application "Mail"
tell (make new outgoing message with properties {visible:true, subject:mail_subject, content:mail_content})
make new to recipient at the end of to recipients with properties {address:mail_recipient}
send
end tell
end tell
I haven't added error checking in the script (check for a valid address for the recipient).
As you said, you can't change the recipient's font; that might be considered harassment.
If this script isn't satisfactory, just let me know and I'll change it for you. :)
UPDATE: I just read up on using AppleScript with Mail, and just realized that Mail has huge limitations regarding AppleScript. I think your best bet would be to use GUI Scripting
. This script is kind of hacky, but it should work.
tell application "System Events" to tell process "Mail" to set the mail_subject to (get the value of the first text box)
tell application "Mail" to set this_message to the content of the first message of mailbox "Sent" whose subject is the mail_subject
UPDATE 2:
tell application "System Events"
tell process "Mail"
set the mail_recipient to (get the value of the first text field)
set the mail_subject to (get the value of the fourth text field)
set the mail_content to (get the value of the last text field)
my create_new_message(mail_recipient, mail_subject, mail_content)
end tell
end tell
on create_new_message(recipient, subject, content)
tell application "Mail"
quit saving no
activate
tell (make new outgoing message with properties {subject:|subject|, content:|content|)
make new recipient at the end of to recipients with properties {address:|recipient|}
send
end tell
end tell
end create_new_message
精彩评论