Well, I found a two places to avoid unnecessary command or function evaluations. The improvements make a big difference when transferring large numbers of messages. Hence: Version 12.

Steve

On Apr 8, 2007, at 9:38 AM, Steven Samuels wrote:

|I've completely re-organized the script. Now it will pipe multiple selected messages. I apologize for the multiple posts. Unless someone |finds a mistake, this is the last version.


--I've completely re-organized the script. Now it will pipe multiple selected messages.

--Steve


(* Version 12
   2007/04/08

This script will:

1. Pipe selected messages from Apple Mail to Yojimbo notes
2. Put the date sent (yyyy/mm/dd) & name or address of sender or recipient into Comments
4. Add tags "email" and either "in" or "out"

After running the script, The Comments  will look like:

2007/04/08 <: NYTimes.com  (an incoming message)
or
2007/04/09 >: Sam             (an outgoing message)

Sorting on the Comments column will sort on date order.

Note: If an account has been deleted, all messages to and from it will be classified & tagged as incoming. To restore the proper classification, create a dummy version of the account and disable it. Only the email address need be correct; the server settings are irrelevant.

Credits:
Based on MailtoYojimbo Applescript by Jim Correia of Bare Bones Software Originally posted in the Yojimbo Talk Forum: http:// www.listsearch.com/Yojimbo/Message/index.lasso?2169

The error dialog was copied from MailToYojimbo-v1.1 by Drummond Field, posted at: http://www.hawkwings.net/2007/02/05/email-to-yojimbo-script-with- pdf-support
  (Drummonds very nice script will prompt for tags.)

*)

--Set up a function to generate the body of the message

on generateMessageText(m)
tell application "Mail"
set _sender to sender of m
set _subject to subject of m
set _date to date received of m as string
set _contents to content of m
set _messageString to "From: " & _sender & return
set _messageString to _messageString & "Subject: " & _subject & return
set _messageString to _messageString & "Date: " & _date & return
set _messageString to _messageString & return & return & _contents
end tell

end generateMessageText

--Set a second function to pass a variable which indicates whether I sent the message or not
--
on CountSent(m)
tell application "Mail"
set _sender to sender of m
set _sx to extract address from _sender
set _ctsent to 0 as integer
repeat with _acct in accounts
if email addresses of _acct contains _sx then
set _ctsent to _ctsent + 1 as integer
-- _ctsent counts the number of times the sender's address matches one of mine
-- At the end of the function, the value of _ctsent will be 0 or 1
end if
end repeat
end tell
return _ctsent
end CountSent


--Main Program
on run
tell application "Mail"
tell message viewer 1
set messageList to selected messages
if not (exists selected messages) then
display dialog "No message was selected" & return & "Transfer cancelled." with title "Error..." giving up after 3 with icon 0 buttons {"Ok"}
return
end if
--Now loop through messages
repeat with m in messageList
set _contents to ""
set _date to ""
set _sender to ""
set _count to my CountSent(m) as integer

--Classify message as incoming or outgoing
if _count is 1 then
set _type to "outgoing"
else
set _type to "incoming"
end if

set _name to subject of m
set _contents to _contents & my generateMessageText(m)

--Set up date sent
set _date to date sent of m
set _yr to year of _date as string
set _month to month of _date as number

--Force month to format 'mm'
set _smon to _month as string
if _month < 10 then
set _smon to "0" & _smon
end if

--Force day to format 'dd'
set _day to day of _date as string
if day of _date < 10 then
set _day to "0" & _day
end if

-- Create date sent  with yyyy/mm/dd format
set _datef to _yr & "/" & _smon & "/" & _day

--Get sender's name & address
set _sender to sender of m
set _ssender to extract name from _sender
--If there is no name, _ssender defaults to the address
set _saddr to extract address from _sender

--If the message was received, set the name to the sender and a tag to "in"
if _type is "incoming" then
set _person to "<: " & _ssender
set _tag to "in" as string
end if

--If the message was sent, get the first recipient's name, if available, otherwise the address
if _type is "outgoing" then
set theRecipients to to recipients of m
if (exists name of item 1 of theRecipients) then
set _pers to name of item 1 of theRecipients
set _person to ">: " & _pers
else
set _addr to address of item 1 of theRecipients
set _person to ">: " & _addr
end if
set _tag to "out" as string
end if

---Now set up the note with body, comments, and tags
tell application "Yojimbo"
set aNewNoteItem to make new note item with properties {contents:_contents, name:_name, comments:_datef & " " & _person}
add tags {"email", _tag} to aNewNoteItem
end tell

end repeat
end tell
end tell
end run









--
------------------------------------------------------------------
This message is sent to you because you are subscribed to
 the mailing list <yojimbo-talk@barebones.com>.
To unsubscribe, send mail to: <[EMAIL PROTECTED]>
List archives:  <http://www.listsearch.com/yojimbotalk.lasso>
Have a feature request, or not sure if the software's working correctly? Please send mail to: <[EMAIL PROTECTED]>

Reply via email to