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