2009-11-07 5 views
7

Tengo un problema con el envío de archivos adjuntos csv a través de MFMailComposeViewController. A veces vienen bien, pero para otros usuarios no aparecen como archivos adjuntos, sino como texto en línea en el correo electrónico (con < br/> en lugar de retornos de línea). Es muy extraño. ¿Alguien sabe lo que estoy haciendo mal? Aquí hay un fragmento de mi código:MFMailComposeViewController adjunto csv no está conectado, pero muestra en línea en su lugar

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

Respuesta

0

creo que el segundo parámetro a setMessageBody:isHTML: debe ser YES para los archivos adjuntos a no aparecer en línea.

0

Incluso si establece isHTML param en SÍ, el cuerpo de su mensaje se puede enviar como texto plano si el cuerpo del mensaje se puede representar como tal. Y los archivos adjuntos en mensajes simples/texto no siempre son reconocidos correctamente por algunos clientes de correo electrónico (Outlook).

En mi caso, la adición de un enlace en el cuerpo del mensaje ayudó. El formato de texto en negrita con etiquetas HTML también funciona. ¡Difícil!

Probado en el 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 agradable gracias – jal

0

Esto puede no ser el caso aquí, pero una cosa a tener en cuenta es que:

[NSString dataUsingEncoding:] 

devuelve un objeto NSData válida pero vacío si la conversión a la codificación especificada no es posible. Es mejor utilizar la versión completa:

[NSString dataUsingEncoding: s allowLossyConversion: YES] 

O compruebe la longitud de los datos devueltos. Parece que los datos adjuntos de datos de longitud cero se recortan en algún lugar del proceso de correo.

2

Hola me puso código de ejemplo para crear un archivo CSV y adjuntarlo con el correo, pero asegúrese de que tiene que añadir MessageUI.Framework e importar el encabezado relacionado "MessageUI/MessageUI.h" "MessageUI/MFMailComposeViewController.h" y deligate "MFMailComposeViewControllerDelegate" ... espero que esto wl útil para los demás

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

establecer el tipo MIME de "application/octet-stream" y que debe hacer el truco para eliminar los archivos adjuntos en línea (todavía nombrado la extensión de mi archivo, es decir, pdf)

+0

Con iOS 8, esta es la solución que funcionó para mi. – lifjoy

+0

No me ayudó con los archivos jpeg adjuntos en iOS 8. – shelll

Cuestiones relacionadas