2010-08-03 7 views
0

Я пытаюсь отправить почту с помощью MFMailComposeViewController. Все работает, за исключением того, что письма не отправляются, и я всегда получаю MFMailComposeResultFailed.MFMailComposeViewController не отправляет почту

Любые указатели? Я НЕ использую симулятор, и отправка почты работает с моего устройства. У меня есть соединение (тестирование через Reachability), и [MFMailComposeViewController canSendMail] возвращает YES.

Нет компилятора предупреждений в проекте, не падает ...

ответ

2

Это была ошибка в IOS4.

У меня была и учетная запись электронной почты Exchange, и старая, неактивная учетная запись IMAP на моем телефоне. По-видимому, это приводит к проблемам с iOS4. Письма фактически застряли в папке «Исходящие». Как только я удалил неактивную учетную запись IMAP, все работало так, как ожидалось.

+0

Похоже, что ошибка все еще существует в 4.1. Пока не уверен в 4.2. –

0

Трудно сказать, не видя фрагмент кода, однако вы должны проверить следующее:

1) Вы правильно установить MFMailComposeViewController's делегата и внедрил свои методы делегатов;

2) Вы установили тему сообщения, используя setSubject:

3) вы установили тело сообщения, используя setMessageBody:isHTML:

и опционально Присоединить, используя addAttachmentData:mimeType:fileName:

4) вы представили на пользователь вашей почты составляет контроллер просмотра, используя что-то вроде

[self presentModalViewController:mcvc animated:YES]; 

H Это помогает.

+1

Да, я сделал все, что правильно. Оказывается, это была ошибка в ОС. См. Мой ответ ниже. В любом случае, спасибо :) –

1

Некоторые читатели могут столкнуться с этой проблемой:

Убедитесь, что вы реализовать <MFMailComposeViewControllerDelegate> протокол

Вот код:

// in TestViewController.h 
@interface TestViewController : UIViewController<MFMailComposeViewControllerDelegate> 
@end 

// in TestViewController.m 
@interface TestViewController() 
@end 

@implementation 
- (void) compose { 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    [picker setSubject:@"Hello there"]; 

    [picker setToRecipients:@[]]; 

    // Fill out the email body text 
    NSString *emailBody = @"Hello, sending a message from my app"; 

    [picker setMessageBody:emailBody isHTML:NO]; 

    // use this function. presentModalViewController:... is deprecated 
    [self presentViewController:picker animated:YES completion:nil]; 
} 

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
@end 
Смежные вопросы