通过Java发送电子邮件 – javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:587;

我目前正在开发一个涉及创建.jar文件的项目。 以下是要实现的,我应该导出/读取朋友注册表的路径,一旦完成,我应该通过电子邮件返回结果。 整个概念是创建jar文件,一旦点击它,我通过我的电子邮件获得结果,因为我实际上是通过电子邮件发送的。

(我希望这是有道理的)

首先,我结合以下代码实际读取注册表并显示键(我从读取/写入注册表的堆栈溢出的流行post得到它)所以读取过程工作正常,现在我的问题是与电邮代码,

(我不太确定这个代码的原始所有者是谁,但完全归功于他)我试图让这个电子邮件代码的基本概念起作用,这样我就可以继续将我的jar文件发送为附件并以用户点击jar文件的方式将其链接到我的代码,注册表结果将通过电子邮件发送给我。

import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailCode { public static void main(String[] args) throws Exception { final String smtp_host = "smtp.gmail.com"; final String smtp_username = "user@gmail.com"; final String smtp_password = "password"; final String smtp_connection = "TLS"; // Use 'TLS' or 'SSL' connection final String toEmail="tomail@hotmail.com"; final String fromEmail="**@gmail.com"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); if (smtp_connection.equals("TLS")) { props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.port", "587"); } else{ props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.port", "465"); } Session session = Session.getInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(smtp_username, smtp_password); } }); try { Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(fromEmail, "NoReply")); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, "Mr. Recipient")); msg.setSubject("Welcome To JavaMail API"); msg.setText("JavaMail API Test - Sending email example through remote smtp server"); Transport.send(msg); System.out.println("Email sent successfully..."); } catch (AddressException e) { throw new RuntimeException(e); } catch (MessagingException e) { throw new RuntimeException(e); } } } 

这是我收到的错误消息:

 Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587; nested exception is: java.net.SocketException: Permission denied: connect 

以下代码可以帮助您解决您的问题,它的工作……..

 import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class Email { private static String USER_NAME = "username"; // GMail user name (just the part before "@gmail.com") private static String PASSWORD = "password"; // GMail password private static String RECIPIENT = "xxxxx@gmail.com"; public static void main(String[] args) { String from = USER_NAME; String pass = PASSWORD; String[] to = { RECIPIENT }; // list of recipient email addresses String subject = "Java send mail example"; String body = "hi ....,!"; sendFromGMail(from, pass, to, subject, body); } private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) { Properties props = System.getProperties(); String host = "smtp.gmail.com"; props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.ssl.trust", 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); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); InternetAddress[] toAddress = new InternetAddress[to.length]; // To get the array of addresses for( int i = 0; i < to.length; i++ ) { toAddress[i] = new InternetAddress(to[i]); } for( int i = 0; i < toAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, toAddress[i]); } 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 ae) { ae.printStackTrace(); } catch (MessagingException me) { me.printStackTrace(); } } } 

你正在设置smtp_host但你永远不会使用它。

 javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 587; 

您正在尝试连接到’localhost’而不是gmail.com。 那是因为你没有在任何地方设置mail.smtp.host

为什么要在 -TLS情况下设置SSL套接字工厂?

请检查您的防病毒/恶意软件。

如果您使用的是企业开发人员计算机,请与管理员联系以删除该访问保护规则。

我遇到了同样的问题,我的McAfee阻止了所有请求。

阻止端口阻塞规则C:\ PROGRAM FILES \ JAVA \ JDK1.8.0_74 \ BIN \ JAVAW.EXE防病毒标准保护:防止群发邮件蠕虫发送邮件0:0:0:0:0:ffff:4a7d: 7e6d:587

在Access保护日志中找到了这个,并请求我的管理员删除该规则。

试试这可能对你有帮助。