2013-08-07 176 views
0

這是我的代碼:通過Java API發送郵件:即使附件失敗,如何發送郵件?

try { 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(from)); 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
    message.setSubject(messageSubject); 
    message.setText(messageBody); 

    BodyPart messageBodyPart1 = new MimeBodyPart(); 
    messageBodyPart1.setText(messageBody); 
    MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
    String filename = attachment; 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart2.setDataHandler(new DataHandler(source)); 
    messageBodyPart2.setFileName(filename); 
    Multipart multipart = new MimeMultipart(); 
    multipart.addBodyPart(messageBodyPart1); 
    multipart.addBodyPart(messageBodyPart2);  
    message.setContent(multipart); 

    Transport.send(message); 
} catch (MessagingException mex) { 
    mex.printStackTrace(); 
} 

我怎麼還發送電子郵件,即使由於某種原因,郵件附件失敗?自動櫃員機如果附件失敗,電子郵件不會發送,這在我的情況是不好的。 我是否應該使用另一個try/catch語句,並且最終應該如何? 進出口新的爪哇(3-4周)

編輯: 改變了我的代碼,這一點,但沒有工作

try { 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(from)); 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
    message.setSubject(messageSubject); 
    message.setText(messageBody); 

    try { 
     BodyPart messageBodyPart1 = new MimeBodyPart(); 
     messageBodyPart1.setText(messageBody); 
     MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
     String filename = attachment; 
     DataSource source = new FileDataSource(filename); 
     messageBodyPart2.setDataHandler(new DataHandler(source)); 
     messageBodyPart2.setFileName(filename); 
     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(messageBodyPart1); 
     multipart.addBodyPart(messageBodyPart2);  
     message.setContent(multipart); 
    } catch (Exception e) { 
     message.setText(messageBody2); 
     e.printStackTrace(); 
    } 

    Transport.send(message); 

} catch (MessagingException mex) { 
    mex.printStackTrace(); 
} 
+0

如果附件沒有附加,您會希望*發送郵件嗎? –

+0

因爲此電子郵件用於通知我們的團隊,如果持續集成測試失敗。如果測試失敗,我們將不會在集成服務器上部署。 –

+0

什麼是stackTrace你在編輯代碼後得到了什麼? – rahulserver

回答

4

是。我會希望能夠做到(僞代碼如下)

try { 
    // set up standard message 
    try { 
    // perform attachment 
    } 
    catch { 
    // perhaps amend your original message to indicate attachment failed 
    } 
    send(); 
} 
catch { 
    // handle a complete failure here... 
} 

雖然我會專注於爲什麼附件失敗。這甚至有意義嗎?

您可以採用兩種不同的方法來構建/發送,這樣您就不必在發生故障時清理/修改您的消息。這可能是更清潔的方法,例如(再次僞代碼)

try { 
    sendMessageWithAttachment(); 
} 
catch { 
    sendMessageWithoutAttachment(); 
} 
+0

我改變了我的代碼,但林不知道我做對了。編輯我的問題 –

+0

我會試試! –

+0

這個方法奏效,謝謝! (使用兩種不同的方法) –