[MacRuby-devel] Basic delayed email method

Steve Clarke steve at sclarkes.me.uk
Tue Oct 23 09:13:54 PDT 2012


Hi Cliff,

I guess the answer may be that I didn't get it working in Macruby, as I ended up coding the relevant bit in Objective C!  My recollection was that I used Objective C so that I could write a framework that could be used from the system ruby rather than just macruby.  Maybe I also ended up using Objective C because I, like you, simply couldn't get it working in Macruby.

Unless anyone has a better idea you could maybe try using my applescript workround to create an outgoing message that you could then manipulate with ruby. Since there's no way to return directly the object that's created in applescript you may need to resort to saving the outgoing message within the script and then hopefully locating the saved message in your ruby code.  All very messy!  

I will however spend a few minutes trying to create a plain text message in Macruby.  I'll let you know if I'm successful.

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/09d25af8/attachment-0001.html>


More information about the MacRuby-devel mailing list