如何将保存的文本文件作为电子邮件附件发送

时间:2012-01-09 12:16:22

标签: iphone email xcode4 ios4

我有一个应用程序,它将通过电子邮件收集的数据作为附件发送。我使用以下代码创建数据并将其保存到docs文件夹中名为“leads.xml”的文件中。

NSArray *sysPath = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *sysFilePath = [sysPath objectAtIndex:0];
[picker addAttachmentData:sysFilePath mimeType:@"text/xml" fileName:@"leads.xml"];

.
.
.

[emailBody writeToFile:filePath atomically:YES];

然后我尝试使用此代码将保存的文件作为附件发送 -

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *docDirectory = [sysPaths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/leads.xml", docDirectory];

当它运行时我得到一个错误,我做错了什么?

4 个答案:

答案 0 :(得分:0)

邮件需要一个NSData对象,包含文件内容而不是路径。 您需要将文件加载到NSData对象中,如:

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *docDirectory = [sysPaths objectAtIndex:0];
NSString *filePath = [docDirectory stringByAppendingPathComponent:@"leads.xml"];

NSData *fileData = [NSData dataWithContentsOfFile:filePath];
[picker addAttachmentData:fileData mimeType:@"text/xml" fileName:@"leads.xml"];

答案 1 :(得分:0)

您必须提供数据,而不是文件路径:

NSData *data = [NSData dataWithContentsOfFile:sysFilePath];
[picker addAttachmentData:data mimeType:@"text/xml" fileName:fileName];

文档:

- (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename

附件:

要附加的数据。通常,这是您要包含的文件的内容。此参数不得为零。

答案 2 :(得分:0)

试试此代码

if(mailController)
            {
                mailController.mailComposeDelegate = self;
               // NSLog(@"current index:%d",currentIndex_);
                NSString *string = [NSString stringWithFormat:@"00%d",currentIndex_+43];
              //  NSLog(@"string:%@",string);
                NSString *imageIndex = [[NSBundle mainBundle] pathForResource:string ofType:@"jpg"];

                NSData *myData = [[NSData alloc] initWithContentsOfFile:imageIndex];

                [mailController addAttachmentData:myData mimeType:@"application/jpg" fileName:@"Report"];
                [mailController setSubject:@"your subject"];
                [mailController setMessageBody:@"" isHTML:NO];
                [self presentModalViewController:mailController animated:YES];
                [mailController release];
            }

我在这里发送图片而不是它你可以发送你的文本文件。 这可能会对你有所帮助

答案 3 :(得分:0)

一些事情......

您可以在以下位置检查模拟器的文件系统:

~/Library/Application Support/iPhone Simulator/5.0/Applications/...

并查看您的文件是否实际保存在您期望的位置。

第二件事: NSString实际上有一堆方便的方法来处理文件路径,因此您不必检查尾部斜杠和其他垃圾。在处理文件路径时,应始终使用它们。

使用路径

+ pathWithComponents:
– pathComponents
– completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:
– fileSystemRepresentation
– getFileSystemRepresentation:maxLength:
– isAbsolutePath
– lastPathComponent
– pathExtension
– stringByAbbreviatingWithTildeInPath
– stringByAppendingPathComponent:
– stringByAppendingPathExtension:
– stringByDeletingLastPathComponent
– stringByDeletingPathExtension
– stringByExpandingTildeInPath
– stringByResolvingSymlinksInPath
– stringByStandardizingPath
– stringsByAppendingPaths: