Javamail API异常-需要身份验证

Javamail API异常-需要身份验证,java,email,jakarta-mail,Java,Email,Jakarta Mail,我正在使用以下代码从发送邮件 public class Test { private String SMTP_HOST_NAME = "smtp.bizmail.yahoo.com"; private String SMTP_AUTH_USER = "mymail@domain.com"; private String SMTP_AUTH_PWD = "mypassword"; private String SMTP_MAIL_PORT = "587";

我正在使用以下代码从发送邮件

public class Test {

    private String SMTP_HOST_NAME = "smtp.bizmail.yahoo.com";
    private String SMTP_AUTH_USER = "mymail@domain.com";
    private String SMTP_AUTH_PWD = "mypassword";
    private String SMTP_MAIL_PORT = "587";  

    public void postMail(String recipient, String subject, String message)
    {
        Properties props = new Properties();

        SMTPAuthenticator authenticator = new SMTPAuthenticator();
        props.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.host", SMTP_HOST_NAME);
        props.setProperty("mail.smtp.port", SMTP_MAIL_PORT);
        props.setProperty("mail.smtp.starttls.enable","true");
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.debug", "true");

        Session session = Session.getInstance(props, authenticator);
        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(SMTP_AUTH_USER));
            msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(recipient));
            msg.setSubject(subject);
            msg.setContent(message, "text/html");
            Transport.send(msg);
            System.out.println("Email send successfully Done");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            String username = SMTP_AUTH_USER;
            String password = SMTP_AUTH_PWD;
            return new PasswordAuthentication(username, password);
        }
    }

    public static void main(String[] args) {
        Test s = new Test();
        s.postMail("sometestmail@test.com", "Test Subject", "Test Mail");
    }
}     
从上面的代码,我能够成功地发送电子邮件,但现在我得到了例外

javax.mail.MessagingException: 530 5.7.1 Authentication required 
雅虎smtp服务器或其他方面有什么变化吗

这是斯塔克斯特雷斯

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG: SMTPTransport trying to connect to host "smtp.bizmail.yahoo.com", port 587
DEBUG SMTP RCVD: 220 smtp.bizmail.yahoo.com ESMTP ready
DEBUG: SMTPTransport connected to host "smtp.bizmail.yahoo.com", port: 587
DEBUG SMTP SENT: EHLO ET-3-PC
DEBUG SMTP RCVD: 250-smtp.bizmail.yahoo.com
250-PIPELINING
250-SIZE 41697280
250-8 BITMIME
250 STARTTLS

DEBUG SMTP Found extension "PIPELINING", arg ""
DEBUG SMTP Found extension "SIZE", arg "41697280"
DEBUG SMTP Found extension "8", arg "BITMIME"
DEBUG SMTP Found extension "STARTTLS", arg ""
DEBUG SMTP: use8bit false
DEBUG SMTP SENT: MAIL FROM:<mailer@fundoospace.com>
DEBUG SMTP RCVD: 530 5.7.1 Authentication required

DEBUG SMTP SENT: QUIT
javax.mail.SendFailedException: Sending failed;
  nested exception is: 
    javax.mail.MessagingException: 530 5.7.1 Authentication required

    at javax.mail.Transport.send0(Transport.java:219)
    at javax.mail.Transport.send(Transport.java:81)
    at com.einsteiner.util.SendMailToUser.postMail(SendMailToUser.java:67)
    at com.einsteiner.util.SendMailToUser.main(SendMailToUser.java:197)
DEBUG:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,sun Microsystems,Inc]
调试SMTP:useEhlo true,useAuth true
调试SMTP:useEhlo true,useAuth true
调试:SMTPTransport正在尝试连接到主机“smtp.bizmail.yahoo.com”,端口587
调试SMTP RCVD:220 SMTP.bizmail.yahoo.com ESMTP就绪
调试:SMTPTransport已连接到主机“smtp.bizmail.yahoo.com”,端口:587
已发送调试SMTP:EHLO ET-3-PC
调试SMTP RCVD:250-SMTP.bizmail.yahoo.com
250-流水线
250号41697280
250-8位MIME
250标准
调试SMTP找到扩展名“管道”,arg“”
调试SMTP找到扩展名“SIZE”,arg“41697280”
调试SMTP找到扩展名“8”,参数“BITMIME”
调试SMTP找到扩展名“STARTTLS”,arg“”
调试SMTP:use8bit false
调试SMTP已发送:邮件来自:
调试SMTP RCVD:530 5.7.1需要身份验证
已发送调试SMTP:退出
javax.mail.SendFailedException:发送失败;
嵌套异常是:
javax.mail.MessaginException:530 5.7.1需要身份验证
在javax.mail.Transport.send0(Transport.java:219)
在javax.mail.Transport.send(Transport.java:81)
位于com.einsteiner.util.SendMailToUser.postMail(SendMailToUser.java:67)
位于com.einsteiner.util.SendMailToUser.main(SendMailToUser.java:197)

根据调试输出,您使用的是非常旧版本的JavaMail。这就是您正在设置的属性不起作用的原因


您应该升级到更新的版本(至少1.4.7,它支持这些属性)。您可以找到最新版本。

您从哪里获得异常?您的凭据可能无效。也可能是他们以这种方式拒绝你的连接。@Makoto早些时候,我能够成功地发送邮件,没有任何错误。但现在我得到了这个例外。在运行代码时,我用实际的用户名和密码替换用户名和密码。出于我在这里提到的原因,请尝试将身份验证凭据添加到用于电子邮件设置的属性中。e、 g.props.setProperty(“mail.smtp.password”,smtp\u AUTH\u PWD);和props.setProperty(“mail.smtp.username”,smtp\u AUTH\u USER)@Utsav我已经添加了这两个属性,但仍然得到相同的异常