Xcode 4 / iOS – 从我的应用程序内使用SMTP发送电子邮件

我一直在寻找一个框架,只是让我从我的应用程序内发送电子邮件。 我已经试过MailCore,Pantomime和SKPSMTP都没有运气。 我无法让他们在Xcode编译,所以我推测他们已经过时了。 有什么办法可以做到这一点? 如果是这样,怎么样? 谢谢。

您可以轻松地从iOS设备发送电子邮件。 无需实施SMTP和所有。 关于在iOS中使用内置电子邮件设施的最好的事情是它可以让您访问通讯簿! 所以它会自动完成名称,电子邮件地址。 Yaaiiii!

包括, AddressBookAddressBookUIMessageUI框架和代码就像这样。 请注意,您甚至可以select以HTML格式发送内容!

 #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]; 

为了完整起见,我必须编写这个select器来closures电子邮件窗口,如果用户按下cancelsend

 - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]); [self dismissModalViewControllerAnimated:YES]; return; } 

快乐编码…

应该注意的是, MFMailComposeViewController有一个名为canSendMail的方法。 如果您在没有电子邮件帐户的设备上提交MFMailComposeViewController之前没有检查,您将得到一个SIGABRT。

在设备或模拟器上进行testing时很容易忽略这一点,因为您可能在Mac和iPad上有一个电子邮件帐户。

SKPSMTPMessage仍然可以正常发送电子邮件,而不需要用户界面。

确保在项目中添加对CFNetwork.framework的引用。 否则,你会得到构build错误。

我可以想象苹果认可的方式是通过HTTP Post将数据发送到服务器,并让服务器为您生成邮件。 我见过其他人问这个问题类似的问题,答案是,如果你从设备发送它,你真的需要提示用户。

我甚至可以告诉你为什么这么做:设想一个应用程序可以将自己发送给地址簿中的每个人,而不需要你的确认,告诉他们你刚刚安装了应用程序X,而且他们也应该这样做。 即使是好心的,这可能会很快造成一个巨大的SMTP风暴,实质上这将是“我爱你”的病毒。

这在公共互联网上已经足够了,但是在无线运营商中,可能会很快造成足够的过载来阻塞蜂窝服务。

结论:使用@Srikarbuild议的ComposeViewController,或者将数据发布到您的服务器,并从那里发送。