This is a test. The Yojimbo-Talk web page is breaking up long lines with hard returns, so that users who copy the script from there experience errors. To try to prevent the problem, I have tried breaking up long lines with Applescript continuation characters.

Steve

(*
Script to pipe selected Apple Mail messages to Yojimbo notes

Author: Steve Samuels ([EMAIL PROTECTED])
File: yojimbo22.txt
PipeMailtoYojimbo.scpt

Version:22
Date: 2007/04/16

This script is based on one by Jim Correia of Barebones, cited below. It adds the following information to to the "Comments" of an imported email note. If the comments Column is visible in Yojimbo's Item List Pane, then the information can be viewed without opening the note.


* Added to Comments
  1) the date sent (yyyy/mm/dd)
  2) the name or address of sender or recipient
3) the first 60 characters of the message itself it, after removing returns, tabs, and most extra spaces.

* Adds tags: "email" & either "in" or "out"

After running the script, a Comment will look something like:

"2007/04/08 <: NYTimes.com---Your subscription is up soon. Please rene" (an incoming message)
or
"2007/04/09 >: Sam---Hi, Sam! I can't believe that you won the lotte" (an outgoing message)

Notes:

IMPORTANT: Before inserting the script into script-editor, open it in a text editor like BBEdit or Text Wrangler. Scroll down to a section

1. Text will not import for some rich text messages with attachments. The date sent, sender & tags are added, but AppleScript's "content of message" function returns only variants of "??". If this happens, open the original message & cut & paste the content into the note created by the script.

2. Graphics are removed and replaced by question marks. If you wish to retain the graphics, import the mail via the "Save PDF to Yojimbo" option in Mail's Print window.

3. A message is classified as outgoing if the sender's address matches one of the user's addresses. If an account has been deleted, there is no address to match, and all messages in the account will be classified as incoming. To fix this behavior, create and inactivate a dummy account. Only the email address must be correct; the other settings are irrelevant.

4. You can reset the number of characters that are added to comments from the body of the message. The setting statement appears just after the "on run" command at the start of the script proper.

5. If you have selected messages in more than one Message Viewer, the script transfers only those from the Viewer that was opened first.

6. Changing the font of Yojimbo's item list may make the the list more readable. (I now use Lucinda-Grande Bold 11)


Acknowledgements:

The original form for this script was based on MailtoYojimbo, by Jim Correia of Bare Bones Software, posted in the Yojimbo Talk Forum: http://www.listsearch.com/Yojimbo/Message/index.lasso?2169
& at //www.hawkwings.net/2006/09/04/script-to-pipe-emails-into-yojimbo/

I got the idea for adding extended message information to the comments field after seeing the "Summary" field in SOHO Notes.

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

The source for the minimum function was:
http://www.macresearch.org/no_need_to_parse_an_expression

The form for the shell script was based on examples at:
http://developer.apple.com/technotes/tn2002/tn2065.html
http://developer.apple.com/documentation/OpenSource/Conceptual/ ShellScripting/RegularExpressionsUnfettered/chapter_6_section_9.html
*)

on run
-----------------------------------------------------------------------
--In the "set _maxcontent" statement below, specify how many characters
--from the message to add to comments. Zero is a possible value.
-----------------------------------------------------------------------
set _maxcontent to 60 as integer
tell application "Yojimbo"
activate
end tell
tell application "Mail"
activate
if not (exists message viewer 1) then
display dialog ¬
"No Viewer Window is Open. Open one & select messages."¬
& return with title "Error...."¬
giving up after 3 with icon 0
return
end if
tell message viewer 1
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
return
end if
set messageList to selected messages
--Now loop through messages
repeat with m in messageList
--Initialize
set _type to ""
set _contents to ""
set _name to ""
set _person to ""
set _tag to ""
set _body to ""
--Classify message as incoming or outgoing
set _count to my CountSent(m) as integer
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 or address
set _sender to extract name from sender of m
--If there is no name, _sender defaults to the address
--If the message was received, set the name to the sender
-- and set a tag variable to "in"
if _type is "incoming" then
set _person to "<: " & _sender
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 _person to ">: " & name of item 1 of theRecipients
else
set _person to ">: " & address of item 1 of theRecipients
end if
set _tag to "out" as string
end if
--Get message body to add to contents
set _body to ""
set _body to _body & content of m as text
set _length to length of _body
set _shorttext to ""
if _maxcontent > 0 then
set _allow to my min(_length, _maxcontent + 20)
--allow for spaces that will be replaced
set _toomuch to get text 1 thru _allow of _body
-- Pass the message content to Perl to remove tabs,
-- returns, & extra spaces
--
--JOIN THE LINES IN THE NEXT SECTION  (BETWEEN) IN A TEXT EDITOR
--BEFORE INSERTING THEM INTO SCRIPT EDITOR
-- **************************************************************
set _text1 to do shell script ¬
"echo " & quoted form of _toomuch & ¬
"| perl -e \"while(\\$line = <STDIN>) {-e \\$line =~ s/[\t\r]+/ /g ;"¬
& "print \\$line; }\""  & ¬
"| perl -e \"while(\\$line = <STDIN>) {-e \\$line =~ s/ +/ /g ; " ¬
& "print \\$line; }\""
----**************************************************************

--Now find the maximum length of the content to be added
set _lengthnow to length of _text1
set _most to my min(_lengthnow, _maxcontent)
set _shorttext to get text 1 through _most of _text1
set _shorttext to "---" & _shorttext
end if
---Now set up the note with body, comments, and tags.
tell application "Yojimbo"
set aNewNote to make new note item with properties¬
{contents:_contents, name:_name,¬
comments:_datef & " " & _person & _shorttext}
add tags {"email", _tag} to aNewNote
end tell
end repeat
end tell
end tell
end run

-- Function routines follow


--Set up a function to generate the body of the message (by Jim Correia)
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

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


on min(x, y)
if (x is less than or equal to y) then
return x
else
return y
end if
end min




--
------------------------------------------------------------------
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