MFMailComposeViewController无法附加csv附件,而是内联显示

7

我在使用MFMailComposeViewController发送csv附件时遇到了问题。有时它们可以正常地发送,但对于其他用户,它们不会作为附件发送,而是作为内联文本出现在电子邮件中(使用<br/>替换换行符)。这非常奇怪。有人知道我做错了什么吗? 以下是我的代码片段:

MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];
mailComposeViewController.mailComposeDelegate = self;

NSString *csv = @"foo,bar,blah,hello";
NSData *csvData = [csv dataUsingEncoding:NSUTF8StringEncoding];
[mailComposeViewController addAttachmentData:csvData mimeType:@"text/csv" fileName:@"testing.csv"];

[mailComposeViewController setSubject:@"testing sending csv attachment"];
[mailComposeViewController setMessageBody:@"csv file should be attached" isHTML:NO];
[self presentModalViewController:mailComposeViewController animated:YES];
6个回答

10
-(IBAction)btnPressed:(id)sender {
    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *docDir = [arrayPaths objectAtIndex:0];
    NSString *Path = [docDir stringByAppendingString:@"/CSVFile.csv"];
    NSData *csvData = [NSData dataWithContentsOfFile:Path]; 

    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    controller.mailComposeDelegate = self;

    [controller setSubject:@"For csv file..."];
    [controller setMessageBody:@"...csv file is hear.." isHTML:NO];
    [controller addAttachmentData:csvData mimeType:@"text/csv" fileName:@"CSVFile.csv"];
    [self presentModalViewController:controller animated:YES];
    [controller release];
}

2

你好,我提供了一个样例代码,用于创建CSV文件并将其附加到邮件中。但请确保您已添加MessageUI.Framework,并导入相关的头文件"MessageUI/MessageUI.h"和委托"MFMailComposeViewControllerDelegate"。希望这对其他人有所帮助。

- (void)viewDidLoad {

arrCsv=[[NSArray alloc]initWithObjects:@"Hello",@"Hi",@"traun",@"fine",nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains

(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *fileName = [NSString stringWithFormat:@"%@/try.csv", documentsDirectory];

[[arrCsv componentsJoinedByString:@","] writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:NULL];

 }



-(ibAction)btnMail   {

 NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docDir = [arrayPaths objectAtIndex:0];
NSString *Path = [docDir stringByAppendingString:@"/CSVFile.csv"];
NSData *csvData = [NSData dataWithContentsOfFile:Path]; 
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"For csv file..."];
[controller setMessageBody:@"...csv file is hear.." isHTML:NO];
[controller addAttachmentData:csvData mimeType:@"text/csv" fileName:@"CSVFile.csv"];
[self presentModalViewController:controller animated:YES];
[controller release];

}


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   message.hidden = NO;
switch (result)
{
    case MFMailComposeResultCancelled:
        message.text = @"Result: canceled";
        break;
    case MFMailComposeResultSaved:
        message.text = @"Result: saved";
        break;
    case MFMailComposeResultSent:
        message.text = @"Result: sent";
        break;
    case MFMailComposeResultFailed:
        message.text = @"Result: failed";
        break;
    default:
        message.text = @"Result: not sent";
        break;
}
[self dismissModalViewControllerAnimated:YES];
}

1
将 MIME 类型设置为 "application/octet-stream",这样就可以去除内联附件(我仍然命名了我的文件扩展名,即 pdf)。

在iOS 8中,这是我使用的解决方案。 - lifjoy
在iOS 8上无法帮助我处理JPEG附件。 - shelll

0
这里可能不是这种情况,但需要注意的一件事是:
[NSString dataUsingEncoding:] 

如果无法将数据转换为指定的编码,则返回一个有效但为空的NSData对象。最好使用完整版本:

[NSString dataUsingEncoding: s allowLossyConversion: YES]

或者检查返回数据的长度。看起来,零长度的数据附件在邮件处理过程中被修剪了。


0

我相信在调用setMessageBody:isHTML:方法时,第二个参数必须为YES,这样才能使附件不会内联显示。


0
即使您将isHTML参数设置为YES,如果消息正文可以表示为纯文本,则消息正文仍可以作为纯文本发送。而在纯文本消息中的附件并不总是被一些电子邮件客户端(如Outlook)正确识别。
在我的情况下,在消息正文中添加链接有所帮助。使用HTML标签格式化文本也可以起到作用。有点棘手!
在iPod 1G 3.1.3上进行了测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接