2014-11-14 168 views
2

我使用的代碼,發現這裏的API:http://www.tutorialspoint.com/java/java_sending_email.htm發送電子郵件,而不是本地主機與

當我運行代碼,我的錯誤輸出是這樣的:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1; 
    nested exception is: 
    java.net.ConnectException: Connection refused 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2053) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697) 
    at javax.mail.Service.connect(Service.java:364) 
    at javax.mail.Service.connect(Service.java:245) 
    at javax.mail.Service.connect(Service.java:194) 
    at javax.mail.Transport.send0(Transport.java:253) 
    at javax.mail.Transport.send(Transport.java:124) 

由於很明顯,從第一行看,主要問題是「無法連接到主機,端口:本地主機」等等等等。

好的。那麼,有沒有人有任何想法我應該使用INSTEAD的本地主機?這完全不是我的專業領域。

(錯誤日誌是相當長的時間,但是,有很多的代碼,被周圍的反彈。如果因任何原因,你想整個事情,讓我知道,我會更新)

更新:

我想感謝StackOverflow社區的所有帖子,我已經看到這個主題的網站,以及幫助我​​回答這個問題的人。請在下面找到我的完成代碼,它將收到一封電子郵件對象(來自另一個班級)併發送出去!請注意,我拿出了用戶名和密碼的Gmail帳戶,顯然:)

import java.util.ArrayList; 
import java.util.Properties; 

import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendEmail 
{ 
    private class SMTPAuthenticator extends Authenticator 
    { 
     public PasswordAuthentication getPasswordAuthentication() 
     { 
      return new PasswordAuthentication("[email protected]", "password"); 
     } 
    } 

    public void createAndSendEmailMessage(ArrayList<?> messageContents) throws MessagingException { 
     Email email = new Email(); 
     email.setRecipient(messageContents.get(0) + ""); 
     email.setSender("[email protected]"); 
     email.setSubject(messageContents.get(1) + ""); 
     email.setMessageContent(messageContents.get(2)+""); 
     sendEmailMessage(email); 
    } 



    public void sendEmailMessage(Email email) throws MessagingException { 

      // Get system properties 
     Properties props = System.getProperties(); 
     props = new Properties(); 
      props.put("mail.smtp.user", "[email protected]"); 
      props.put("mail.smtp.host", "smtp.gmail.com"); 
      props.put("mail.smtp.port", "587"); 
      props.put("mail.smtp.starttls.enable","true"); 
      props.put("mail.smtp.debug", "true"); 
      props.put("mail.smtp.auth", "true"); 
      props.put("mail.smtp.socketFactory.port", "587"); 
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props.put("mail.smtp.socketFactory.fallback", "false"); 


      SMTPAuthenticator auth = new SMTPAuthenticator(); 
     Session session = Session.getInstance(props, auth); 
      session.setDebug(false); 

     MimeMessage msg = new MimeMessage(session); 
      msg.setText(email.getMessageContent()); 
      msg.setSubject(email.getSubject()); 
      msg.setFrom(new InternetAddress(email.getSender())); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email.getRecipient())); 

      Transport transport = session.getTransport("smtps"); 
      transport.connect("smtp.gmail.com", 465, "username", "password"); 
      transport.sendMessage(msg, msg.getAllRecipients()); 
      transport.close(); 

    } 

} 

因爲我覺得很討厭,當人們張貼代碼的一部分,而不是調用它的代碼,我要去向你展示,以及!

ArrayList<String> emailInfo = new ArrayList<String>(); 
     emailInfo.add(userEmailAddress.getText()+"@gmail.com"); 
     emailInfo.add("An account has been created for you!"); 
     emailInfo.add("Here is a message"); 
     SendEmail newEmail = new SendEmail(); 
     try { 
      newEmail.createAndSendEmailMessage(emailInfo); 
     } catch (MessagingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
+0

看看'JavaMail' API。它有幾個例子。 – 2014-11-14 17:54:33

回答

3

這是試圖在本地機器上使用SMTP服務器。如果您在Linux機器上,則可以安裝sendmail並對其進行配置......否則,您需要查看使用您的電子郵件提供商的SMTP服務。

這並不簡單:您需要身份驗證,您需要SSL。

更新:您正在使用Gmail,所以您應該能夠查看Gmail SMTP服務器是什麼以及它需要什麼配置。可能是smtp.gmail.commail.gmail.com。它絕對需要認證,它絕對需要SSL。

作爲初學者,您需要將localhost更改爲正確的SMTP服務器地址。並且身份驗證在您鏈接的教程底部進行了介紹。它會需要你的Gmail用戶名和密碼。

+0

嘿,非常感謝,我會在此工作一段時間,讓你知道它是怎麼回事! – iMatthewCM 2014-11-14 17:53:41

+0

我可以打擾你檢查一下我的最新更新嗎?我想我正在取得進展? – iMatthewCM 2014-11-14 18:08:21

+0

@Joodoo幾乎是正確的,但我想你想撤消對設置SMTP主機的屬性名稱的更改。你已經正確地改變了*值*(在'host'變量中),但是屬性*名稱*應該返回。 – 2014-11-14 18:18:30

相關問題