[MacRuby-devel] Basic delayed email method

Steve Clarke steve at sclarkes.me.uk
Tue Oct 23 09:49:43 PDT 2012


Hi Cliff,

I've got something simple to work in Macruby.  I think the problems I had were because of html content.

Here's an example for plain text:

=================
framework 'Foundation'
framework 'ScriptingBridge'
TITLE="title"
def make_message
	app=SBApplication.applicationWithBundleIdentifier("com.apple.Mail")
	props = { 'subject'=> 'Subject 1', 'sender'=>'steve at sclarkes.me.uk', 'content'=>'Lorem ipsum ....'}
	msg_class = app.classForScriptingClass('outgoing message')
	outgoing_msg=msg_class.alloc.initWithProperties(props)
	app.outgoingMessages.addObject(outgoing_msg)
	recip_class=app.classForScriptingClass('to recipient')
	recipient=recip_class.alloc.initWithProperties({'address'=>'steve at sclarkes.me.uk'})
	outgoing_msg.toRecipients.addObject(recipient)
	outgoing_msg.send
end

make_message
=================

Steve

On 23 Oct 2012, at 16:51, Cliff Rosson <cliff.rosson at gmail.com> wrote:

> Steve how did you get it working with the plain text. Below is the code I think that is relevant in the SBS program.
> 
> - (IBAction)sendEmailMessage:(id)sender {
> /* create a Scripting Bridge object for talking to the Mail application */
> MailApplication *mail = [SBApplication applicationWithBundleIdentifier:@"com.apple.Mail"];
>     
>         /* set ourself as the delegate to receive any errors */
>     mail.delegate = self;
> /* create a new outgoing message object */
> MailOutgoingMessage *emailMessage = [[[mail classForScriptingClass:@"outgoing message"] alloc] initWithProperties:
>                                                 [NSDictionary dictionaryWithObjectsAndKeys:
>                                                     [self.subjectField stringValue], @"subject",
>                                                     [[self.messageContent textStorage] string], @"content",
>                                                     nil]];
> /* add the object to the mail app  */
> [[mail outgoingMessages] addObject: emailMessage];
> /* set the sender, show the message */
> emailMessage.sender = [self.fromField stringValue];
> emailMessage.visible = YES;
> 
> 
> Though it is not clear how this would translates over into macruby. I have tried ever variation of MailOutgoingMessage.new and addObject. 
> 
> 
> On Tue, Oct 23, 2012 at 8:45 AM, Steve Clarke <steve at sclarkes.me.uk> wrote:
> Hi,
> 
> I got something similar working for a plain text email but there are additional requirements for HTML emails (which I needed), and I couldn't persuade SB to accept  html content.  I should have made that clear in my previous note.  If anyone has an example for HTML email with SB it would be great to see it.
> 
> Just taken a closer look at the scripting dictionary for mail and it looks like the "html content" property isn't documented - so who knows how I found it in the first place!  I just checked it out and it still works but obviously can't be relied on.  
> 
> Apologies for the red herring.  It looks as if there is no supported way to send html email using ScriptingBridge.
> 
> Steve
> 
> On 23 Oct 2012, at 15:52, Mark Rada <mrada at marketcircle.com> wrote:
> 
>> Hi Cliff,
>> 
>> Did you manage to find the SBSendEmail sample code:
>> 
>> https://developer.apple.com/library/mac/#samplecode/SBSendEmail/Introduction/Intro.html
>> 
>> The sample they have looks a bit different from what you have. I haven't tried it out myself, but their documentation seems quite thorough and was updated only a year ago.
>> 
>> 
>> 
>> 
>> 
>> On 2012-10-23, at 5:28 AM, Steve Clarke <steve at sclarkes.me.uk> wrote:
>> 
>>> Just had a closer look at what I did with sending mail and I think my earlier reply was probably  wrong, or at least not helpful.  I think the difficulty arises because there are some things that ScriptingBridge is unable to do.  I could not find a way to create an outgoing message with ScriptingBridge and I had to resort to running a trivial applescript (using NSAppleScript executeAndReturnError)  to do the job for me.  If anyone knows a better way I'd be delighted to hear about it! 
>>> 
>>> I created the applescript from a template that I modified in my code before I executed it.  I guess Cliff could adopt a similar approach to copy subject, content etc from his draft.
>>> 
>>> Here's the template.  The %HTML% and %SUBJECT% are placeholders that get replaced by the actual values before execution.
>>> 
>>> =========================
>>> tell application "Mail"
>>> 	activate
>>> 	set htmlMsg to "%HTML%"
>>> 	set subjecta to "%SUBJECT%"
>>> 	set theMsg to make new outgoing message with properties ¬
>>> 		{subject:subjecta, html content:htmlMsg & return & return, content:""}
>>> end tell
>>> =========================
>>> 
>>> Steve
>>> 
>>> On 23 Oct 2012, at 07:06, Cliff Rosson <cliff.rosson at gmail.com> wrote:
>>> 
>>>> So playing around a little with this I was able to browse and find messages via macruby. On the other hand I cannot figure out how to send a drafted email. Here is what I have so far.
>>>> 
>>>> My drafts folder has 1 message in it ready to be sent.
>>>> 
>>>> mail = SBApplication.applicationWithBundleIdentifier("com.apple.mail")
>>>> my_account = mail.accounts.select { |account| account.name == "MyAccountName" }.first
>>>> drafts_folder = my_account.mailboxes.select { |mailbox| mailbox.name == "Drafts" }.first
>>>> draft = drafts_folder.messages.first
>>>> 
>>>> I need to use the send method somehow. I think I need to make a new MailOutgoingMessage but I would like to make this message based on my already existing draft message.
>>>> 
>>>> Any know how this is done?
>>>> 
>>>> I had hoped it would have been as simple as draft.send. :)
>>>> 
>>>> 
>>>> On Sat, Oct 20, 2012 at 2:14 PM, Mark Rada <mrada at marketcircle.com> wrote:
>>>> Hi Rob,
>>>> 
>>>> I think Colin answered this fairly well. Personally, I prefer to use GCD when available because I find the API simpler and GCD stuff works with or without run loops.
>>>> 
>>>> --
>>>>         Mark
>>>> 
>>>> 
>>>> On 2012-10-20, at 2:40 PM, Robert Carl Rice <rice.audio at pobox.com> wrote:
>>>> 
>>>> > Hi Mark,
>>>> >
>>>> > I use NSTimer a lot in my apps. What is the advantage of using GCD API?
>>>> >
>>>> > There is an excellent tutorial on the web for specifically for setting up ScriptingBridge for Apple Mail but I forget where I saw it. On warning; if you set up ScriptingBridge for Apple Mail don't try to take a snapshot in Xcode 4. Xcode will follow the link to mail and include all of your mailboxes in the snapshot. I don't know if there is a way to stop this behavior.
>>>> >
>>>> > Bob Rice
>>>> >
>>>> > On Oct 19, 2012, at 6:50 PM, Mark Rada <mrada at marketcircle.com> wrote:
>>>> >
>>>> >> Busy looping for an hour would be really bad. I assume you would have a sleep in there, but then you're still polling.
>>>> >>
>>>> >> If you are using MacRuby, looking at the GCD API would be a good idea. You could do something like this:
>>>> >>
>>>> >> def schedule_email q
>>>> >>   q.after(3600) do
>>>> >>       # Send email
>>>> >>       schedule_email q
>>>> >>   end
>>>> >> end
>>>> >>
>>>> >> schedule_email Dispatch::Queue.new("com.rosson.delayed.email")
>>>> >>
>>>> >> NSRunLoop.currentRunLoop.run
>>>> >>
>>>> >>
>>>> >>
>>>> >> As for actually sending emails, if you want to have things go through Apple Mail you could use the ScriptingBridge framework which has a few tutorials online (but for iTunes):
>>>> >>
>>>> >> http://arstechnica.com/apple/2011/09/tutorial-os-x-automation-with-macruby-and-the-scripting-bridge/
>>>> >>
>>>> >> AXElements is another option that I am biased in favour of; but it may not be passive enough for your requirements.
>>>> >>
>>>> >> HTH,
>>>> >>      Mark
>>>> >>
>>>> >>
>>>> >> On 2012-10-19, at 6:12 PM, Cliff Rosson <cliff.rosson at gmail.com> wrote:
>>>> >>
>>>> >>> Hi Everyone,
>>>> >>>
>>>> >>> I am fairly new to macruby and am having trouble finding some basic documentation to help me out. I would like to write a simple app that sends a delayed email based on Time from mac mail.
>>>> >>>
>>>> >>> I am thinking of something like this,
>>>> >>>
>>>> >>> time = Time.now + 3600
>>>> >>> while true
>>>> >>> case time
>>>> >>> when Time.now
>>>> >>>   #Send email
>>>> >>> end
>>>> >>> end
>>>> >>>
>>>> >>> Being able to respond to certain emails or send an email from a draft would be a huge benefit. Can anyone point me in the write direction to accomplish this? I am decently proficient in ruby but don't know where to start with MacRuby.
>>>> >>>
>>>> >>> Thanks everyone
>>>> >>>
>>>> >>> _______________________________________________
>>>> >>> MacRuby-devel mailing list
>>>> >>> MacRuby-devel at lists.macosforge.org
>>>> >>> http://lists.macosforge.org/mailman/listinfo/macruby-devel
>>>> >>
>>>> >> _______________________________________________
>>>> >> MacRuby-devel mailing list
>>>> >> MacRuby-devel at lists.macosforge.org
>>>> >> http://lists.macosforge.org/mailman/listinfo/macruby-devel
>>>> >>
>>>> >
>>>> > _______________________________________________
>>>> > MacRuby-devel mailing list
>>>> > MacRuby-devel at lists.macosforge.org
>>>> > http://lists.macosforge.org/mailman/listinfo/macruby-devel
>>>> 
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> MacRuby-devel at lists.macosforge.org
>>>> http://lists.macosforge.org/mailman/listinfo/macruby-devel
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> http://about.me/cliffrosson
>>>> vizualize.me/cliffrosson
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> MacRuby-devel at lists.macosforge.org
>>>> http://lists.macosforge.org/mailman/listinfo/macruby-devel
>>> 
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel at lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo/macruby-devel
> 
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo/macruby-devel
> 
> 
> 
> 
> -- 
> http://about.me/cliffrosson
> vizualize.me/cliffrosson
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo/macruby-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20121023/77a07813/attachment-0001.html>


More information about the MacRuby-devel mailing list