使用javamail,gmail因应用程序不太安全而拒绝身份验证

Kal*_*ala 17 java security jakarta-mail

我正在运行一个非常基本的Javamail程序来尝试发送电子邮件.这是带main()的独立程序.一旦我开始工作,我计划在一个在tomcat下运行的servlet中使用Javamail.

运行此程序时,我收到AUTH LOGIN失败错误.我尝试了几种不同的属性设置,但都没有解决问题.

然后我在SO上发现了一条帖子,建议降低我的Google帐户所需的安全级别.当我降低安全设置时,身份验证成功.

当然,我立即回到Google帐户的更高安全级别.

我的问题是,如何使我的应用程序更安全,以便gmail不拒绝身份验证?

程序代码如下所示.该程序与SO上的许多其他Javamail问题中的代码非常相似.

TryJavamail.java

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class TryJavamail {

  public static void main(String args[]) throws MessagingException {

    String submitName = "John Doe";
    String submitEmail = "from@example.com";
    String submitMessage = "This is the message";

    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.setProperty("mail.smtp.host", "smtp.gmail.com");
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.smtp.ssl.enable", "true");
    props.setProperty("mail.smtp.port", "465");
    Session session = Session.getInstance(props, null);

    session.setDebug(true);

    Message message = new MimeMessage(session);
    message.setSubject("Message from myapp website submit");
    message.setText(submitName + "; " + submitMessage);

    Address toAddress = new InternetAddress(submitEmail);
    message.setRecipient(Message.RecipientType.TO, toAddress);

    Transport transport = session.getTransport("smtp");
    transport.connect("smtp.gmail.com", "---userid---", "---password---");
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
  }
}
Run Code Online (Sandbox Code Playgroud)

Bil*_*non 5

您可能想要使用OAuth2身份验证.

  • @abi_pat,我已经使用实现 OAuth2 身份验证的代码更新了问题。希望能帮助到你。 (2认同)