2009-11-07 5 views
7

Ich habe ein Problem mit dem Senden von CSV-Anlagen über MFMailComposeViewController. Manchmal kommen sie gut durch, aber für andere Benutzer kommen sie nicht als Anhänge durch, sondern eher als Text in der E-Mail (mit < br/> anstelle der Zeilenrückgabe). Es ist sehr seltsam. Weiß jemand was ich falsch mache? Hier ist ein Ausschnitt aus meinem Code:MFMailComposeViewController csv-Anhang wird nicht angefügt, aber es wird stattdessen inline angezeigt

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

Antwort

0

I der zweite Parameter zu setMessageBody:isHTML: glauben YES für Anlagen darf nicht inline zeigen.

0

Auch wenn Sie den isHTML-Parameter auf YES setzen, kann Ihr Nachrichtentext als einfacher Text gesendet werden, wenn der Nachrichtentext als solcher dargestellt werden kann. Und Anhänge in einfachen/Textnachrichten werden von einigen E-Mail-Clients (Outlook) nicht immer korrekt erkannt.

In meinem Fall half ein Hinzufügen eines Links in den Nachrichtentext. Das Formatieren von Text mit HTML-Tags ist ebenfalls fett. Knifflig!

Getestet auf iPod 1G 3.1.3.

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]; 
} 
+1

es ist schön danke – jal

0

Dies kann hier nicht der Fall sein, aber eine Sache zu achten ist, dass:

[NSString dataUsingEncoding:] 

ein gültiges aber leer NSData Objekt zurückzugibt, wenn die Umstellung auf die angegebene Codierung nicht möglich ist. Besser, die Vollversion zu verwenden:

[NSString dataUsingEncoding: s allowLossyConversion: YES] 

Oder überprüfen Sie die Länge der zurückgegebenen Daten. Es scheint, dass Datenanhänge mit Null-Länge irgendwo im Postprozess abgeschnitten werden.

2

Hallo Ich legte Beispielcode für Erstellen von CSV-Datei und fügen Sie es mit E-Mail, aber stellen Sie sicher, dass Sie MessageUI.Framework hinzufügen und importieren Sie die zugehörige Kopfzeile "MessageUI/MessageUI.h" "MessageUI/MFMailComposeViewController.h" und Deligate „MFMailComposeViewControllerDelegate“ ... ich hoffe, diese wl nützlich für andere

- (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

der Mime-Typ als „application/octet-stream“ eingestellt ist und das sollte den Trick tun, um Inline-Anhänge zu entfernen (I genannt noch die Erweiterung meiner Datei zB pdf)

+0

Mit iOS 8 ist dies die Lösung, die funktioniert für mich. – lifjoy

+0

Hat mir nicht geholfen mit JPEG-Anhänge auf iOS 8. – shelll

Verwandte Themen