2013-08-21 9 views
0

Я пытаюсь проверить, было ли отправлено электронное сообщение и отображать предупреждение, позволяющее пользователю узнать.
Я попробовал метод делегата ниже, но, к сожалению, будет отображаться предупреждающее сообщение, если пользователь также отменяет. Любая помощь будет оценена и вознаграждена.iOS: Как определить, успешно ли отправлено письмо?

- (void)mailComposeController:(MFMailComposeViewController*)controller 
     didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error{ 
if (error) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message: 
            [NSString stringWithFormat:@"Error %@", [error description]] delegate:self 
                cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; 
    [alert show]; 
} 


    NSLog(@"email sent"); 
    } 

} 
+2

Вы должны посмотреть на «результат». Параметр 'error' должен быть просмотрен только после того, как вы сначала оцените значение' result'. – rmaddy

+0

BTW - 'result' будет' MFMailComposeResultSent', даже если сообщение электронной почты застряло в папке «Исходящие» из-за некоторой проблемы. Невозможно узнать, действительно ли отправлено электронное письмо или нет. – rmaddy

+0

То, что я видел, большинство людей делают, это создать отдельную базу данных, которая будет проверять, была ли отправлена ​​почта, путем регистрации всех отправляемых писем, а затем отправки веб-сервера по почте. Но такая система может варьироваться от случая к случаю. Это также зависит от того, кто будет использовать ваше приложение, то есть будь то для широкой публики или для использования вашим корпусом. – vnchopra

ответ

1

Все, что это значит, когда эта функция вызывается в том, что что-то произошло с электронной почтой, потому что MFMailCompostViewController закончена. Чтобы узнать, что же на самом деле произошло, вы должны взглянуть на ценности result, который может быть любым из следующих:

MFMailComposeResultCancelled 
MFMailComposeResultSaved 
MFMailComposeResultSent 
MFMailComposeResultFailed 

Как говорит rmaddy в комментариях, вы не можете быть 100% уверены, что электронная почта была отправлена ​​(она может застревать в папке «Исходящие»). То, что MFMailComposeResultSent означает, что электронное письмо было отправлено в приложение Mail, которое отправит его, как только сможете.

+0

Можете ли вы проверить, была ли нажата кнопка отправки? –

+0

@TwoFace Это не работает. Метод -didFinishWithResult'. «MFMailComposeViewController» завершен, и один из вышеуказанных результатов произошел с электронной почтой. Если есть способ взломать, была ли нажата кнопка, я не знаю об этом, но это не будет в этой функции - к тому времени, когда эта функция называется, кнопка уже нажата или не нажата. – WendiKidd

+0

Вы получаете MFMailComposeResultSent, если нажата кнопка «Отправить». Вы получаете MFMailComposeResultSaved, если нажата кнопка «Сохранить черновик». Вы получаете MFMailComposeResultCancelled, если нажата кнопка «Удалить черновик». Эти значения результата напрямую связаны с действиями пользователя на листе компоновки. Никто не гарантирует, что на самом деле происходит с почтой. Почтовое приложение - отдельная песочница. – ScorpionKing2k5

Смежные вопросы