美文网首页iOS知识库
iOS开发-内部邮件发送功能实现

iOS开发-内部邮件发送功能实现

作者: 等不来的期待 | 来源:发表于2017-02-22 18:00 被阅读1596次

    近期迭代版本要增加app内发送邮件的功能,由于以前没做过,所以直接去百度找了资源,果然好多文档,大体分为两种,第一种就是使用内置的MFMailComposeViewController发送邮件,第二种就是通过第三方类库SKPSMTPMessage发送邮件,类库下载地址为:https://github.com/jetseven/skpsmtpmessage

    下面我就只介绍第二种了,自我感觉第一种是没多少需求的。
    SKPSMTPMessage发送:

    这个第三方类库出现的比较早,引用的也比较多,把常用的邮件发送都封装到了起来,直接调用,是一个很简单的事情,下载之后会看到一个Demo和一个SMTPLibrary,直接将SMTPLibray拷贝到项目中,引用即可:


    注意:

    我是手动高进工程里,应为这东西是mrc的开发的,于是乎就要设置了,在Build Phases下添加-fno-objc-arc

    ①需要发送的控制器上导入SKPSMTPMessageNSData+Base64Additions头文件
    #import "SKPSMTPMessage.h"
    #import "NSData+Base64Additions.h"
    ②实现SKPSMTPMessageDelegate协议;
    ③具体发送方法:

    SKPSMTPMessage *myMessage = [[SKPSMTPMessage alloc] init];
        myMessage.fromEmail=@"keso@163.com";
        
        myMessage.toEmail=@"FlyElephant@qq.com";
        myMessage.bccEmail=@"Goodman@qq.com";
        myMessage.relayHost=@"smtp.163.com";
        
        myMessage.requiresAuth=YES;
        if (myMessage.requiresAuth) {
            myMessage.login=@"keso@163.com";
            
            myMessage.pass=@"keso";
            
        }
        
        myMessage.wantsSecure =YES; //为gmail邮箱设置 smtp.gmail.com
        
        myMessage.subject = @"博客园-FlyElephant";
    
        myMessage.delegate = self;
        //设置邮件内容
        NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain; charset=UTF-8",kSKPSMTPPartContentTypeKey,
                                   @"做一个简简单单,快快乐乐的程序员~keso",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
        
        
        myMessage.parts = [NSArray arrayWithObjects:plainPart,nil];
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [myMessage send];
        });
    

    ④设置发送之后的处理:

    - (void)messageSent:(SKPSMTPMessage *)message
    {
      NSLog(@"恭喜,邮件发送成功");
    }
    
    - (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error
    {
        NSLog(@"不好意思,邮件发送失败");
        
    }
    

    使用时候要注意两点:
    使用前需要需要注意一下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的邮箱是不用填授权码的,直接填登陆密码就好了
    

    只要是邮箱账号密码正确,且开启SMTP服务,都是可以实现发送邮件功能的,有问题的可以留言的,谢谢

    相关文章

      网友评论

      • 5c0783a08038:一直发送不了,代理方法也不走 控制台一直打印:TIC Read Status.
      • 翻滚的炒勺2013:Attempting to connect to server at: smtp.163.com:25
        总是报这个错误
        晓龙歌:问下 你解决了吗?我也一直报这个,也不回调
      • ee8a90f15e43:大神,可以发送表格这些附件吗??
        等不来的期待:可以发送附件的
      • Bruin_熊先森:崩溃了:- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {} 这个方法里面的 NSString *tmpStr = [[NSString alloc] initWithBytes:buf length:len encoding:NSUTF8StringEncoding];

        [inputString appendString:tmpStr]; 那个Tmpstr 为空了
        10481dfa1175:@_feiyu_2100 SMTP的授权码 怎么弄?
        Bruin_熊先森:@_feiyu_2100 encoding:NSUTF8StringEncoding]; 这个要改成NSASCIIStringEncoding 。然后prot 的话最好是将465写前面,我发现25有点抽风,而已,如果连不上服务器,回调会崩,超时时间是两分钟,如果你不等待回调和封操作的话,建议把-(send )方法里面的-
        // NSAssert(sendState == kSKPSMTPIdle, @"Message has already been sent!");注释掉,因为试过重复发送这句会崩溃
        _feiyu_2100:我也遇见这个错误,原因是我的的邮箱密码写错误,我用的是qq邮箱,密码要用SMTP的授权码
      • sunny冲哥:这个能发附件不?
      • 颜值不够才华来凑:用这个发邮件 ,邮件的内容能加图片吗,不以附件的形式
        _feiyu_2100:你可以发送html内容,里面可以放一些网络图片,这样图片就显示出来了

      本文标题:iOS开发-内部邮件发送功能实现

      本文链接:https://www.haomeiwen.com/subject/bkpmwttx.html