【问题标题】:Attached file to email--file not there upon receipt将文件附加到电子邮件 - 收到后文件不存在
【发布时间】:2014-10-05 15:55:40
【问题描述】:

我想将 .csv 文件附加到电子邮件中,以便用户发送。此时,我知道该文件实际上是在我在模拟器中工作时创建的(我可以找到并打开它),并且它似乎附加到创建的电子邮件中。但是,由于我无法从 sim 卡发送电子邮件,所以我只能做到这一点。

部署在我的 iPad 上,指示文件已创建并附加到电子邮件(电子邮件正文中包含正确标题的文件图标)。我可以通过电子邮件发送它,但收到电子邮件时没有附加文件。

这是我用来创建和写入文件的代码:

-(NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSLog(@"dataFilePath created");
    return [documentsDirectory stringByAppendingPathComponent:@"WMDGstats.csv"];
    NSLog(@"File path: %@", documentsDirectory);
}

-(void) createCSVFile
{
    NSLog(@"Top of createCSVFile");

//    [[NSFileManager defaultManager] removeItemAtPath:pngFilePath error:&error];


    if (![[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath]])
    {
        [[NSFileManager defaultManager] createFileAtPath: [self dataFilePath] contents:nil attributes:nil];
        NSLog(@"File created");
    }

...yada, yada data creation



    NSFileHandle *handle;
    handle = [NSFileHandle fileHandleForWritingAtPath: [self dataFilePath] ];

    [handle truncateFileAtOffset:0];

    [handle writeData:[fullString dataUsingEncoding:NSUTF8StringEncoding]];

    [self mailCSV];
}

这是我将其附加到电子邮件的方式:

-(void) mailCSV
{
    if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
        mail.mailComposeDelegate = self;
        [mail setSubject:@"Subject"];
        [mail setMessageBody:@"message body" isHTML:NO];
        [mail setToRecipients:@[@"testingEmail@example.com"]];

        NSData *WMDGData = [NSData dataWithContentsOfFile:@"WMDGstats.csv"];
        [mail addAttachmentData:WMDGData mimeType:@"text.csv" fileName:@"WMDGstats.csv"];

        [self presentViewController:mail animated:YES completion:NULL];
    }
    else
    {
        NSLog(@"This device cannot send email");
    }
}

有什么想法吗?

感谢收看!

编辑:

根据 rmaddy 在下面评论中的善意指导,我提供了该文件的完整文件路径:

    NSData *WMDGData = [NSData dataWithContentsOfFile:[documentsDirectory stringByAppendingPathComponent:@"WMDGstats.csv"]];

而且它运行良好——文件创建、附加、邮寄和接收!

谢谢rmaddy!!!

【问题讨论】:

  • 我不知道这是否会导致问题,但 text.csv 不是正确的 MIME 类型。试试text/csv
  • 您需要在对[NSData dataWithContentsOfFile:@"WMDGstats.csv"]; 的调用中指定完整路径,而不仅仅是文件名。 WMDGData 很可能是 nil,因为您的路径无效。
  • 是的!!!完美,感谢@rmaddy!请在上面查看我的编辑,并在答案中发表评论,以便我接受并投票!

标签: ios email attachment


【解决方案1】:

下面一行:

NSData *WMDGData = [NSData dataWithContentsOfFile:@"WMDGstats.csv"];

可能返回nil,因为您需要指定文件的正确路径。由于您将文件保存在 Documents 文件夹中,因此您需要指定完整路径。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2014-02-18
    • 2020-11-21
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多