【问题标题】:com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required (Java Mail)com.sun.mail.smtp.SMTPSendFailedException:530-5.5.1 需要验证(Java 邮件)
【发布时间】:2016-09-28 10:08:38
【问题描述】:

所以我试图让 Java Mail 工作,因为我在这个网站上看到的其他答案都不起作用,我不得不假设在过去一年左右发生了一些变化。因此,如果这个问题看起来像是重复的,我表示歉意,我无法弄清楚为什么它不起作用。以下是我的代码:

try{
        Properties property = new Properties();
        property.setProperty("mail.smtp.host", "smtp.gmail.com");
        property.setProperty("mail.smtp.starttls.enable", "true");
        //property.setProperty("mail.smpt.port", "25");
        property.setProperty("mail.smtp.user", "myEmail@gmail.com");
        property.setProperty("mail.smtp.auth", "true");

        System.out.println("Mail Check 1");

        Session session = Session.getDefaultInstance(property);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("myEmail@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("myEmail@gmail.com"));

        System.out.println("Mail Check 2");

        message.setSubject("Oil Error Report");
        message.setText(emailMessage);

        System.out.println("Mail Check 3");

        Transport transport = session.getTransport("smtps");
        transport.connect("smtp.gmail.com",465,"myEmail@gmail.com","myPassword");
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();

        System.out.println("Mail Sent");
    }catch(Exception ex){
        System.out.println("Mail fail");
        System.out.println(ex);
    }

我起床到 Mail Check 3,然后我得到以下异常:

com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 u3sm10254140ioi.27 - gsmtp

这没有意义,因为我将 mail.smtp.auth 设置为 true。我查看了过去的答案,并在发布之前尝试让它工作一段时间。我假设这很简单..任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: java gmail jakarta-mail


    【解决方案1】:
    public class EmailSender {    
        public void sendEmail(String emailMessage){
    
            try{
                final String fromEmail = ""; //requires valid gmail id
                final String password = ""; // correct password for gmail id
                final String toEmail = ""; // can be any email id 
    
                System.out.println("TLSEmail Start");
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
                props.put("mail.smtp.port", "587"); //TLS Port
                props.put("mail.smtp.auth", "true"); //enable authentication
                props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
    
                    //create Authenticator object to pass in Session.getInstance argument
                Authenticator auth = new Authenticator() {
                    //override the getPasswordAuthentication method
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(fromEmail, password);
                    }
                };
                Session session = Session.getInstance(props, auth);
    
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(fromEmail));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
    
                System.out.println("Mail Check 2");
    
                message.setSubject("Oil Error Report");
                message.setText(emailMessage);
    
                System.out.println("Mail Check 3");
    
                Transport.send(message);
                System.out.println("Mail Sent");
            }catch(Exception ex){
                System.out.println("Mail fail");
                System.out.println(ex);
            }
        }
    }
    

    这是让它工作所需的代码!现在是 2014 年 11 月,目前适用于 gmail!我希望这段代码能帮助节省一些时间,我花了很多时间!除了此代码,您还必须更改您的电子邮件设置以允许允许此类电子邮件。第一次尝试时,您会收到一封来自 google 的电子邮件,它将引导您完成更改设置。

    谢谢,祝你好运!

    【讨论】:

    • 啊,它对我有用!非常感谢。我自己的代码有很多错误。一件事会得到解决,然后另一件事会弹出,似乎永远不会结束。你摇滚。
    • 耶!很高兴它帮助了某人!让所有的辛苦都值得了。祝你有美好的一天!
    • 前几天我也遇到了类似的问题,上面的代码对我不起作用,我用的是javax mail 1.6.1。 Transport.send(message) 调用期间未调用身份验证器。我在这里发布了我的食谱:stackoverflow.com/a/49257256/2753863
    【解决方案2】:

    您查看网址了吗?您是否按照那里的所有步骤进行操作?发生了什么?

    您需要修复这些common mistakes

    请注意,由于您使用的是“smtps”协议,因此 的 mail.smtp.* 属性适用。但这没关系,因为您调用 connect 方法的方式无论如何都不需要它们。

    【讨论】:

    • 是的,我相信我做到了,我查看了你发给我的链接,我没有做任何他们没有做的事情......你看到我在做还是不做那里的事情?
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多