Java 无法从Windows 8发送邮件
我们编写了通过Gmail SMTP服务器发送邮件的代码。它在Windows7机器上运行良好,但在Windows8机器上不工作 配置Java 无法从Windows 8发送邮件,java,smtp,jakarta-mail,Java,Smtp,Jakarta Mail,我们编写了通过Gmail SMTP服务器发送邮件的代码。它在Windows7机器上运行良好,但在Windows8机器上不工作 配置 Outgoing Mail (SMTP) Server requires TLS or SSL: smtp.gmail.com (use authentication) Use Authentication: Yes Port for TLS/STARTTLS: 587 Port for SSL: 465 代码 final String username = "a
Outgoing Mail (SMTP) Server
requires TLS or SSL: smtp.gmail.com (use authentication)
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465
代码
final String username = "aaa@gmail.com";
final String password = "aaa";
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");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
String itemNames = getItemNames(itemSet);
String purchaseNote = "";
if (delAddress == null) {
purchaseNote = "You can collect the items in our store by giveing the tracking number with in 10 days.";
} else {
purchaseNote = "N/A";
}
Message message = new MimeMessage(session);
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("arjun@gmail.com"));
message.setSubject("SuperDeal Purchase Detail");
message.setText("Dear " + customer.getFullName() + "\n\n" + "Purchase Items: " + itemNames + "\n" + "Total Cost: " + totalCost + "\n" + "Tracking No: " + trackingNumber + "\n" + "Purchase Note: " + purchaseNote + "\n\n" + "Note: If you have any queries please call to our hot line 0112345647 any time.");
Transport.send(message);
} catch (MessagingException exception) {
LOGGER.error(exception.getMessage(), exception);
}
错误
68352 [http-bio-8080-exec-55] ERROR com.superdeal.mail.MailSender - can't determine local email address
javax.mail.MessagingException: can't determine local email address
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
at com.superdeal.mail.MailSender.send(MailSender.java:66)
at com.superdeal.servlet.AddOrderServlet.processRequest(AddOrderServlet.java:91)
at com.superdeal.servlet.AddOrderServlet.doPost(AddOrderServlet.java:239)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
71600 [http-bio-8080-exec-54] ERROR com.superdeal.mail.MailSender - can't determine local email address
javax.mail.MessagingException: can't determine local email address
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
at com.superdeal.mail.MailSender.send(MailSender.java:66)
at com.superdeal.servlet.AddOrderServlet.processRequest(AddOrderServlet.java:91)
at com.superdeal.servlet.AddOrderServlet.doPost(AddOrderServlet.java:239)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
请告诉我为什么这在Windows7中工作正常,而在Windows8中不工作。您没有在邮件中设置发件人地址,而JavaMail无法确定要使用的地址。后者通常发生,因为JDK无法确定本地主机的主机名,可能是因为它使用DHCP获取IP地址,也可能是因为名称服务在本地计算机上配置不正确
在任何情况下,简单的解决方法是在消息上设置一个发件人地址,您无论如何都应该这样做。Java被设计成不依赖操作系统,因此在构建和运行代码的方式上肯定存在一些固有的差异。库版本和生成过程是否相同?Windows 8上是否有任何防病毒软件?该错误意味着缺少发件人地址是问题所在。能否发布InetAddress me=InetAddress.getLocalHost()的输出;System.out.println(me.getHostName());在发生故障的Win8机器上执行时?请同时发布Java版本和JavaMail版本。正如@tripleee提到的,消息的“发件人”地址有问题。但真正的问题是为什么它在Win7上工作而不是在Win8上工作?能否确保java properties user.name在两种执行环境中都是相同的。