Присоединение .txt к MFMailComposeViewController
У меня есть .txt файл, хранящийся в папке Documents, и я хочу отправить его MFMailComposeViewController со следующим кодом в теле метода -sendEmail
:
NSData *txtData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dataBase" ofType:@"txt"]];
[mail addAttachmentData:txtData mimeType:@"text/plain" fileName:[NSString stringWithFormat:@"dataBase.txt"]];
Когда появляется композитор почты, я вижу вложение в теле письма, но я получаю это письмо без вложения. Может быть, это неправильный MIME-тип для вложения .txt или что-то не так с этим кодом?
Спасибо
Ответы
Ответ 1
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *txtFilePath = [documentsDirectory stringByAppendingPathComponent:@"abc.txt"];
NSData *noteData = [NSData dataWithContentsOfFile:txtFilePath];
MFMailComposeViewController *_mailController = [[MFMailComposeViewController alloc] init];
[_mailController setSubject:[NSString stringWithFormat:@"ABC"]];
[_mailController setMessageBody:_messageBody
isHTML:NO];
[_mailController setMailComposeDelegate:self];
[_mailController addAttachmentData:noteData mimeType:@"text/plain" fileName:@"abc.txt"];
Надеюсь, что это поможет.
Ответ 2
В Swift 3 вы можете отправить почту с прикрепленным файлом
@IBAction func emailLogs(_ sender: Any) {
let allPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = allPaths.first!
let pathForLog = documentsDirectory.appending("/application.log")
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self;
mail.setToRecipients(["[email protected]"])
mail.setSubject("Application Logs")
mail.setMessageBody("Please see attached", isHTML: true)
if let fileData = NSData(contentsOfFile: pathForLog) {
mail.addAttachmentData(fileData as Data, mimeType: "text/txt", fileName: "application.log")
}
self.present(mail, animated: true, completion: nil)
}
}
И затем отпустите контроллер композитора на результат
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
Обязательно подписаться на этот делегат
MFMailComposeViewControllerDelegate