2013-08-21 120 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

你必須看看結果。只有在首先查詢「結果」值後才能查看「錯誤」參數。 – rmaddy

+0

順便說一句 - 即使電子郵件由於某些問題而停留在發件箱中,「結果」將會是「MFMailComposeResultSent」。沒有辦法知道電子郵件是否真的被髮送出去。 – rmaddy

+0

我所見過的大多數人做的是創建一個單獨的數據庫,通過記錄所有將被髮送的郵件然後讓Web服務器發送郵件來驗證郵件是否已發出。但是這種系統會因情況而異。這也取決於誰會使用你的應用程序,即它是針對公衆還是供你的公司使用。 – vnchopra

回答

1

所有這一切意味着當該功能被稱爲是東西與電子郵件發生,因爲​​完成。要知道沒有實際發生,你必須要來看看result的價值,它可以是下列任何一項:

MFMailComposeResultCancelled 
MFMailComposeResultSaved 
MFMailComposeResultSent 
MFMailComposeResultFailed 

由於rmaddy在評論中說,你不能確保100%電子郵件實際上被髮送(它可能被卡在發件箱中)。然後,MFMailComposeResultSent表示電子郵件已發送到郵件應用程序,郵件應該儘快發送。

+0

你能夠檢查發送按鈕是否至少被推送? –

+0

@TwoFace它不能這樣工作。該方法是'-didFinishWithResult'。 'MFMailComposeViewController'完成,並且上述結果之一發生在電子郵件中。如果有一種黑客方式來查明按鈕是否被按下,我不知道它,但它不會在這個函數中 - 在調用這個函數的時候,按鈕已經被按下或者沒有被按下。 – WendiKidd

+0

如果按下「發送」,您將獲得MFMailComposeResultSent。 如果按下「保存草稿」,您將獲得MFMailComposeResultSaved。 如果按下「刪除草稿」,您將獲得MFMailComposeResultCancelled。 這些結果值與撰寫工作表上的用戶操作直接相關。無法保證郵件實際發生的情況。郵件應用程序是一個單獨的沙箱。 – ScorpionKing2k5

相關問題