我想从我的自定义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:@"[email protected]", nil]];
[self presentModalViewController:controller animated:YES];
[controller release];
- 2021-1-101 #
- 2021-1-102 #
iOS SDK使得使用内置电子邮件发送电子邮件变得非常容易 蜜蜂.使用几行代码,您可以启动与库存邮件应用程序相同的电子邮件界面,以编写电子邮件.您可以使用MFMailComposeViewController类弹出邮件编写器表格,编写邮件并可以发送普通邮件或文件附件邮件.有关更多信息:从您的iOS应用发送电子邮件
但是,在这一部分中,我将要解释的是关于发送电子邮件而不显示邮件编辑器表的信息.在后台发送电子邮件.对于此功能,我们不能使用iOS本机MFMailComposer类,因为它不允许我们在后台发送电子邮件,而是从用户必须点击"发送"按钮的地方弹出邮件编辑器视图,因此在本节中,我将 使用SKPSMTPMessage库在后台发送电子邮件,但是必须使用此方法对电子邮件帐户进行硬编码。
限制:
发件人/收件人电子邮件地址必须经过硬编码,否则您必须使用应用程序中的一些弹出式表格来抓取它,用户可以在其中输入发件人/收件人电子邮件地址.此外,发件人帐户凭据也必须进行硬编码,因为我们无法从设备设置中获取它。
方法:
将CFNetwork.framework导入到您的项目中。
包含#import" SKPSMTPMessage.h" #import" NSData + Base64Additions.h" //用于Base64编码
包含在您的ViewController中
从
下载SKPSMTPMessage库 https://github.com/jetseven/skpsmtpmessage拖放已下载到项目中的" SMTPLibrary"文件夹。
在继续之前,让您知道我正在使用在此示例代码中硬编码的发送者/接收者电子邮件地址和发送者密码。但是,您可以从用户那里获取此凭据,从而允许他们以某种形式输入(使用 UIViews)。
-(void) sendEmailInBackground { NSLog(@"Start Sending"); SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init]; emailMessage.fromEmail = @"[email protected]"; //sender email address emailMessage.toEmail = @"[email protected]"; //receiver email address emailMessage.relayHost = @"smtp.gmail.com"; //emailMessage.ccEmail [email protected]"your cc address"; //emailMessage.bccEmail [email protected]"your bcc address"; emailMessage.requiresAuth = YES; emailMessage.login = @"[email protected]"; //sender email address emailMessage.pass = @"Passwxxxx"; //sender email password emailMessage.subject [email protected]"@"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]); }
好的,从编码端开始就可以了.希望本教程对您有用吗
相关问题
- iphone:如何在iOS的MKAnnotation中添加更多详细信息iphoneobjectiveciosmkannotation2021-01-12 01:29
- objective c:在iPhone上查找已安装应用的列表iphoneobjectivecios2021-01-11 06:27
- objective c:确定iPhone是否以编程方式被越狱iphoneobjectivecioscocoatouchjailbreak2021-01-10 05:58
- iphone:如何排序包含NSDictionaries的NSArray?iphoneobjectiveciosnsarraynsdictionary2021-01-10 21:25
- objective c:仅限某些iOS目标设备进行App Store提交iosobjectiveciphoneappstore2021-01-11 03:24
以编程方式从iPhone应用程序 cannot发送电子邮件,而无需用户干预 可使用任何Apple框架实施.在越狱的手机中可能会出现这种情况,但随后它将永远看不到App Store的内部.
如果您想控制电子邮件的发送,那么更好的方法是在您的服务器端设置一个web服务,您可以使用HTTP请求发布该服务.如果您只发布到一个地址,则可以很好地工作,尽管您可能希望让用户输入他们的回信地址。
否则,只有标准对话框可用(这取决于使用他们在设备上设置的任何帐户)。