java - Windows 8 无法发送邮件

标签 java smtp jakarta-mail

我们编写了通过 Gmail SMTP 服务器发送邮件的代码。它在 Windows 7 机器上运行良好,但在 Windows 8 机器上不起作用。

配置

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 无法发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456861/

相关文章:

java - 如何部署和运行表盘服务

http - MIME 和内容类型之间有区别吗?

c# - 使用 SmtpClient (C#) 发送大量邮件需要很长时间

Java邮件 : AUTH NTLM failed

java - 获取 javax.mail.NoSuchProviderException : imap when trying to poll a mail server

java - 我必须如何设置自己的 hibernate 连接?

java - JTextPane 和前景色

java - 使用 Java 实现电子邮件队列

java - 我的内联图像未在 java 邮件 API 中加载,并带有其他一些 HTML 内容

java - 从图库中选择图像并在 ImageView 中显示