Controller.m
/* |
File: Controller.m |
Abstract: Main controller for the SBSendEmail sample. |
Version: 1.1 |
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple |
Inc. ("Apple") in consideration of your agreement to the following |
terms, and your use, installation, modification or redistribution of |
this Apple software constitutes acceptance of these terms. If you do |
not agree with these terms, please do not use, install, modify or |
redistribute this Apple software. |
In consideration of your agreement to abide by the following terms, and |
subject to these terms, Apple grants you a personal, non-exclusive |
license, under Apple's copyrights in this original Apple software (the |
"Apple Software"), to use, reproduce, modify and redistribute the Apple |
Software, with or without modifications, in source and/or binary forms; |
provided that if you redistribute the Apple Software in its entirety and |
without modifications, you must retain this notice and the following |
text and disclaimers in all such redistributions of the Apple Software. |
Neither the name, trademarks, service marks or logos of Apple Inc. may |
be used to endorse or promote products derived from the Apple Software |
without specific prior written permission from Apple. Except as |
expressly stated in this notice, no other rights or licenses, express or |
implied, are granted by Apple herein, including but not limited to any |
patent rights that may be infringed by your derivative works or by other |
works in which the Apple Software may be incorporated. |
The Apple Software is provided by Apple on an "AS IS" basis. APPLE |
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION |
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS |
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND |
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. |
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL |
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, |
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED |
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), |
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGE. |
Copyright (C) 2011 Apple Inc. All Rights Reserved. |
*/ |
#import <CoreServices/CoreServices.h> |
#import "Controller.h" |
#import "Mail.h" |
@interface Controller (delegate) <SBApplicationDelegate> |
@end |
@implementation Controller |
@synthesize toField, fromField, subjectField, messageContent, fileAttachmentField; |
- (void)awakeFromNib { |
[self.messageContent setFont:[NSFont fontWithName:@"Courier" size:12]]; |
} |
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { |
return YES; |
} |
/* Part of the SBApplicationDelegate protocol. Called when an error occurs in |
Scripting Bridge method. */ |
- (id)eventDidFail:(const AppleEvent *)event withError:(NSError *)error |
{ |
[[NSAlert alertWithMessageText:@"Error" defaultButton:@"OK" alternateButton:nil otherButton:nil |
informativeTextWithFormat: @"%@", [error localizedDescription]] runModal]; |
return nil; |
} |
- (IBAction)chooseFileAttachment:(id)sender { |
NSOpenPanel *op = [NSOpenPanel openPanel]; |
/* allow directories */ |
[op setCanChooseDirectories:YES]; |
/* single file selections */ |
[op setAllowsMultipleSelection:NO]; |
[op setCanChooseFiles: YES]; |
[op setAllowedFileTypes:[NSArray arrayWithObjects: @"gif", @"jpg", @"pdf", @"png", @"rtf", @"txt", @"zip", nil]]; |
/* run the open panel */ |
NSInteger openResult = [op runModal]; |
/* save the selection, if a file/directory was chosen */ |
if ( NSOKButton == openResult ) { |
[self.fileAttachmentField setStringValue: [[op URLs] objectAtIndex:0]]; |
} |
} |
- (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; |
/* Test for errors */ |
if ( [mail lastError] != nil ) |
return; |
/* create a new recipient and add it to the recipients list */ |
MailToRecipient *theRecipient = [[[mail classForScriptingClass:@"to recipient"] alloc] initWithProperties: |
[NSDictionary dictionaryWithObjectsAndKeys: |
[self.toField stringValue], @"address", |
nil]]; |
[emailMessage.toRecipients addObject: theRecipient]; |
[theRecipient release]; |
/* Test for errors */ |
if ( [mail lastError] != nil ) |
return; |
/* add an attachment, if one was specified */ |
NSString *attachmentFilePath = [self.fileAttachmentField stringValue]; |
if ( [attachmentFilePath length] > 0 ) { |
MailAttachment *theAttachment; |
/* In Snow Leopard, the fileName property requires an NSString representing the path to the |
* attachment. In Lion, the property has been changed to require an NSURL. */ |
SInt32 osxMinorVersion; |
Gestalt(gestaltSystemVersionMinor, &osxMinorVersion); |
/* create an attachment object */ |
if ( osxMinorVersion >= 7 ) |
theAttachment = [[[mail classForScriptingClass:@"attachment"] alloc] initWithProperties: |
[NSDictionary dictionaryWithObjectsAndKeys: |
[NSURL URLWithString:attachmentFilePath], @"fileName", |
nil]]; |
else |
/* The string we read from the text field is a URL so we must create an NSURL instance with it |
* and retrieve the old style file path from the NSURL instance. */ |
theAttachment = [[[mail classForScriptingClass:@"attachment"] alloc] initWithProperties: |
[NSDictionary dictionaryWithObjectsAndKeys: |
[[NSURL URLWithString:attachmentFilePath] path], @"fileName", |
nil]]; |
/* add it to the list of attachments */ |
[[emailMessage.content attachments] addObject: theAttachment]; |
[theAttachment release]; |
/* Test for errors */ |
if ( [mail lastError] != nil ) |
return; |
} |
/* send the message */ |
[emailMessage send]; |
[emailMessage release]; |
} |
@end |
Copyright © 2011 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2011-08-05