2014-11-14 170 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