2012-12-19 211 views
0

我正在使用以下代码通过电子邮件发送csv。该电子邮件是发送的,我收到了我的收件箱,但我没有收到附加的csv文件,有关错在哪里的任何想法?电子邮件未附加文件

-(void)generateCSV 
{ 
NSFileManager *filemgr = [NSFileManager defaultManager]; 
NSArray *dirPaths; 
NSString *docsDir; 

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
               NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0]; 

if ([filemgr fileExistsAtPath:[NSString stringWithFormat:@"%@/test.csv", docsDir] ] == NO) 
{ 
    [filemgr createFileAtPath:[NSString stringWithFormat:@"%@/test.csv", docsDir] contents:[@"" dataUsingEncoding: NSUnicodeStringEncoding] attributes: nil]; 
} 

surveyarray = [db retrieveSurvey]; 

CHCSVWriter * csvWriter = [[CHCSVWriter alloc] initWithCSVFile:[NSString stringWithFormat:@"%@/test.csv", docsDir] atomic:NO]; 

NSString *str = [NSString stringWithFormat: @"No, CreatedDate, Question1, Question2, Question3, Comment\n"]; 
[csvWriter writeField:str]; 

for(int i = 0; i < surveyarray.count; i++) 
{ 
    survey = [surveyarray objectAtIndex:i]; 
    NSString *str = [NSString stringWithFormat: @"%d, %@, %@, %@, %@, %@\n", i, survey.createddate, survey.question1, survey.question2, survey.question3, survey.comment]; 
    [csvWriter writeField:str]; 
} 

NSMutableString *subject = [[NSMutableString alloc] init]; 
NSMutableString *emailBody = [[NSMutableString alloc] init]; 

[subject appendString:@""]; 

MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; 

mailer.mailComposeDelegate = self; 

[mailer setSubject:subject]; 

NSArray *toRecipients = [NSArray arrayWithObjects:@"", nil]; 
[mailer setToRecipients:toRecipients]; 

NSData *myData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@/test.csv", docsDir]]; 
NSLog(@"%@", myData); 

[mailer addAttachmentData:myData mimeType:@"text/csv" fileName:@"test.csv"]; 

[mailer setMessageBody:emailBody isHTML:NO]; 

mailer.modalPresentationStyle = UIModalPresentationPageSheet; 

[self presentModalViewController:mailer animated:YES]; 

[mailer release]; 
[subject release]; 
[emailBody release]; 

[csvWriter release]; 
} 

我生成csv文件,然后发送电子邮件作为附件。

我在我的邮箱中打开邮件,它不包含任何附件。

回答

-1

终于我解决了这个问题。电子邮件没有附加附件,只是文件是空的。这是因为for循环的初始值为-1,我更改为int i = 0,现在它工作正常

0

据我所看到的there,我会说,你忘了你的文件名:)

+1

是的,他做到了。但是这根本不应该造成太大的伤害。如果这是唯一的问题,那么数据将被正确地附加到电子邮件。只有在保存附件时才在邮件客户端接收,默认文件名是“test”而不是“test.csv”。 –

-1

尝试更换上面的线这

[mailer addAttachmentData:myData mimeType:@"text/csv" fileName:@"test.csv"]; 
+0

是的,你可以。它是一种文本的子类型。请参阅http://www.iana.org/assignments/media-types/text/index.html –

+0

用@“test.csv”替换@“test”有帮助吗? – ask4asif

+0

这当然是一种改进,但并未解决缺失附件的问题。 –

0

根据NSData的类的末尾添加.csv引用,dataWithContentsOfFile给出的路径:应该是绝对路径。所以,你应该用

[NSString stringWithFormat:@"%@/test.csv", docsDir] 

,而不是仅仅@"test.csv"

目前我敢打赌,你的myData为零或空。

顺便说一句,我会创建一个NSString对象与全限定路径/文件名只有一次,并重新使用,而不是创建它3或4次。

+0

我编辑了代码,但仍然没有得到,我尝试登录nsdata,reutnr'<>' –

0

此代码每次都适用于我!

http://developer.apple.com/library/ios/#samplecode/MailComposer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008865