iOS開發——郵件發送第三方SKPSMTPMessage


SKPSMTPMessage 完全不依賴於iOS系統內置的發送郵件程序,可內置於你的應用實現后台發送郵件目的。

下載第三庫時導入文件會報錯,因為它是支持非ARC的,所以現在要導入我們的工程支持ARC,只需要在中把要導入的文件添加-fno-objc-arc就可以運行了,下面我們進入正題,怎么操作實現郵件發送。

2)導入類#import "SKPSMTPMessage.h"、#import "NSData+Base64Additions.h"

設置基本參數:

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

設置郵件正文內容:

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

添加附件(以下代碼可在SKPSMTPMessage庫的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];

執行發送郵件代碼:

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

SKPSMTPMessage代理,可以獲知成功/失敗進行后續步驟處理:

- (void)messageSent:(SKPSMTPMessage *)message
{
 NSLog(@"%@", message); } - (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error {  NSLog(@"message - %@\nerror - %@", message, error); }
小編不死心,還是想着把剩下的兩種給大家一起探討一下;

IOS原生自帶有兩種方法發送郵件的方法:

1)openURL(原生)

——用戶體驗較差,程序會進入后台,跳轉至郵件發送界面。

2)MFMailComposeViewController(原生)

——不會進入后台,使用模態彈出郵件發送視圖。

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

——你可以不需要告知用戶將要進行郵件發送的事情,我在想這個是不是不符合蘋果的理論。當然你也可以在發送之前弄個彈出框告知用戶,並讓用戶選擇是否發送。

以下代碼均在真機(IOS8.0)進行測試,並通過測試。 

一、使用openURL發送郵件:

創建可變的地址字符串對象:

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

添加收件人:

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

添加抄送人:

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

添加密送人:

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

添加郵件主題和郵件內容:

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

二、使用MFMailComposeViewController發送郵件

使用前注意:

1)項目需要導入框架:MessageUI.framework

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

獲取用戶是否設置了郵件賬戶:

if ([MFMailComposeViewController canSendMail]) { // 用戶已設置郵件賬戶 [self sendEmailAction]; // 調用發送郵件的代碼 }

sendEmailAction方法代碼:

- (void)sendEmailAction
{
 // 郵件服務器  MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];  // 設置郵件代理  [mailCompose setMailComposeDelegate:self];  // 設置郵件主題  [mailCompose setSubject:@"我是郵件主題"];  // 設置收件人  [mailCompose setToRecipients:@[@"1147626297@qq.com"]];  // 設置抄送人  [mailCompose setCcRecipients:@[@"1229436624@qq.com"]];  // 設置密抄送  [mailCompose setBccRecipients:@[@"shana_happy@126.com"]];  /**  * 設置郵件的正文內容  */  NSString *emailContent = @"我是郵件內容";  // 是否為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"];  // 彈出郵件發送視圖  [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: // 用戶點擊發送    NSLog(@"Mail sent...");    break;   case MFMailComposeResultFailed: // 用戶嘗試保存或發送郵件失敗    NSLog(@"Mail send errored: %@...", [error localizedDescription]);    break;  }  // 關閉郵件發送視圖  [self dismissViewControllerAnimated:YES completion:nil]; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM