2013-07-04 55 views
1

我正在嘗試編寫一種基於參數發送電子郵件的方法,它完全適用於CentOS和OSX。但是,該方法在Windows上無法正常工作(即使在Windows上重新編譯時)以及其他一些Linux操作系統 - 它會引發MessagingException。有沒有人有任何想法,我可以如何解決這個在Windows上工作?謝謝!在某些機器上拋出MessagingException,但在其他機器上工作正常

private static void sendEmail(String towhom, String subject, String body) { 
    String host = "smtp.gmail.com", from = "myemail", pass = "mypassword"; 
    Properties props = System.getProperties(); 
    Scanner scan = new Scanner(System.in); 

    try { 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.user", from); 
    props.put("mail.smtp.password", pass); 
    props.put("mail.smtp.port", "587"); 
    props.put("mail.smtp.auth", "true"); 

    Session session = Session.getDefaultInstance(props, null); 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(from)); 

    InternetAddress toAddress = new InternetAddress(towhom); 

    message.addRecipient(Message.RecipientType.TO, toAddress); 
    message.setSubject(subject); 
    message.setText(body); 

    Transport transport = session.getTransport("smtp"); 
    transport.connect(host, from, pass); 
    transport.sendMessage(message, message.getAllRecipients()); 
    transport.close(); 
    } 
    catch(AddressException e) { 
    System.out.println("Invalid Email Address."); 
    } 
    catch(MessagingException e) { 
    System.out.print("\nInvalid Email Address, please reenter it: "); 
    sendEmail(scan.nextLine(), subject, body); 
    } 
} 
+1

你可以添加堆棧跟蹤?另外,你可以從你的linux終端上telnet smtp.gmail.com 587嗎? – JHS

+0

'MessagingException'catch塊中的'e.printStackTrace();'。 – JHS

+0

這是太長,只貼:http://pastebin.com/02xP4171 –

回答

4

因此,當我試圖發送郵件時,Avast Antivirus導致異常被拋出。如果有其他人有這個問題,誰發現這個網頁:

打開Avast,然後單擊安全選項卡。然後點擊左側的AntiVirus標籤。在此之下,單擊Mail Shield並轉到設置。不要勾選「掃描出站郵件(SMTP)」,它會像魅力一樣工作。

2

您的代碼沒有問題。看上去不錯。

根據JavaMail FAQ's。以下可能是問題 -

  • 有一個防火牆或防病毒程序攔截您的請求。
  • 您的JDK安裝出現問題,導致它無法爲受信任的證書頒發機構查找證書。
  • 您正在運行在覆蓋了JDK的可信證書頒發機構列表的應用程序服務器中。

如果禁用防火牆和/或防病毒軟件不能解決問題,那麼您可以嘗試重新安裝JDK並進行測試。

+0

我確信堆棧跟蹤會告訴他要查找什麼。 – andy256

+0

謝謝!原來是avast!阻止它而不是Windows防火牆。禁用avast!允許它無誤地運行。 –

相關問題