Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从Windows 8发送邮件_Java_Smtp_Jakarta Mail - Fatal编程技术网

Java 无法从Windows 8发送邮件

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

我们编写了通过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 = "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在两种执行环境中都是相同的。