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);
}