2015-04-15 61 views
0

我目前使用的代碼如下:發送Java的電子郵件沒有認證(沒有這樣的提供商例外:SMTP)

String to = "[email protected]"; 
String from = "[email protected]"; 
String host = "127.0.0.1"; 
Properties properties = System.getProperties(); 
properties.setProperty("mail.smtp.host", host); 
Session session = Session.getDefaultInstance(properties); 
try { 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(from)); 
    message.addRecipient(Message.RecipientType.TO, 
           new InternetAddress(to)); 
    message.setSubject("This is the Subject Line!"); 
    message.setText("This is actual message"); 
    Transport.send(message); 
    System.out.println("Sent message successfully...."); 
} catch (MessagingException mex) { 
    mex.printStackTrace(); 
} 

如果我粘貼上面的代碼在我的Java servlet並運行它,但以下情況除外被拋出: javax.mail.NoSuchProviderException: smtp

我也曾嘗試以下這些資源,但無濟於事列出的解決方案:link1link2link3link4

+0

你有郵件服務器上烏爾本地主機上運行? – nafas

+0

郵件服務器的意思是,你能解釋一下嗎? – Selva

+0

我不想在這裏混淆你,首先需要檢查「mx記錄」是什麼。試試這個:嘗試gmail-smtp-in.l.google.com作爲主機而不是 – nafas

回答

0

首先,如果你想使用Gmail從您的程序發送電子郵件,你需要定義STMP主機的Gmail。你當前的主機「127.0.0.1」是本地主機,也就是你自己的電腦?你的電腦上運行了郵件服務器嗎?

在這裏你可以看到一些教程如何發送電子郵件使用Gmail:http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

如果你害怕通過正常的Gmail帳戶信息,然後創建某種測試電子郵件像kselvatest或東西。

你缺少相當多的:

final String username = "[email protected]"; 
final String password = "password"; 

Properties props = new Properties(); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable", "true"); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "587"); 

所以basicly所有你需要補充的是:

1.登陸和密碼,這樣的JavaMail可以使用一些Gmail帳戶

2.declare您想使用哪個郵件服務器

更改String host = "127.0.0.1";String host = "smtp.gmail.com";

3.設置郵件端口

+0

我沒有身份驗證詢問 – Selva

+0

好吧,你用gmail愚弄了一下,最近我能夠發送電子郵件沒有身份驗證,但我們有這樣的方式啓用我們的管理員在域內,但它只能在內部網內工作 – Dashovsky

+0

最後你說我們無法發送郵件沒有身份驗證gmail – Selva

0

對於這個代碼,你應該得到javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;例外

但我懷疑你有一個JRE問題。可能是smtp執行有問題。你爲什麼不從http://www.oracle.com/technetwork/java/javamail/index-138643.html下載java郵件實現並將它添加到你的項目類路徑中,然後嘗試?

+1

最新的JavaMail下載是[這裏](https://java.net/projects/javamail/pages/Home)。 –

1

NoSuchProviderException意味着什麼在你的JavaMail API配置搞砸了。你在哪裏以及如何安裝JavaMail jar文件?

此外,如果它不是來自其他答覆清楚,你要去的唯一途徑,以便能夠發送郵件,而認證是如果你正在運行自己的郵件服務器。你不能用通用的在線電子郵件服務(例如的Gmail)做到這一點。

0

,如果你提供的javax.mail.NoSuchProviderException和JavaMail的調試輸出的完整的堆棧跟蹤這將有助於。因爲你正在一個servlet容器中運行它,所以你可以運行到Bug 6668 -skip unusable Store and Transport classes。更改您的來電Transport.set以下幾點:

final ClassLoader ccl = Thread.currentThread().getContextClassLoader(); 
    Thread.currentThread().setContextClassLoader(Session.class.getClassLoader()); 
    try { 
     Transport.send(message); 
    } finally { 
     Thread.currentThread().setContextClassLoader(ccl); 
    } 

該代碼將找出是哪個運輸類的代碼被允許看到的。這將排除你的代碼中的錯誤。

+0

獲得相同的錯誤尚未解決 – Selva