Monday, November 08, 2010 at 12:01 AM.


<<How to work with this example:
	<<Given the objectmodel nature of Eudora it is not easy to only one run line of this script at a time.
	<<What you should do is Debug this script and step through it one line at a time.  Use the lookup feature of
	<<the debugger to look at the value of the "result" variable as you go.
with objectModel, Eudora, eventInfo { <<most scripts should issue Eudora commands from within a statement like this one
	local (result);
	if not isRunning() { <<make sure it is running if not launch it.
	bundle { <<opening and closing things
		open (mailfolder[""].mailbox["In"]); <<Open a mailbox
		close (window[1]); <<Eudora 3 or greater <<Close the frontmost window
		open (mailfolder[""].mailbox["In"]); <<Open a mailbox
		close (mailfolder[""].mailbox["In"]); <<Close a mailbox
		open (mailfolder[""].mailbox["In"].message[1])};
	bundle { <<getting things
		<<objectModel way:
		result = get (mailfolder[""].mailbox["In"].message[1].subject);
		result = get (setting[25]); <<Does Eudora send message immediately?
		result = get  (mailfolder[""].mailbox["In"].message[1].sender);
		<<Non Object Model way:
		result = getMessageSubject (mailfolder[""].mailbox["In"].message[1]);
		result = getSetting(25);
		result = getMessageSender (mailfolder[""].mailbox["In"].message[1])};
		<<Notice that sender is a different concept in objectModel vs non objectModel scripts
			<<getMessageSender actually returns the "From:" field, where getting the sender property of a message gets
			<<what Eudora displays in the sender column of index views.
	bundle { <<moving messages
		result = move (mailfolder[""].mailbox["in"].message[1], endOf (mailfolder[""].mailbox["trash"]));
		<<result now contains a reference to the moved message
		move (result, endOf (mailfolder[""].mailbox["In"]))}; <<move it back to the Inbox
	bundle { <<Does something exist?
		result = exists (mailfolder[""].mailbox["In"]); <<Does an inbox exist?
		result = exists (mailfolder[""].mailbox["blah"]); <<does a mailbox called blah exist?
		result = exists (mailfolder[""].mailbox["in"].message[1])}; <<Does the Inbox contain an inbox message
	bundle { <<forward a message
		local (newMsg);
		newMsg = forward (mailfolder[""].mailbox["in"].message[1]); <<forward a message, no fields can be set at this time
		result = get (newMsg.subject);
		setMessageSubject (newMsg, "Test Subject")}; <<setting of the subject by setting msg property seems to be broken in 3.0
	bundle { <<connecting
		<< connect and send Outgoing mail
		connect (sendMail:true);
		<< connect and check mail
		connect (checkMail:true)};
	bundle { <<misc
		result = duplicate (mailfolder[""].mailbox["in"].message[1], endof (mailFolder[""].mailbox["Trash"])); <<duplicate a message to the trash
		result = count (mailfolder[""].mailbox["In"], message); <<how many messages in "In" box? <<Count message in In box
		<<Won't work if you keep your signature somewhere other than the system folder...
		result = getSignature()};
	bundle { <<creating and working with a message
		local (msg);
		msg = createMessage(); <<create a new Outgoing message
		<<set (msg.subject, "Subject")
			<<Setting of message subject property doesn't seem to work in Eudora 3
			<<Using the setMessageSubject verb actually sets the "subject" field of the message.
		setMessageSubject (msg, "Subject");
		set (msg.body, "Boo!");
		<<The one step way:
		newOutgoingMessage ("", user.mailAddress, "What a subject", "Hello There")};
	bundle { <<attaching a file
		local (f, msg);
		msg = createMessage();
		file.getFileDialog ("choose file to attach", @f, 0);
		attachFiles (msg, f)};

This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.