java - 使用 javamail,gmail 由于应用程序安全性较低而拒绝身份验证

标签 java security jakarta-mail

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

运行此程序时出现 AUTH LOGIN failed 错误。我尝试了几种不同的属性设置,但都没有解决问题。

然后我在 SO 上找到了一篇帖子,建议降低我的 Google 帐户中所需的安全级别。当我降低安全设置时,身份验证成功。

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

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

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

尝试Javamail.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();
  }
}

最佳答案

您可能想使用 OAuth2 authentication .

关于java - 使用 javamail,gmail 由于应用程序安全性较低而拒绝身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801391/

相关文章:

java - 如何引用 ArrayList 中元素的特定索引?

java - EL1008E : Property or field 'content' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid?

mysql - md5 也用于电子邮件吗?

java - 连接到 Outlook.com smtp 服务器时出现 Spring 邮件错误

Java邮件 : Adding properties to a session while reusing Transport

Java 可序列化保存

java - System.out.println() 的 JUnit 测试

java - 如何为桌面应用程序安全地实现 "log in automatically"功能?

security - RallyRestApi 使用 HTTP GET 或 POST 方法吗?

java - 如何使用Java读取电子邮件中的 Logo 和图像,其中电子邮件的内容是html/纯文本