使用iOS开源库SKPSMTPMessage实现邮件发送

iOS下发邮件目前有两种方式,利用openURL打开iOS email app和利用MFMailComposeViewController在app内弹出email界面实现邮件发送。这两种方式搜索一下都有很多介绍,具体就不细说了。下面介绍第三种方式,利用开源库SKPSMTPMessage实现邮件发送。其实这种方式也有不少文章介绍了,只是看了一些文章,写得都差不多,都是贴demo里面的代码,没有我需要的发送图片和视频附件的功能。研究和查阅了一些资料,将代码综合一下,粘贴出来方便自己和有需要的人查阅。

SKPSMTPMessage开源库下载地址:

https://github.com/jetseven/skpsmtpmessage

发送邮件,包含附件代码如下:


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    
    SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
    testMsg.fromEmail = [defaults objectForKey:@"fromEmail"];
    
    testMsg.toEmail = [defaults objectForKey:@"toEmail"];
    testMsg.bccEmail = [defaults objectForKey:@"bccEmal"];
    testMsg.relayHost = [defaults objectForKey:@"relayHost"];
    
    testMsg.requiresAuth = [[defaults objectForKey:@"requiresAuth"] boolValue];
    
    if (testMsg.requiresAuth) {
        testMsg.login = [defaults objectForKey:@"login"];
        
        testMsg.pass = [defaults objectForKey:@"pass"];

    }
    
    testMsg.wantsSecure = [[defaults objectForKey:@"wantsSecure"] boolValue]; // smtp.gmail.com doesn't work without TLS!

    
    testMsg.subject = @"SMTPMessage Test Message";
    //testMsg.bccEmail = @"testbcc@test.com";
    
    // Only do this for self-signed certs!
    // testMsg.validateSSLChain = NO;
    testMsg.delegate = self;
    
    //文字信息
    NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey,
                               @"This is a tést messåge.",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
    //联系人信息
    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];
    //图片和视频附件
    //attach image
    NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"];
    NSData *imgData = [NSData dataWithContentsOfFile:imgPath];
    NSDictionary *imagePart = [NSDictionary dictionaryWithObjectsAndKeys:@"image/jpg;\r\n\tx-unix-mode=0644;\r\n\tname=\"test.jpg\"",kSKPSMTPPartContentTypeKey,
                               @"attachment;\r\n\tfilename=\"test.jpg\"",kSKPSMTPPartContentDispositionKey,[imgData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
    
    //attach video
    NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov"];
    NSData *videoData = [NSData dataWithContentsOfFile: videoPath];
    NSDictionary *videoPart = [NSDictionary dictionaryWithObjectsAndKeys:@"video/quicktime;\r\n\tx-unix-mode=0644;\r\n\tname=\"video.mov\"",kSKPSMTPPartContentTypeKey,
                               @"attachment;\r\n\tfilename=\"video.mov\"",kSKPSMTPPartContentDispositionKey,[videoData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
    
    testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart, imagePart, videoPart, nil];
    
    [testMsg send];

代码是在Demo基础上修改,经过测试,可以正常发送带附件的email。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MultipeerConnectivity 框架是苹果提供的一种用于在 iOS 设备之间进行点对点通信的框架,它可以支持 Wi-Fi 或蓝牙连接方式来实现设备之间的数据传输。在这个框架中,可以使用 MCSession 类来创建一个会话,然后在会话中添加想要连接的设备,从而实现点对点通信。以下是一个使用 MultipeerConnectivity 框架实现组播与数据发送和接收数据的示例代码: 1. 导入框架 在头文件中导入 MultipeerConnectivity 框架: ``` #import <MultipeerConnectivity/MultipeerConnectivity.h> ``` 2. 创建会话 使用 MCSession 类创建一个会话,指定会话的代理为当前类: ``` @property (nonatomic, strong) MCSession *session; - (void)viewDidLoad { [super viewDidLoad]; self.session = [[MCSession alloc] initWithPeer:[[MCPeerID alloc] initWithDisplayName:@"MyDevice"]]; self.session.delegate = self; } ``` 3. 添加设备 将要连接的设备添加到会话中: ``` - (void)searchForDevices { MCBrowserViewController *browserVC = [[MCBrowserViewController alloc] initWithServiceType:@"myservice" session:self.session]; browserVC.delegate = self; [self presentViewController:browserVC animated:YES completion:nil]; } - (void)browserViewControllerDidFinish:(MCBrowserViewController *)browserViewController { [browserViewController dismissViewControllerAnimated:YES completion:nil]; } - (void)browserViewControllerWasCancelled:(MCBrowserViewController *)browserViewController { [browserViewController dismissViewControllerAnimated:YES completion:nil]; } ``` 4. 发送数据 使用 MCSession 类的 sendData:toPeers:withMode:error: 方法来发送数据: ``` - (IBAction)sendData:(id)sender { NSData *data = [@"Hello, world!" dataUsingEncoding:NSUTF8StringEncoding]; NSError *error = nil; [self.session sendData:data toPeers:self.session.connectedPeers withMode:MCSessionSendDataReliable error:&error]; if (error) { NSLog(@"Error sending data: %@", error); } } ``` 5. 接收数据 在 MCSessionDelegate 协议方法中实现接收数据的逻辑: ``` - (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID { NSString *message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"Received message: %@", message); } ``` 以上就是使用 MultipeerConnectivity 框架实现组播与数据发送和接收数据的示例代码。需要注意的是,这个示例中使用的是可靠传输模式(MCSessionSendDataReliable),也可以使用不可靠传输模式(MCSessionSendDataUnreliable)来提高传输效率,但是会存在数据丢失的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值