Xcode 4 / iOS - Send an email using SMTP from inside my app
I've been looking around for a framework to simply allow me to send an email from inside my app. I have tried MailCore, Pantomime and SKPSMTP all with no luck. I can't get them to compile in Xcode, so I presumed they were outda开发者_如何学Pythonted. Is there any way I can do this? If so, how? Thanks.
You can easily send emails from your iOS device. No need to implement SMTP and all. Best thing about using inbuilt emailing facilities in iOS is it gives you access to the address book! So it auto-completes names, email addresses. Yaaiiii!!
Include, AddressBook
,AddressBookUI
and MessageUI
frameworks and code something like this. Note you can even choose to send content as HTML too!
#import <MessageUI/MessageUI.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
MFMailComposeViewController *mailComposer;
mailComposer = [[MFMailComposeViewController alloc] init];
mailComposer.mailComposeDelegate = self;
[mailComposer setModalPresentationStyle:UIModalPresentationFormSheet];
[mailComposer setSubject:@"your custom subject"];
[mailComposer setMessageBody:@"your custom body content" isHTML:NO];
[self presentModalViewController:mailComposer animated:YES];
[mailComposer release];
For the sake of completeness, I have to write this selector to dismiss the email window if the user presses cancel
or send
-
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error
{
if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]);
[self dismissModalViewControllerAnimated:YES];
return;
}
Happy coding...
It should be noted that MFMailComposeViewController
has a method called canSendMail. If you don't check this before presenting a MFMailComposeViewController
on a device that doesn't have an email account, you'll get a SIGABRT.
It's easy to miss this when testing on the device or the simulator since you'll probably have an email account on your Mac and your iPad.
SKPSMTPMessage still works fine for sending emails without the need for a UI .
Make sure you add a reference to the CFNetwork.framework
in your project. Otherwise you will get build errors.
I would imagine the Apple Approved way of doing this would be to send the data to a server via HTTP Post, and have the server generate the mail for you. I've seen others asking similar questions to this, and the answer is that if you send it from the device, you really need to prompt the user.
I can even tell you why this is: Imagine an application that could send itself to everyone in your address book without the your confirmation, telling them that you just installed application X, and they should too. Even if well intentioned, this could quickly create a huge SMTP storm, and in essence this would be the "I love you" virus.
That was enough of a strain on the public internet, but on wireless carriers, could quickly cause enough overload to block cel service.
Conclusion: Either use the ComposeViewController as @Srikar suggests, or else POST the data to your server, and send it from there.
精彩评论