2

我使用 MFMailComposeViewController 发送生成的报告(csv)。

现在邮件被发送到:电子邮件ID,但是当我检查邮件时,我确实收到了邮件,但附件不存在。

然后我还尝试了 MailComposer 示例:

https://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

其中 png 图像附加到邮件演示。我也使用该应用程序发送了邮件,但没有发送相同的结果图像附件。

帮忙看看是什么问题?提前致谢。

这是该应用程序中的代码:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;

[picker setSubject:@"Hello from California!"];


// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"]; 
NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; 
NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; 

[picker setToRecipients:toRecipients];
[picker setCcRecipients:ccRecipients];  
[picker setBccRecipients:bccRecipients];

// Attach an image to the email
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"png"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"];

// Fill out the email body text
NSString *emailBody = @"It is raining in sunny California!";
[picker setMessageBody:emailBody isHTML:NO];

[self presentModalViewController:picker animated:YES];
[picker release];
4

5 回答 5

3

在我的情况下,电子邮件从我的 iPhone 发送得很好,但是从我妻子的 iPhone 发送时没有附件。原来,她的默认帐户被设置为她的雅虎帐户,并且不允许附件。我只是将其切换到她的移动 Me 帐户并制作了附件。我使用gmail,所以我从来没有遇到过问题。

此外,我曾尝试将 MIME 类型从 text/csv 切换为 text/plain,但这并没有帮助。它在我的 iPhone 上都可以正常工作,而在我妻子的手机上根本不行。

希望这可以帮助!

于 2010-08-18T03:57:30.110 回答
1

我试图用“text/plain”附加 .csv 文件,我成功了。我认为你应该尝试同样的方法。祝你好运。

于 2009-12-03T22:28:31.617 回答
1

我遇到了同样的问题,我通过仔细查看我编写的两个函数来解决问题:

一个从 .plist 文件定义文件名,另一个实际设置文件的位置(包括它的路径和文件名)。

使用正确的函数来检索 MFMailViewController 中的文件名解决了这个问题:

    -(NSString *)dataFilePath { //this gets the ,plist file
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

return [documentsDirectory stringByAppendingPathComponent:kFilename];

//----------------------------

    -(NSString *)fileName { // this defines the fileName from the values in the .plist

NSString *patientDetails = [self dataFilePath];
NSArray *dataArray = [[NSArray alloc] initWithContentsOfFile:patientDetails];

NSString *firstName = [dataArray objectAtIndex:0];
NSString *lastName = [dataArray objectAtIndex:1];

NSString *fileName = [firstName stringByAppendingString:lastName];

return [fileName stringByAppendingString:@".csv"];

//-------------------------

     -(NSString *)setFileLocation {  //this puts name and folder together.  

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [sysPaths objectAtIndex:0];
NSString *fileName = [self fileName];   
NSString *fullFilePath = [NSString stringWithFormat:@"%@/%@", docDirectory,fileName];
  // NSLog(@"Filepath is : %@",fullFilePath);
return fullFilePath;

}

//-------------------------

最后一个是您要在 MFMailComposeViewController 中调用的函数:

     ...
NSData *csvData = [NSData dataWithContentsOfFile:[self setFileLocation]]; 
    [picker addAttachmentData:csvData mimeType:@"text/csv" fileName:fileName];
     ...

fileName 当然是一个 NSString,通过调用 fileName 函数来检索: NSString *fileName = [self fileName];

希望这可以帮助!

于 2011-09-20T06:39:11.510 回答
0

如果您的代码看起来不错,我会怀疑myData没有加载数据是nil. 放入NSLog([myData description])或使用调试器检查myData不是nil

于 2009-11-21T10:26:09.780 回答
0

我没主意了。如果我被困在这种情况下,我会使用您提供的示例代码创建一个独立的项目,看看我是否可以让它工作。通常在这些情况下,您关注的代码可能是正确的,而错误来自其他地方。

还:

  • 检查路径变量是否为零,因为这将导致附件不出现。
  • 确保邮件撰写视图的邮件正文中有一个图标。成功添加附件后,您应该会在视图中看到图标表示。
  • 而且您可能希望将您的设置fileNamerainy.png,即[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy.png"]

祝你好运。

于 2009-11-22T06:32:48.810 回答