首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用JavaMail api发送邮件

无法使用JavaMail api发送邮件
EN

Stack Overflow用户
提问于 2013-03-19 03:11:39
回答 1查看 4.8K关注 0票数 1

我正在尝试使用以下代码发送邮件:

代码语言:javascript
复制
java.awt.EventQueue.invokeLater(
                new Runnable() {

                    @Override
                    public void run() {

                        new SwingWorker<Void, Integer>() {

                            String to = "xx@gmail.com";
                            // Sender's email ID needs to be mentioned
                            String from = "xexx@gmail.com";
                            // Assuming you are sending email from localhost
                            String host = "localhost";
                            // Get system properties
                         //   Properties properties = System.getProperties();

                            // Setup mail server


                            protected Void doInBackground() throws Exception {
                                try {
Properties properties =  new Properties();
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.starttls.enable", "true");
        // Get the default Session object.
        Session session = Session.getDefaultInstance(properties);

                                    // Create a default MimeMessage object.
                                    MimeMessage message = new MimeMessage(session);

                                    // Set From: header field of the header.
                                    message.setFrom(new InternetAddress(from));

                                    // Set To: header field of the header.
                                    message.addRecipient(Message.RecipientType.TO,
                                            new InternetAddress(to));

                                    // Set Subject: header field
                                    message.setSubject("This is the Subject Line!");

                                    // Now set the actual message
                                    message.setText("Message" + jTextField1.getText() + " xx " + jTextField2.getText());

                                    // Send message
                                    Transport.send(message);

                                } catch (Exception x) {
                                    x.printStackTrace();
                                }
                                return null;
                            }

                            protected void process() {

                            }

                            protected void done() {
                                try {

                                    JOptionPane.showMessageDialog(null, "You'll get a response from our team shortly !");

                                } catch (Exception x) {
                                }

                            }
                        }.execute();
                    }

在调用上面的代码时,我得到一个异常:

代码语言:javascript
复制
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is:
    java.net.SocketException: Permission denied: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
    at javax.mail.Service.connect(Service.java:295)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at ims.Activation$5$1.doInBackground(Activation.java:374)
    at ims.Activation$5$1.doInBackground(Activation.java:327)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at javax.swing.SwingWorker.run(SwingWorker.java:335)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.SocketException: Permission denied: connect
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
    ... 15 more

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-19 03:19:09

除非您在本地环境中运行邮件服务器,否则需要通过其他邮件属性指定一个:

代码语言:javascript
复制
properties.put("mail.smtp.host", aHost);

例如,如果您使用的是Gmail中继,您将拥有:

代码语言:javascript
复制
properties.put("mail.smtp.host", "smtp.gmail.com");

此外,还需要为会话设置mail.smtp.auth属性。

代码语言:javascript
复制
properties.put("mail.smtp.auth", true);

根据您最终使用的主机,您可能还需要提供身份验证信息。例如,同样使用Gmail中继:

代码语言:javascript
复制
Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("someUserName", "somePassword");
        }
    }
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15484940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档