2013-02-11 185 views
0

我發送消息給無效的電子郵件地址,但我沒有得到任何異常。它像一切都很好,在調試器中表現爲一切正常。傳輸sendMessage不會拋出異常

private MailService() { 
    Properties props = new Properties(); 
    props.put("mail.transport.protocol", "smtps"); 
    props.put("mail.smtps.host", HOST); 
    props.put("mail.smtps.auth", "true"); 
    props.put("mail.smtp.from", FROM); 
    props.put("mail.smtps.quitwait", "false"); 

    mailSession = Session.getDefaultInstance(props); 
    mailSession.setDebug(true); 
} 

public static void sendMessage(String recipient, String subject, 
     String message) throws MessagingException { 

    if (mailService == null) { 
     mailService = new MailService(); 
    } 

    MimeMessage mimeMessage = new MimeMessage(mailSession); 

    mimeMessage.setFrom(new InternetAddress(FROM)); 
    mimeMessage.setSender(new InternetAddress(FROM)); 
    mimeMessage.setSubject(subject); 
    mimeMessage.setContent(message, "text/plain"); 

    mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); 

    Transport transport = mailSession.getTransport("smtps"); 
    transport.connect(HOST, PORT, USER, PASSWORD); 

    transport.sendMessage(mimeMessage, 
      mimeMessage.getRecipients(Message.RecipientType.TO)); 
    transport.close(); 

} 

我嘗試了不同的電子郵件地址,併爲所有它沒有拋出異常。我錯了什麼?

+0

什麼*確切*你的意思是「無效」?你能給個例子嗎?例如,沒有郵箱的電子郵件地址與語法無效的電子郵件地址不同。 – 2013-02-11 17:55:25

+0

@Jon Skeet:任何愚蠢的地址,例如:[email protected],我也嘗試從郵件發送郵件,顯然它說無效的電子郵件。 – 2013-02-11 18:01:57

回答

6

一個TransportListener不會告訴你任何東西比一個異常更會告訴你。你的問題的真正答案是在JavaMail FAQ

+0

謝謝我明白,爲什麼excpetion不來。你能告訴我,我該如何解決這個問題? – 2013-02-11 19:45:59

+0

我做到了。您是否閱讀過JavaMail FAQ?你無法修復它。 – 2013-02-11 23:37:35

+0

是的,我已閱讀。我的意思是不知道如果我的郵件被髮送或不知道如何? – 2013-02-12 10:36:09

0

你需要的是一個TransportListener,其連接到您的運輸實例:
加入TransportListener

transport.addTransportListener(new MyTransportListener()); 

MyTransportListener.java

public class MyTransportListener implements TransportListener{ 

    @Override 
    public void messageDelivered(TransportEvent te) { 
     System.out.println("Everything went fine!"); 
    } 

    @Override 
    public void messageNotDelivered(TransportEvent te) { 
     System.out.println("ERROR: " + te.getMessage()); 
     Address[] invalidAddresses = te.getInvalidAddresses(); 
     Address[] validUnsentAddresses = te.getValidUnsentAddresses(); 
     //make something happen 
    } 

    @Override 
    public void messagePartiallyDelivered(TransportEvent te) { 
     messageNotDelivered(te); 
    } 

} 

我din't嘗試這個(但),但我認爲這正是你所需要的...
編輯
我錯了,這會不會與你的問題幫助

+0

謝謝,我試過你的建議。但問題是它說「一切都很好!」當電子郵件地址不存在時。 – 2013-02-11 19:20:25

+0

因此您連接到的郵件服務器不驗證地址。 Bill Shanon的回答有助於理解這個問題 – 2013-02-11 19:27:05

+0

我明白了,但我該如何解決這個問題? – 2013-02-11 19:46:47