使用 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 liker 错误

为啥这个使用 SKPSMTPMessage 的应用程序被拒绝了?

使用 SKPSMTPMessage 向 2​​ 个收件人发送电子邮件

SKPSMTPMessage 中没有硬编码的“fromEmail”(发件人)

iOS 发送邮件SKPSMTPMessage