2010-11-16 47 views
0

我寫了代碼發送電子郵件。它的工作正常,但我的目標是:如何處理Messaging.sendEmail()中的錯誤?

當有人發送到不存在的電子郵件地址,我想記錄結果爲'假'或'失敗'等等(當電子郵件地址是有效的,只要說'成功' )

我已經用下面的代碼試過2件東西。

  1. 提供了非電子郵件字符串'foo @!'

  2. 提供非現有的電子郵件地址 '[email protected]'

結果:

執行殼1而引起的代碼進入catch block從而html頁面上輸出錯誤消息這是預期的。

執行情況2導致代碼返回'ok sent!'

而幾分鐘後,我收到的電子郵件是傳遞失敗。

我的猜測是SendEmailResult對象的isSuccess()沒有真正負責不存在的電子郵件地址檢查。它只關心電子郵件是否被解僱?

有沒有辦法記錄電子郵件帳戶是否不存在,所以我可以在我的Apex代碼中記錄這種情況?

try { 
    Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new 
      Messaging.SingleEmailMessage[] { mail }); 

    resultMail[0].getErrors(); 

    //display success or error message 
    if (resultMail[0].isSuccess()) { 
     response = 'ok sent!'; 
    } else { 
     response = resultMail[0].getErrors().get(0).getMessage(); 
    } 

    //log 
    boolean isSuccess = resultMail[0].isSuccess(); 
    Integer out = EmailLogger.logEmailSent(this, isSuccess); 
} catch (System.EmailException ex) { 
    system.debug('============== email exception caught!!!============='); 
    response = ex.getMessage(); 
} 

回答

2

電子郵件(SMTP)是一個存儲和轉發協議,在發送的時候,你不能告訴目標電子郵件地址是不存在的,你只能找到了這一點,一旦消息得到實際到最終的目標服務器。

+0

我也閱讀文檔,似乎不支持即時日誌記錄:(感謝信息。 – 2010-11-16 08:54:27

0

,如果有辦法找到電子郵件地址,它是否真的存在與否,垃圾郵件發送者可能試圖蠻力攻擊 - 試圖電子郵件的每一個可能的組合和發送無限的垃圾郵件:)

感謝上帝,這不是可能。