Can't attach CSV file with Mail for iPhone

Discussion in 'iOS Programming' started by RottenApple2, Sep 16, 2010.

  1. RottenApple2 macrumors newbie

    Joined:
    Nov 4, 2009
    #1
    The code below works perfectly to send text (.txt) attachments via the mail application (textfile.csv needs to be modified everywhere with textfile.txt). However when I try to attach csv files it does not work at all (the mail application opens up showing the icon of the textfile.csv but when the mail arrives it has no attachment - nor the data is displayed within the message body). No difference if I change the mime type to "text/plain". I am puzzled... What am I doing wrong?? Any ideas please?

    Code:
    - (NSString *)getPath {
       NSString *paths = [NSSearchPathForDirectoriesInDomains
       (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
       return [paths stringByAppendingPathComponent:@"textfile.csv"];
    }
    
    //Saves file to Documents folder
    //Method writes a string to a text file
    -(void) writeToTextFile{
     //get the documents directory:
     NSArray *paths = NSSearchPathForDirectoriesInDomains
     (NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];
    
    
     //make a file name to write the data to using the documents  directory:
     NSString *fileName = [NSString stringWithFormat:@"textfile.csv", 
     documentsDirectory];
     //create content
     NSString *content = @"One,Two,Three,Four,Five";
    
     //save content to the documents directory
     [content writeToFile:fileName 
         atomically:NO 
        encoding:NSStringEncodingConversionAllowLossy 
    
    
     error:nil]; 
    }
    
    // Displays an email composition interface inside the application. Populates all the Mail fields.
    -(void)displayComposerSheet
    { 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
     picker.mailComposeDelegate = self; 
     [picker setSubject:@"Subject"];
    
     // Set up recipients
     NSArray *toRecipients = [NSArray arrayWithObject:@"email@domain.com"];
    
     [picker setToRecipients:toRecipients];
     // Fill out the email body text
     NSString *emailBody = (@"Data is attached as a .CSV file");
    
     [picker setMessageBody:emailBody isHTML:NO];
    
     NSString *SavedDataPath = [self getPath];
     NSString *path = SavedDataPath;
    
     NSData *myData = [NSData dataWithContentsOfFile:path];
        [picker addAttachmentData:myData mimeType:@"text/csv" fileName:@"textfile.csv"];  
    
     [self presentModalViewController:picker animated:YES];
        [picker release];
    }
     
  2. robbieduncan Moderator emeritus

    robbieduncan

    Joined:
    Jul 24, 2002
    Location:
    London
    #2
    This is clearly wrong:

    Code:
     NSString *fileName = [NSString stringWithFormat:@"textfile.csv", 
     documentsDirectory];
    
    There is no format placeholder in the string so documentsDirectory will not be used and the path will just be textfile.csv. Which, most likely, you can't write to.
     

Share This Page