Как отправить сохраненный текстовый файл в виде вложения электронной почты - PullRequest
0 голосов
/ 09 января 2012

У меня есть приложение, которое отправляет данные, собранные по электронной почте, как вложение.Я использую следующий код, чтобы создать и сохранить данные в файл с именем «lead.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 голосов
/ 09 января 2012

Пара вещей ...

Вы можете проверить файловую систему для симулятора по адресу:

~/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:
0 голосов
/ 09 января 2012

Вы должны указать данные, а не путь к файлу:

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

Документы:

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

вложение:

Данные для вложения.Как правило, это содержимое файла, который вы хотите включить.Этот параметр не должен быть равен нулю.

0 голосов
/ 09 января 2012

Попробуйте этот код

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

Я отправляю сюда изображение, вместо него вы можете отправить свой текстовый файл. Это может помочь вам

0 голосов
/ 09 января 2012

Почте нужен объект 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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...