繁体   English   中英

使用API​​(而非本地主机)从Java发送电子邮件

[英]Sending an Email from Java using APIs, not with localhost

我正在使用此处找到的代码和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)

从第一行可以清楚地看到,主要问题是“无法连接到主机,端口:本地主机”等等。

好的。 因此,有人对我应该使用localhost的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("username@gmail.com", "password");
        }
    }

   public void createAndSendEmailMessage(ArrayList<?> messageContents) throws MessagingException {
       Email email = new Email();
       email.setRecipient(messageContents.get(0) + "");
       email.setSender("username@gmail.com");
       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", "username@gmail.com");
            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();
        }

这试图在本地计算机上使用SMTP服务器。 如果您使用的是Linux,则可以安装sendmail并进行配置...否则,您将需要使用电子邮件提供商的SMTP服务。

这并不容易:您需要身份验证,并且需要SSL。

更新:您正在使用gmail,因此您应该能够查看gmail SMTP服务器是什么以及它需要什么配置。 可能是smtp.gmail.commail.gmail.com 它绝对需要身份验证,并且绝对需要SSL。

首先,您需要将localhost更改为正确的SMTP服务器地址。 在您链接到的教程的底部,将介绍身份验证。 它将需要您的gmail用户名和密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM