使用 SKPSMTPMessage 时 encodeBase64ForData 和 encodeWrappedBase64ForData 有啥区别
Posted
技术标签:
【中文标题】使用 SKPSMTPMessage 时 encodeBase64ForData 和 encodeWrappedBase64ForData 有啥区别【英文标题】:What's the difference between encodeBase64ForData and encodeWrappedBase64ForData when using SKPSMTPMessage使用 SKPSMTPMessage 时 encodeBase64ForData 和 encodeWrappedBase64ForData 有什么区别 【发布时间】:2013-09-04 14:12:22 【问题描述】:在我的应用程序中,我需要使用 SKPSMTPMessage 附加视频。一开始是从Dunja's code学来的,
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];
但这就是行不通。我尝试了所有可以想象的解决方案。最后,我更改了videoData的编码类型: 来自
... [videoData encodeBase64ForData],kSKPSMTPPartMessageKey ...
到
... [videoData encodeWrappedBase64ForData],kSKPSMTPPartMessageKey ...
它有效!
我不知道这两个api有什么区别,谁能帮帮我?再次感谢 Dunja,我从您的代码中学到了很多东西。
【问题讨论】:
【参考方案1】:看看这个答案:GMail won't open .txt attachment created by iPhone App, Depending on Size - I think There's a Bug in my MIME
一个名为 encodeBase64ForDataWrapped 的函数添加了换行符。 也许您应该改为调用它,如果您的附件足够长,那么长的 base64 行会让人感到困惑。
这里可以看到两者的源代码:http://code.google.com/p/skpsmtpmessage/source/browse/trunk/SMTPSender/Classes/NSData%2BBase64Additions.m
【讨论】:
你说的很对,encodeBase64ForDataWrapped 解决了我的问题,并且这个函数如你所说在我的 videoDatas 中添加换行符。但我真的很想知道这些链接中断是否是唯一的区别,我应该总是使用 encodeBase64ForDataWrapped 代替 encodeBase64ForData? 如果你看一下你会看到的源代码,encodeBase64ForDataWrapped 尝试首先使用 encodeBase64ForData - 所以我的意思是,你总是可以使用这个而不是 encodeBase64ForData。以上是关于使用 SKPSMTPMessage 时 encodeBase64ForData 和 encodeWrappedBase64ForData 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
iPhone- 使用 SKPSMTPMessage 的应用程序崩溃
为啥这个使用 SKPSMTPMessage 的应用程序被拒绝了?
使用 SKPSMTPMessage 向 2 个收件人发送电子邮件