国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

iOS開(kāi)發(fā)-發(fā)送郵件(E-mail)方法整理合集(共3種)

2019-11-14 19:42:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言:在IOS開(kāi)發(fā)中,有時(shí)候我們會(huì)需要用到郵件發(fā)送的功能。比如,接收用戶反饋和程序崩潰通知等等。其實(shí)這個(gè)功能是很常用的,因?yàn)槲夷壳熬陀邪l(fā)送郵件的開(kāi)發(fā)需求,所以順便整理下IOS發(fā)送郵件的方法。

 

IOS原生自帶有兩種方法發(fā)送郵件的方法,另一種是使用第三方庫(kù):

1)openURL(原生)

    ——用戶體驗(yàn)較差,程序會(huì)進(jìn)入后臺(tái),跳轉(zhuǎn)至郵件發(fā)送界面。

2)MFMailComposeViewController(原生)

    ——不會(huì)進(jìn)入后臺(tái),使用模態(tài)彈出郵件發(fā)送視圖。

3)SKPSMTPMessage(https://github.com/jetseven/skpsmtpmessage

    ——你可以不需要告知用戶將要進(jìn)行郵件發(fā)送的事情,我在想這個(gè)是不是不符合蘋(píng)果的理論。當(dāng)然你也可以在發(fā)送之前弄個(gè)彈出框告知用戶,并讓用戶選擇是否發(fā)送。

 

以下代碼均在真機(jī)(IOS8.0)進(jìn)行測(cè)試,并通過(guò)測(cè)試。

 

一、使用openURL發(fā)送郵件:

創(chuàng)建可變的地址字符串對(duì)象:

NSMutableString *mailUrl = [[NSMutableString alloc] init];

 

添加收件人:

NSArray *toRecipients = @[@"寫(xiě)你們自己的郵箱測(cè)試@QQ.com"];// 注意:如有多個(gè)收件人,可以使用componentsJoinedByString方法連接,連接符為@","[mailUrl appendFormat:@"mailto:%@", toRecipients[0]];

 

添加抄送人:

NSArray *ccRecipients = @[@"1229436624@qq.com"];[mailUrl appendFormat:@"?cc=%@", ccRecipients[0]];

 

添加密送人:

NSArray *bccRecipients = @[@"shana_happy@126.com"];[mailUrl appendFormat:@"&bcc=%@", bccRecipients[0]];

 

添加郵件主題和郵件內(nèi)容:

[mailUrl appendString:@"&subject=my email"];[mailUrl appendString:@"&body=<b>Hello</b> World!"];

注意:如果你沒(méi)添加抄送或密送,主題需要設(shè)為 ?subject=my email,不然郵件會(huì)沒(méi)有主題。

mailto的用法,例:<a href="mailto:sample@163.com?subject=test&cc=sample@hotmail.com&body=use mailto sample">send mail</a>

詳情可以自行去查看語(yǔ)法,謝謝。

 

打開(kāi)地址,這里會(huì)跳轉(zhuǎn)至郵件發(fā)送界面:

NSString *emailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];[[UIapplication sharedApplication] openURL:[NSURL URLWithString:emailPath]];

 

效果圖: 

二、使用MFMailComposeViewController發(fā)送郵件

使用前注意:

1)項(xiàng)目需要導(dǎo)入框架:MessageUI.framework

2)使用的Controlelr里導(dǎo)入頭文件:#import <MessageUI/MessageUI.h>

 

獲取用戶是否設(shè)置了郵件賬戶:

if ([MFMailComposeViewController canSendMail]) { // 用戶已設(shè)置郵件賬戶    [self sendEmailAction]; // 調(diào)用發(fā)送郵件的代碼}

 

sendEmailAction方法代碼:

- (void)sendEmailAction{    // 郵件服務(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:@"7天精通IOS233333"];        // 彈出郵件發(fā)送視圖    [self presentViewController:mailCompose animated:YES completion:nil];}

 

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

 

程序運(yùn)行效果圖:

在IOS的郵件發(fā)送里,附件會(huì)直接顯示在正文的下方,但是不要誤認(rèn)為是圖片放在了正文當(dāng)中,兩者是有區(qū)別的!

 

三、 使用第三方庫(kù)SKPSMTPMessage發(fā)送郵件 

使用前注意:

1)下載第三方庫(kù)(下載地址文章開(kāi)頭)

2)導(dǎo)入類(lèi)#import "SKPSMTPMessage.h"、#import "NSData+Base64Additions.h"

 

設(shè)置基本參數(shù):

SKPSMTPMessage *mail = [[SKPSMTPMessage alloc] init];[mail setSubject:@"我是主題"];  // 設(shè)置郵件主題[mail setToEmail:@"填你們自己的@qq.com"]; // 目標(biāo)郵箱[mail setFromEmail:@"填你們自己的@qq.com"]; // 發(fā)送者郵箱[mail setRelayHost:@"smtp.qq.com"]; // 發(fā)送郵件代理服務(wù)器[mail setRequiresAuth:YES];[mail setLogin:@"填你們自己的@qq.com"]; // 發(fā)送者郵箱賬號(hào)[mail setPass:@"填你們自己的"]; // 發(fā)送者郵箱密碼[mail setWantsSecure:YES];  // 需要加密[mail setDelegate:self];

 

設(shè)置郵件正文內(nèi)容:

NSString *content = [NSString stringWithCString:"測(cè)試內(nèi)容" encoding:NSUTF8StringEncoding];NSDictionary *plainPart = @{kSKPSMTPPartContentTypeKey : @"text/plain", kSKPSMTPPartMessageKey : content, kSKPSMTPPartContentTransferEncodingKey : @"8bit"};

 

添加附件(以下代碼可在SKPSMTPMessage庫(kù)的DMEO里找到):

NSString *vcfPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"vcf"];NSData *vcfData = [NSData dataWithContentsOfFile:vcfPath];NSDictionary *vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;/r/n/tx-unix-mode=0644;/r/n/tname=/"test.vcf/"",kSKPSMTPPartContentTypeKey,                         @"attachment;/r/n/tfilename=/"test.vcf/"",kSKPSMTPPartContentDispositionKey,[vcfData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];

 

執(zhí)行發(fā)送郵件代碼:

[mail setParts:@[plainPart, vcfPart]]; // 郵件首部字段、郵件內(nèi)容格式和傳輸編碼[mail send];

 

SKPSMTPMessage代理,可以獲知成功/失敗進(jìn)行后續(xù)步驟處理:

- (void)messageSent:(SKPSMTPMessage *)message{    NSLog(@"%@", message);}- (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{    NSLog(@"message - %@/nerror - %@", message, error);}

 

效果圖:

什么效果圖?沒(méi)有效果圖,只因任性。

這里采取的是不通知用戶發(fā)送郵件,所以沒(méi)效果圖。

 

小結(jié):本來(lái)第三方庫(kù)那個(gè)我是不想寫(xiě)出來(lái)的,因?yàn)榭偢杏X(jué)不安全,不要問(wèn)我為什么,男人的直覺(jué)?其實(shí)是代碼太難看懂了,可能是我技術(shù)太菜了。

 

本篇文章借鑒了:

http://blog.sina.com.cn/s/blog_7d280d7c0101da7d.html

http://m.survivalescaperooms.com/zhuqil/archive/2011/07/21/2112816.html

http://blog.csdn.net/zhibudefeng/article/details/7677421

 

 

 


博文作者:GarveyCalvin

博文出處:http://m.survivalescaperooms.com/GarveyCalvin/

本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但須保留此段聲明,并給出原文鏈接,謝謝合作!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 芜湖市| 浮山县| 西峡县| 金门县| 大埔县| 如皋市| 饶阳县| 万年县| 文昌市| 思茅市| 云林县| 密云县| 凉城县| 综艺| 中卫市| 凤城市| 桓仁| 龙井市| 枣庄市| 永嘉县| 镇平县| 黔西县| 廉江市| 胶州市| 资溪县| 兴仁县| 博爱县| 乐安县| 鸡西市| 互助| 内丘县| 玉屏| 凌云县| 伊吾县| 噶尔县| 获嘉县| 隆尧县| 太仆寺旗| 常德市| 石棉县| 石河子市|