所以我使用MFMailComposeViewController
将pdf文件附加到电子邮件中,并使用使用交换帐户设置的默认iOS邮件应用程序将其发送出去。
如果我发送的文件大小 4863K ,则效果非常好。一切都按预期发展。
如果我发送的文件大小 5688K ,它似乎正常工作并获得MFMailComposeResultSent
,结果会发回给代表。
但是,邮件永远不会到达,当我查看邮件应用程序时,我发现邮件卡在发件箱中时出现以下错误:
服务器拒绝了该消息
超级奇怪的是,当我尝试重新发送来自发件箱的消息时,它发送完全正常并且不再提供错误消息。
我有点在我的智慧结束,并没有第一个线索可能出错的地方。显然,我无法用苹果的代码来解决这个问题,但似乎有许多我可能搞砸的MFMailComposeViewController
选项。
代码非常简单:
- (void) setAttachments:(NSArray*)attatchments
ofDraft:(MFMailComposeViewController*)draft
{
if (attatchments)
{
for (NSString* path in attatchments)
{
NSData* data = [self getDataForAttachmentPath:path];
NSString* basename = [self getBasenameFromAttachmentPath:path];
NSString* pathExt = [basename pathExtension];
NSString* fileName = [basename pathComponents].lastObject;
NSString* mimeType = [self getMimeTypeFromFileExtension:pathExt];
// Couldn't find mimeType, must be some type of binary data
if (mimeType == nil) mimeType = @"application/octet-stream";
[draft addAttachmentData:data mimeType:mimeType fileName:fileName];
}
}
}
这适用于较小的文件这一事实意味着我对此代码没有任何问题,并且它被复制出一个看起来相当广泛使用的cordova插件。但无论出于何种原因,超过 ~5MB 的文件都没有明显的原因失败。
感谢您的帮助。
更新 我捕获了http流量并发现在使用MFMailComposeViewController发送邮件的情况下,POST请求的内容长度为0,这是不允许的,因此服务器返回400错误。当我尝试直接从邮件应用程序重新发送相同的邮件时,内容长度是预期的大小。
这似乎是MessageUI框架的限制,但我无法验证Apple是否存在普遍限制。