如何从iPhone应用程序发送邮件而不显示MFMailComposeViewController?
我想从我的自定义iPhone应用程序发送邮件。 我已经使用MFMailComposeViewController
发送邮件从我的iPhone在我以前的应用程序。 现在,我不想向用户展示MFMailComposeViewController
,如果他们点击Send Mail button
,邮件自动发送到recipient mail address
。 我怎样才能做到这一点? 你能帮我吗? 提前致谢。
我用下面的代码来显示MFMailComposeViewController,
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; controller.mailComposeDelegate = self; [controller setSubject:@"Details"]; [controller setMessageBody:@"Hi" isHTML:NO]; [controller setToRecipients:[NSArray arrayWithObjects:@"abcd.m@gmail.com", nil]]; [self presentModalViewController:controller animated:YES]; [controller release];
无需用户干预,从iphone应用程序以编程方式发送电子邮件, 无法使用任何Apple框架实现。 这可能是一个越狱的手机,但它永远不会看到App Store的内部。
如果你想控制电子邮件发送,那么更好的办法是设置一个Web服务(在你的服务器端),你可以使用HTTP请求进行发布。 如果你只发布到一个地址,这可以很好地工作,虽然你可能想让用户input他们的回复邮件地址。
否则,只有标准对话框可用(这依赖于使用他们在设备上设置的任何帐户)。
iOS SDK使用内置的API发送电子邮件变得非常简单。 使用几行代码,您可以启动与股票邮件应用程序相同的电子邮件界面,以便您撰写电子邮件。 您可以使用MFMailComposeViewController类popup邮件编辑器表单,编写邮件并发送普通邮件或附加邮件。 欲了解更多信息:从您的iOS应用程序发送电子邮件
但是,在这一节中,我要解释的是发送邮件而不显示邮件作曲者表。 在后台发送电子邮件。 对于这个function,我们不能使用iOS原生MFMailComposer类,因为它不允许我们在后台发送电子邮件,而是popup邮件编辑器视图,从用户必须点击“发送”button,所以对于本节我要使用SKPSMTPMessage库在后台发送电子邮件,但是电子邮件帐户必须在此方法上进行硬编码。
限制:
发件人/收件人的电子邮件地址必须进行硬编码,或者您必须使用应用程序中的某个popup式窗体抓取该地址,其中用户input发件人/收件人电子邮件地址。 此外,发件人帐户凭据也必须硬编码,因为我们无法从设备设置中获取它。
方法 :
- 将CFNetwork.framework导入您的项目。
- 包括#import“SKPSMTPMessage.h”#import“NSData + Base64Additions.h”//用于Base64编码
- 包含到您的ViewController
- 从中下载SKPSMTPMessage库
https://github.com/jetseven/skpsmtpmessage -
拖放已下载到项目的“SMTPLibrary”文件夹。
在继续之前,让我们知道我在这个例子的代码中使用了发送者/接收者电子邮件地址和发送者密码。但是,你可以从用户那里获取这个凭据,允许他们以某种formsinput(使用UIViews)。
-(void) sendEmailInBackground { NSLog(@"Start Sending"); SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init]; emailMessage.fromEmail = @"sender@gmail.com"; //sender email address emailMessage.toEmail = @"receiver@gmail.com"; //receiver email address emailMessage.relayHost = @"smtp.gmail.com"; //emailMessage.ccEmail =@"your cc address"; //emailMessage.bccEmail =@"your bcc address"; emailMessage.requiresAuth = YES; emailMessage.login = @"sender@gmail.com"; //sender email address emailMessage.pass = @"Passwxxxx"; //sender email password emailMessage.subject =@"@"email subject header message"; emailMessage.wantsSecure = YES; emailMessage.delegate = self; // you must include <SKPSMTPMessageDelegate> to your class NSString *messageBody = @"your email body message"; //for example : NSString *messageBody = [NSString stringWithFormat:@"Tour Name: %@\nName: %@\nEmail: %@\nContact No: %@\nAddress: %@\nNote: %@",selectedTour,nameField.text,emailField.text,foneField.text,addField.text,txtView.text]; // Now creating plain text email message NSDictionary *plainMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, messageBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; emailMessage.parts = [NSArray arrayWithObjects:plainMsg,nil]; //in addition : Logic for attaching file with email message. /* NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"JPG"]; NSData *fileData = [NSData dataWithContentsOfFile:filePath]; NSDictionary *fileMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx- unix-mode=0644;\r\n\tname=\"filename.JPG\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"filename.JPG\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; emailMessage.parts = [NSArray arrayWithObjects:plainMsg,fileMsg,nil]; //including plain msg and attached file msg */ [emailMessage send]; // sending email- will take little time to send so its better to use indicator with message showing sending... }
现在,处理委托方法:
//成功
-(void)messageSent:(SKPSMTPMessage *)message{ NSLog(@"delegate - message sent"); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message sent." message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show]; }
//失败
-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{ // open an alert with just an OK button UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show]; NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]); }
好的,那从编码方面来说。 希望本教程可能会对你有帮助guyz