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

Xcode 4/iOS-从我的应用程序内部使用SMTP发送电子邮件,ios,objective-c,email,frameworks,smtp,Ios,Objective C,Email,Frameworks,Smtp,我一直在寻找一个简单的框架,允许我从我的应用程序内部发送电子邮件。我试过MailCore、哑剧和SKPSMTP,但都没有成功。我不能用Xcode编译它们,所以我认为它们已经过时了。我有什么办法可以做到这一点吗?如果是,怎么做?谢谢。您可以轻松地从iOS设备发送电子邮件。无需实现SMTP和所有功能。在iOS中使用内置电子邮件功能的最好之处在于,它可以让您访问通讯簿!所以它会自动填写姓名和电子邮件地址。哎呀 包括,AddressBook,AddressBookUI和MessageUI框架和类似的代码

我一直在寻找一个简单的框架,允许我从我的应用程序内部发送电子邮件。我试过MailCore、哑剧和SKPSMTP,但都没有成功。我不能用Xcode编译它们,所以我认为它们已经过时了。我有什么办法可以做到这一点吗?如果是,怎么做?谢谢。

您可以轻松地从iOS设备发送电子邮件。无需实现SMTP和所有功能。在iOS中使用内置电子邮件功能的最好之处在于,它可以让您访问通讯簿!所以它会自动填写姓名和电子邮件地址。哎呀

包括,
AddressBook
AddressBookUI
MessageUI
框架和类似的代码。注意,您甚至可以选择以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];

快乐编码…

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

我甚至可以告诉你们这是为什么:想象一个应用程序可以在并没有你们确认的情况下将自己发送给通讯簿中的每个人,告诉他们你们刚刚安装了应用程序X,他们也应该安装。即使出于好意,这也可能很快造成一场巨大的SMTP风暴,本质上这就是“我爱你”病毒

这对公共互联网来说已经够紧张的了,但对无线运营商来说,可能很快造成足够的过载,从而阻塞cel服务

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

仍然可以在不需要UI的情况下发送电子邮件 .


确保在项目中添加对
CFNetwork.framework
的引用。否则将出现生成错误。

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


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

有一种方法可以在你的应用程序中弹出一个包含你的内容的新邮箱,但用户可以控制是否发送它。我不确定在应用程序中实现您自己的SMTP是否会得到苹果的批准。也许不会,但有很多应用程序实现了这一点,但没有?此处的上下文是酒店的预订表单。所以,如果我添加了一个发送按钮,苹果看到我没有做任何令人讨厌的事情,我看不出有任何理由会被拒绝。除非我在指南中遗漏了什么。谢谢你的输入。我已经成功编译了SKPSMTP代码。尝试将.m文件显式添加到构建阶段/编译源代码中。可能会出现重复的问题,谢谢您的详细而幽默的回答!:)这将使邮件屏幕从底部向上移动,还是在后台无声地发送?因为我的目标是后者。我明白这一点,但如果我不使用苹果内置的框架,那么我就不需要访问地址簿。一封来自电子邮件,一封来自电子邮件。但是如果这不可能,我只需要让用户填写表单,然后为他们生成电子邮件,然后按send即可。我使用了这个
SKPSMTPMessage
。但它需要对用户名和密码进行硬编码。但我想使用iPhone中已登录的电子邮件帐户发送电子邮件。我该怎么做
- (void)mailComposeController:(MFMailComposeViewController*)controller 
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]);
    [self dismissModalViewControllerAnimated:YES];
    return;
}