距離上一次發(fā)表文章時(shí)煤惩,說不清有多久了嫉嘀。
不多說,先上主題魄揉,因?yàn)轫?xiàng)目有發(fā)郵件的需求剪侮,因而需要跳往原生的郵件app來發(fā)送郵件。在網(wǎng)上搜索到有3種方法洛退,其中有兩種是原生方法瓣俯,另外一種為第三方方法,但原生方法中都各有裨益兵怯,現(xiàn)在列出下面3種方法彩匕,以及它們的優(yōu)劣勢。
1媒区、使用openURL發(fā)送郵件
// 主題
NSString *subject = @"Message subject";
// 郵件內(nèi)容
// NSString *body = @"Message body";
// 收件人
NSString *address = @"test1@akosma.com";
// 抄送
NSString *cc = @"test2@akosma.com";
NSString *path = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@", address, cc, subject];
NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
總結(jié):此方法的優(yōu)勢在于無論用戶是否已經(jīng)登錄郵箱驼仪,都會(huì)跳往郵件app讓用戶先登錄,再發(fā)送郵件袜漩;而劣勢就是已經(jīng)打開的app會(huì)處于后臺(tái)绪爸,需要用戶再次進(jìn)入。
2宙攻、使用MFMailComposeViewController發(fā)送郵件
使用前注意:
1)項(xiàng)目需要導(dǎo)入框架:MessageUI.framework
2)使用的Controlelr里導(dǎo)入頭文件:#import <MessageUI/MessageUI.h>
// 郵件服務(wù)器
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 設(shè)置郵件代理
[mailCompose setMailComposeDelegate:self];
// 設(shè)置郵件主題
[mailCompose setSubject:@"我是郵件主題"];
// 設(shè)置收件人
[mailCompose setToRecipients:@[@"郵箱號(hào)碼"]];
// 設(shè)置抄送人
[mailCompose setCcRecipients:@[@"郵箱號(hào)碼"]];
// 設(shè)置密抄送
[mailCompose setBccRecipients:@[@"郵箱號(hào)碼"]];
/**
* 設(shè)置郵件的正文內(nèi)容
*/
NSString *emailContent = @"我是郵件內(nèi)容";
// 是否為HTML格式
[mailCompose setMessageBody:emailContent isHTML:NO];
// 如使用HTML格式毡泻,則為以下代碼
// [mailCompose setMessageBody:@"<html><body><p>Hello</p><p>World!</p></body></html>" isHTML:YES];
/**
* 添加附件
*/
UIImage *image = [UIImage imageNamed:@"image"];
NSData *imageData = UIImagePNGRepresentation(image);
[mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"custom.png"];
NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"瞬間學(xué)會(huì)發(fā)送郵件"];
// 彈出郵件發(fā)送視圖
[self presentViewController:mailCompose animated:YES completion:nil];
在發(fā)送之前需要驗(yàn)證用戶是否已經(jīng)登錄
if ([MFMailComposeViewController canSendMail]) { // 用戶已設(shè)置郵件賬戶
[self sendEmailAction]; // 調(diào)用發(fā)送郵件的代碼
}
// MFMailComposeViewControllerDelegate的代理方法:
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled: // 用戶取消編輯
NSLog(@"Mail send canceled...");
break;
case MFMailComposeResultSaved: // 用戶保存郵件
NSLog(@"Mail saved...");
break;
case MFMailComposeResultSent: // 用戶點(diǎn)擊發(fā)送
NSLog(@"Mail sent...");
break;
case MFMailComposeResultFailed: // 用戶嘗試保存或發(fā)送郵件失敗
NSLog(@"Mail send errored: %@...", [error localizedDescription]);
break;
}
// 關(guān)閉郵件發(fā)送視圖
[self dismissViewControllerAnimated:YES completion:nil];
}
總結(jié):優(yōu)勢在于發(fā)郵件時(shí)以模態(tài)窗口打開頁面以供用戶發(fā)送粘优,劣勢在于需要用戶先在郵件app中登錄仇味,才能發(fā)郵件,否則不可以打開此發(fā)送頁面
3雹顺、使用第三方庫SKPSMTPMessage發(fā)送郵件
具體參考SKPSMTPMessage第三方庫
另外這里涉及到了跳往系統(tǒng)app丹墨,所需要用到的方法是openUrl;比如說
ps:
// 跳往safri
NSString *stringURL = @"http://wiki.akosma.com/";
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
// 跳轉(zhuǎn)至appstore
// NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294409923&mt=8";
NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware";
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];