iOS - SKPSMTPMessage 静默发送邮件

pod 'skpsmtpmessage','~> 0.0.1'

 

主题乱码问题 :邮件主题为中文时,KPSMTPMessage.m文件中的sendParts方法中

NSData *messageData = [message dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]

我们将上边这一句改为
NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]


使用前需要需要注意一下5点:

1. 邮件主题为中文时,KPSMTPMessage.m文件中的sendParts方法中,需要修改 NSDatamessageData = [message dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] 为NSData messageData = [message dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES], 否则会出现中文乱码问题。
2. 发送方的邮箱需要开启 SMTP 服务,不然邮件无法从发送方邮箱发出。
3. 如果发送的时候报出503的code时,要检查您发送邮件的账号密码是否正确,这时的登陆密码不是设置的密码,要开启SMTP服务器自己设置的一个授权码的
4. 如果爆出连接三次的都连不上邮箱服务器的话那就是网络有问题的
5. gmail的邮箱是不用填授权码的,直接填登陆密码就好了

 

 

 

#pragma mark - sharePDF
-(void)sharePDF{
    
    NSString *sendMail = @"xxx@163.com";
    NSString *receiveMail  = @"xxx@qq.com";
    
    SKPSMTPMessage *mail = [[SKPSMTPMessage alloc] init];
    
    //    //如果邮件被拦截请加入下面代码(没使用过,git里看到的)
    //    NSDate *now = [[NSDate alloc] init];
    //    NSDateFormatter    *dateFormatter = [[NSDateFormatter alloc] init];
    //    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
    //    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];//加入这一句代码
    
    
    
    //发信人
    mail.fromEmail= sendMail;
    //收件人
    mail.toEmail = receiveMail;
    //    mail.bccEmail=@"xxx@163.com";//暗抄送
    //    mail.ccEmail = @"xxx@163.com";//抄送人
    
    mail.subject = @"我是主题";            // 设置邮件主题
    mail.wantsSecure = YES ;             // 需要加密
    mail.delegate = self;
    //发送邮件代理服务器
    //    mail.relayHost=@"smtp.qq.com";//qq个人
    //    mail.relayHost=@"smtp.exmail.qq.com";//qq企业账号
    //    mail.relayHost=@"smtp.ym.163.com";//网易企业邮箱
    mail.relayHost=@"smtp.163.com"; //网易邮箱
    
//    //自定义端口号(用不到)
//    NSArray *defaultPorts = [[NSArray alloc] initWithObjects:[NSNumber numberWithShort:465], [NSNumber numberWithShort:587], nil];
//    mail.relayPorts = defaultPorts;
    
    mail.requiresAuth = YES;            //验证身份是否登录
    if (mail.requiresAuth) {
        mail.login = @"xxx"; // 发送者邮箱用户名,不是账号
        mail.pass = @"xxx";    // 发送者邮箱密码(需要登录邮箱去设置)
    }
    
    
    //设置邮件内容
    NSString *sendMessageStr = @"hello";
    NSDictionary *ContentDic = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain; charset=UTF-8",kSKPSMTPPartContentTypeKey,sendMessageStr,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
    
    
    //添加pdf附件
    NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@"123" ofType:@"pdf"];
    NSData *pdfData = [NSData dataWithContentsOfFile:pdfPath];
//添加 charset=UTF-8 可解决附件名称中文乱码问题
    NSDictionary *pdfDic = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;charset=UTF-8;\r\n\tx-unix-mode=0644;\r\n\tname=\"123.pdf\"",kSKPSMTPPartContentTypeKey,
                             @"attachment;\r\n\tfilename=\"123.pdf\"",kSKPSMTPPartContentDispositionKey,[pdfData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
    //添加附件图片
    NSData *imgData =UIImagePNGRepresentation([UIImage imageNamed:@"BackgroundIMG1"]);
    NSDictionary *imageDic = [NSDictionary dictionaryWithObjectsAndKeys:@"image/png;\r\n\tx-unix-mode=0644;\r\n\tname=\"BackgroundIMG1.png\"",kSKPSMTPPartContentTypeKey,
                               @"attachment;\r\n\tfilename=\"BackgroundIMG1.png\"",kSKPSMTPPartContentDispositionKey,[imgData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];

    // 邮件首部字段、邮件内容格式和传输编码
    mail.parts = [NSArray arrayWithObjects:ContentDic,pdfDic,imageDic,nil];

    //发送
    [mail send];
   
    
    
}


- (void)messageSent:(SKPSMTPMessage *)message
{   //  发送成功
    NSLog(@"%@", message);
}

- (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error
{
    //如果发送失败,可以再次调用发送方法
    NSLog(@" 发送邮件失败------------ ");
    NSLog(@"message - %@\nerror - %@", message, error);
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值