Java电子邮件发送API电子邮件没有发送..挂断程序

时间:2015-01-31 18:50:08

标签: java email javamail

我是java电子邮件发送程序的代码。但是当我点击发送按钮时,按钮会出现挂起模式&程序仍在运行,但邮件没有发送。 我无法发现问题。有谁能够帮我... 代码如下。

    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.starttls.enable", "false");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("myid@gmail.com", "password");
                }
            }
    );

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("myid@gmail.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("senderid@gmail.com"));
        message.setSubject("Demo mail");
        message.setText("Hello, world!");
        Transport.send(message);

        JOptionPane.showMessageDialog(this, "Message sent!");
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, e);
    }

我的电子邮件帐户尚未激活两步验证服务。 它也适用于Outlook电子邮件发送软件..我测试过。

但不适用于我的java程序。

2 个答案:

答案 0 :(得分:0)

我相信应该扩展Authenticator类。这是一个适合我的例子:

public class SendEmail {

    public SendEmail () {}

    public void send (String text){
        String host = "smtp.gmail.com";
        String username = "user@email.com";
        String password = "password";
        Properties props = new Properties();
        // set any needed mail.smtps.* properties here
        Session session = Session.getInstance(props, new GMailAuthenticator("user", "password"));
        Message msg = new MimeMessage(session);
        Transport t;
        try {
            msg.setText(text);
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress("stackkinggame@gmail.com", "Stack King"));
            t = session.getTransport("smtps");
            t.connect(host, username, password);
            t.sendMessage(msg, msg.getAllRecipients());
            t.close();
            Gdx.app.log("Email", "Message sent successfully.");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    class GMailAuthenticator extends Authenticator {
        String user;
        String pw;
        public GMailAuthenticator (String username, String password)
        {
            super();
            this.user = username;
            this.pw = password;
        }
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(user, pw);
        }
    }
}

答案 1 :(得分:0)

首先,修复程序中的所有common JavaMail mistakes

其次,由于您使用的是Gmail,请确保您已enabled support for less secure apps

最后,您需要提供比“它不起作用”更多的详细信息。 JavaMail debug output会有所帮助。