2009-11-07 9 views
7

Je rencontre un problème avec l'envoi de pièces jointes au format csv via MFMailComposeViewController. Parfois, ils viennent très bien, mais pour les autres utilisateurs, ils ne viennent pas comme des pièces jointes, mais plutôt comme texte en ligne dans le courriel (avec < br/> au lieu de retours en ligne.) C'est très étrange. Quelqu'un sait ce que je fais mal? Voici un extrait de code mon:La pièce jointe csv MFMailComposeViewController n'est pas attachée, mais affiche en ligne à la place

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

Répondre

0

je crois que le deuxième paramètre à setMessageBody:isHTML: doit être YES pour les pièces jointes pour ne pas afficher en ligne.

0

Même si vous définissez isHTML param sur YES, votre corps de message peut être envoyé en clair/texte si le corps du message peut être représenté comme tel. Et les pièces jointes dans les messages texte/texte ne sont pas toujours reconnues correctement par certains clients de messagerie (Outlook).

Dans mon cas, l'ajout d'un lien dans le corps du message a aidé. Le formatage du texte en gras avec les balises HTML fonctionne également. Rusé!

Testé sur l'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

ses gentils remerciements – jal

0

Cela peut ne pas être le cas ici, mais une chose à surveiller est que:

[NSString dataUsingEncoding:] 

retourne un objet NSData valide mais vide si la conversion à l'encodage spécifié n'est pas possible. Mieux vaut utiliser la version complète:

[NSString dataUsingEncoding: s allowLossyConversion: YES] 

Ou vérifier la longueur des données renvoyées. Il semble que les pièces jointes de données de longueur nulle soient coupées quelque part dans le processus de courrier.

2

Salut, je mis un exemple de code pour la création d'un fichier CSV et le joindre avec le courrier, mais assurez-vous que vous devez ajouter MessageUI.Framework et importer en-tête associé « MessageUI/MessageUI.h » « MessageUI/MFMailComposeViewController.h » et deligate « MFMailComposeViewControllerDelegate » ... J'espère que cette wl utile pour les autres

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

définir le type MIME comme « application/octet-stream » et qui devrait faire l'affaire pour supprimer les pièces jointes en ligne (j'appelle toujours l'extension de mon file ie pdf)

+0

Avec iOS 8, c'est la solution qui a fonctionné pour moi. – lifjoy

+0

Ne m'a pas aidé avec les pièces jointes jpeg sur iOS 8. – shelll