Objective

Stella981
• 阅读 704

ios发送邮件,第三方库SKPSMTPMessage发送邮件的使用. 不需要调用系统的邮件,可以在app后台发送邮件.下面是整理的一个使用SKPSMTPMessage方法.

//
//  NISendMail.m
//
//  Created by  罗若文 on 16/7/7.
//  Copyright © 2016年 罗若文. All rights reserved.
//

#import "NISendMail.h"
#import "SKPSMTPMessage.h"
#import "NSData+Base64Additions.h"

@interface NISendMail ()
@property NSString * login;
@property NSString * password;
@property NSString * relayHost;
@end

@implementation NISendMail

#pragma mark - 初始化,发送者邮箱,密码,邮箱服务器
- (instancetype)initWithEmail:(NSString *)login password:(NSString *)password relayHost:(NSString *)relayHost
{
    self = [super init];
    if (self) {
        _login=login;
        _password=password;
        _relayHost=relayHost;
    }
    return self;
}

#pragma mark - 发送邮件:标题,接收方,内容,附件
-(void)sendMail:(NSString *)title toEmail:(NSString *)toEmail content:(NSString *)content enclosureName:(NSString *)enclosureName enclosure:(NSData * )enclosure{
    [self sendMail:title toEmail:toEmail bccEmail:nil ccEmail:nil content:content enclosureName:enclosureName enclosure:enclosure];
}

#pragma mark - 发送邮件:标题,接收方,隐藏抄送,抄送,内容,附件名,附件
-(void)sendMail:(NSString *)title toEmail:(NSString *)toEmail bccEmail:(NSString *)bccEmail ccEmail:(NSString *)ccEmail content:(NSString *)content enclosureName:(NSString *)enclosureName enclosure:(NSData * )enclosure{
    if(!content){
        content=@" ";
    }
    if([NIString isEmpty:enclosureName]){
        enclosureName=@"nullName.config";//忘记传名字的时候
    }
    //线程发送邮件
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
        testMsg.fromEmail = _login;
        testMsg.toEmail = toEmail;
        testMsg.relayHost = _relayHost;//@"smtp.qq.com";
        testMsg.requiresAuth = [[NSNumber numberWithBool:YES] boolValue];
        if (testMsg.requiresAuth) {
            testMsg.login = _login;
            testMsg.pass = _password;
        }
        testMsg.wantsSecure = [[NSNumber numberWithBool:YES] boolValue]; // smtp.gmail.com doesn't work without TLS!
        if(title){
            testMsg.subject = title; //主题
        }else{
            testMsg.subject = @"标题"; //主题
        }
        
        if(bccEmail){
            testMsg.bccEmail = bccEmail;  //隐藏抄送
        }
        if(ccEmail){
            testMsg.ccEmail = ccEmail;  //抄送
        }
        
        NSDictionary * plainPart = [NSDictionary dictionaryWithObjectsAndKeys:
                                    @"text/plain; charset=UTF-8",kSKPSMTPPartContentTypeKey,
                                    content,kSKPSMTPPartMessageKey,
                                    @"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];

        
        if(enclosureName && enclosure){
            NSDictionary *vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSString stringWithFormat:@"text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=\"%@\"",enclosureName],kSKPSMTPPartContentTypeKey,
                                     [NSString stringWithFormat:@"attachment;\r\n\tfilename=\"%@\"",enclosureName],kSKPSMTPPartContentDispositionKey,
                                     [enclosure encodeBase64ForData],kSKPSMTPPartMessageKey,
                                     @"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
            
            testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil];
        }
        else{
            testMsg.parts = [NSArray arrayWithObjects:plainPart,nil];
        }
        [testMsg send];
    });

}
@end

在需要发送邮件的地方可以这样写

NISendMail * sm=[[NISendMail alloc]initWithEmail:@"写发送者邮箱" password:@"发送者密码,如果是qq邮箱要用独立密码" relayHost:@"smtp.qq.com"];
        [sm sendMail:@"标题" toEmail:@"732649784@qq.com" content:@"内容测试:使用第三方库SKPSMTPMessage发送邮件" enclosureName:nil enclosure:nil];

查看源码:http://git.oschina.net/shareDemoCode/SendEmailDemo

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
sprintboot
一、邮件发送使用springboot自带的邮件系统就能实现邮件的发送,首先导入依赖:1、新建springboot项目,添加依赖<dependency<groupIdorg.springframework.boot</groupId<artifactIdspringbootstartermail
Easter79 Easter79
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
Jenkins 配置邮件通知步骤
Jenkins配置邮件通知前言可以在Jenkins中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题。Jenkins邮件通知功能的插件主要包括:MailerPlugin(默认的发送邮件插件)EmailExtensionPlugin(功能更强大的发送邮件插件)建议同时安装这两个插件。下面来介绍如何在
Easter79 Easter79
3年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Wesley13 Wesley13
3年前
thinkphp整合系列之友盟消息推送
上篇文章 thinkphp集成系列之phpmailer批量发送邮件(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbaijunyao.com%2Farticle%2F69)讲过的;邮件有着零成本、内容丰富的优点;但是一个非常硬的硬伤;这家伙的及时性太差了;尤其是随着90、00
Stella981 Stella981
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服