【问题标题】:Java send gmailJava 发送 gmail
【发布时间】:2017-05-25 21:40:46
【问题描述】:

我正在处理从我的应用程序发送 gmail 的问题,我有以下代码:

public class Notificator {

public static void main(String[] args) {
    Properties props = new Properties();
    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.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("r","");
                }
            });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("from@no-spam.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("to@no-spam.com"));
        message.setSubject("Testing Subject");
        message.setText("Dear Mail Crawler," +
                "\n\n No spam to my email, please!");

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}

}

我收到以下错误:线程“main”中的异常 java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect

因此,我启用了安全性较低的设备的访问权限,并在防火墙中启用了 intellij。

编辑:是的,我有正确的凭据,只是在放在这里之前删除了它们。

【问题讨论】:

  • 所以你的认证是错误的。你真的有一个空白密码吗?还有一个字母的用户名?
  • 不,我只是介绍了我的实际细节。我有正确的,但仍然无法连接。
  • JavaMail 常见问题解答有 tips for debugging connection problems
  • @BillShannon 已经尝试过,但没有成功。
  • 您到底尝试了什么,结果究竟如何? JavaMail 调试输出显示什么?

标签: java gmail jakarta-mail


【解决方案1】:

您需要指定 gmail 帐户详细信息(电子邮件地址和密码),否则您将始终收到授权错误。

这是我之前使用过的示例:

    public JavaMailSender getJavaMailSender() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();

        javaMailSender.setHost("smtp.gmail.com");
        javaMailSender.setPort(587);
        javaMailSender.setUsername("youremailaddress@gmail.com");
        javaMailSender.setPassword("GMAIL PASSWORD HERE");

        javaMailSender.setJavaMailProperties(getMailProperties());
        return javaMailSender;
    }

    private Properties getMailProperties() {
        Properties properties = new Properties();
        properties.setProperty("mail.transport.protocol", "smtp"));
        properties.setProperty("mail.smtp.auth", "true");
        properties.setProperty("mail.smtp.starttls.enable", "true");
        properties.setProperty("mail.debug", "false");
        return properties;
    }

    JavaMailSender javaMailSender = getJavaMailSender();

    private void sendEmail(){
        javaMailSender.send((MimeMessage mimeMessage) -> {
            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            message.setFrom("from@no-spam.com");
            message.setTo("to@no-spam.com");
            message.setSubject("Testing Subject");
            message.setText("Dear Mail Crawler," +
                "\n\n No spam to my email, please!");
        });
    }

【讨论】:

  • 我已经指定了这些,但我只是删除了它们,以免泄露我的凭据。
  • 尝试将 STARTTLS 属性设置为 true 并使用端口 587。Gmail 已通过 STARTTLS 为 SMTP 公开端口 587
  • 试过了,还是没有连接成功。
【解决方案2】:

检查正确的属性:

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.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 2016-09-26
    • 2018-08-14
    • 2013-09-17
    • 1970-01-01
    • 2020-07-12
    • 2013-02-28
    相关资源
    最近更新 更多