【问题标题】:how to tell if a file has been sent or is in the outbox in iOS mail如何判断文件是否已发送或是否在 iOS 邮件的发件箱中
【发布时间】:2013-03-08 09:35:12
【问题描述】:

我正在开发一个 iOS 应用程序,该应用程序允许用户发送到存储(使用核心数据)并以我使用 MFMailComposeViewController 类附加到电子邮件的 csv 文件的形式发回数据。

文件发送后,我想遍历数据并在每条记录上设置一个提交标志,这样当用户点击按钮提交更多数据时,它就不会再次发送

这很容易做到——我可以从内部调用方法来做到这一点

    -(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

使用

    case MFMailComposeResultSent:

我想自己清理并在发送后删除 csv 文件,但我的问题是......(编辑 - 请参阅底部的更多测试后编辑)

MFMailComposeResultsSent 是 MFMailComposeResult,无论是邮件已发送还是已发送到发件箱但尚未发送。如果此时我删除了 csv 文件并且互联网连接已关闭并且邮件在发件箱中,那么当连接恢复并且邮件被发送时,附件已经被删除并且显然不会被发送。

我的 csv 文件的大小很小 - 一条记录大约 1kb,5 条大约 2kb(差异是因为第一行是所有字段名称),在此基础上,任何文件都不太可能永远大于 30kb,所以我不会使用大量内存。实际上,我看不到任何情况下,即使是最热情的用户也会生成超过半 MB 的数据

有什么想法我可以/应该如何处理这个问题?我不确定苹果对留下一堆小文件会采取什么态度,以及这会如何影响我的应用提交。

提前感谢您抽出宝贵时间阅读和/或回复本文

西蒙

编辑

时间延迟似乎存在一些问题 - 也许 iOS 正在缓存已删除的文件?短时间。

我进行了一系列测试运行,附件通过了 - 我一直在测试在 wifi 关闭和飞行模式打开的情况下发送,并且文件在我重新打开它们后不久就通过了。我刚刚测试了我离开wifi路由的位置并且我仍然连接但是从wifi路由器的背面拉了电缆所以我后面没有互联网 当我回到路由器并插入它并发送邮件时,它已经丢失了附件文件并且邮件在没有它们的情况下通过了。现在我有一堆测试,一半是附件通过,一半是附件没有

更多测试后编辑

我的问题可能是由于我对何时发生的事情的误解而引发的 - 但我没有将问题标记为已回答,因为我仍然想知道是否可以检查邮件实际上已经消失。一个提供的答案说不,它不可能 - 其他任何人都可以确认这一点,然后我会将其标记为答案。

不管怎样

我认为丢失附件的问题可能来自进入邮件应用程序并在邮件找不到连接时检查发件箱。有时 Mail 会在邮件上添加警告面,附件有时会消失。如果我不理会发件箱,附件似乎会正常运行。我将对此进行更多测试以确认情况确实如此。

【问题讨论】:

  • 有时我的带有附件的电子邮件只是卡在发件箱中而无法发送。有这方面的经验吗?

标签: ios mfmailcomposeviewcontroller mfmailcomposer


【解决方案1】:

很遗憾,没有办法检查。

MFMailComposeResultSent

The email message was queued in the user’s outbox. It is ready to send the next time the user connects to email.

表示该消息在等待发送时会得到(仍在发件箱中),发送后不会产生结果。

详情请MFMailComposeViewController

【讨论】:

  • 是的 - 这就是我的问题 - 事实上它更糟,因为即使连接良好,它也很有可能在发送之前被删除。所以 MFMComposeResultSent 完全是我清理的错误地方
【解决方案2】:

您如何将 CSV 文件附加到电子邮件中?您可以尝试附加 NSData,而不是指定文件 URL。这样您的附件就不会绑定到外部文件,而是嵌入到电子邮件本身中。

查看MFMailComposeViewController addAttachmentData了解更多详情。

例如

NSData *csvData = [NSData dataWithContentsOfFile:filePath];

使用 addAttachmentData 将 csvData 附加到您的 MFMailComposeViewController。

【讨论】:

  • 是的 - 我一直在使用文件 url - 我给自己发送了一个 .csv 文件,所以我可以将它加载到便当中并查看那里的数据
  • 如果附件文件已被删除,您确定没有从发件箱发送电子邮件吗?如果您如上所述将 NSData 嵌入到电子邮件中,则不再需要保留文件。
  • 电子邮件已发送。问题是有时附件会消失,有时当我重新打开 wifi 时它们不会 - 我已更改代码以使用您的建议,但似乎没有太大区别 \code\ NSData *siteCSVData = [NSData dataWithContentsOfFile:sitesFile]; [mailer addAttachmentData:siteCSVData mimeType:@"text/csv" fileName:@"testSites.csv"]; //[mailer addAttachmentData:[NSData dataWithContentsOfFile:sitesFile] mimeType:@"text/csv" fileName:@"demoSites.csv"];
猜你喜欢
  • 2018-09-13
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多