MFMailComposeViewController CSV-вложение не присоединяется, а вместо этого показывает встроенное

У меня проблема с отправкой CSV-вложений через MFMailComposeViewController. Иногда они проходят просто замечательно, но для других пользователей они отображаются не как вложения, а как текст, встроенный в электронное письмо (с
вместо возврата строки). Это очень странно. Кто-нибудь знает, что я делаю не так? Вот фрагмент моего кода:

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 ответов

-(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];
}

Привет я положил пример кода для создания файла CSV и прикрепить его с почтой, но убедитесь, что вы должны добавить MessageUI.Framework и импортировать связанный с ним заголовок "MessageUI/MessageUI.h" "MessageUI/MFMailComposeViewController.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];
}

Установите тип mime как "application/octet-stream", и это должно помочь избавиться от вложенных вложений (я все еще назвал расширение моего файла, т.е. pdf)

Это может быть не так, но одна вещь, на которую следует обратить внимание:

[NSString dataUsingEncoding:] 

возвращает действительный, но пустой объект NSData, если преобразование в указанную кодировку невозможно. Лучше использовать полную версию:

[NSString dataUsingEncoding: s allowLossyConversion: YES]

Или проверьте длину возвращаемых данных. Похоже, что вложения данных нулевой длины обрезаются где-то в процессе обработки почты.

Даже если вы установите для параметра isHTML значение YES, ваше тело сообщения может быть отправлено в виде обычного текста, если тело сообщения может быть представлено как таковое. А вложения в текстовых / текстовых сообщениях не всегда корректно распознаются некоторыми почтовыми клиентами (Outlook).

В моем случае добавление ссылки в теле сообщения помогло. Форматирование текста как полужирный с HTML-тегами тоже работает. Tricky!

Протестировано на iPod 1G 3.1.3.

Я считаю, что второй параметр setMessageBody:isHTML: должно быть YES чтобы вложения не отображались в строке.

Другие вопросы по тегам