使用OAuth和GMail的Javamail

使用OAuth和GMail的Javamail,java,email,oauth,Java,Email,Oauth,我一直在开发一个java应用程序,用我的Gmail连接发送电子邮件,但我遇到了麻烦 我发现我需要使用OAuth,而当前的JavaMail实现使用OAuth,但是我还没有找到一个明确的指南来指导如何做到这一点。我是一个业余程序员,在理解方面有点像个傻瓜(我在学校里努力学习C语言,哈哈),但我在这里努力学习 我收集的大部分东西都是从我发现的其他东西中挑选出来的,试图让某些东西起作用,这是一种。但我遇到的问题是两件事之一 要么我无法获得授权,要么我收到一封来自谷歌的电子邮件,说有一个应用程序试图在不符

我一直在开发一个java应用程序,用我的Gmail连接发送电子邮件,但我遇到了麻烦

我发现我需要使用OAuth,而当前的JavaMail实现使用OAuth,但是我还没有找到一个明确的指南来指导如何做到这一点。我是一个业余程序员,在理解方面有点像个傻瓜(我在学校里努力学习C语言,哈哈),但我在这里努力学习

我收集的大部分东西都是从我发现的其他东西中挑选出来的,试图让某些东西起作用,这是一种。但我遇到的问题是两件事之一

要么我无法获得授权,要么我收到一封来自谷歌的电子邮件,说有一个应用程序试图在不符合现代安全标准的情况下访问我的电子邮件,要么我需要通过网络浏览器登录

据我所知,几年前谷歌改变了他们的安全性,这就是为什么我们现在需要使用OAuth,幸运的是JavaMail支持OAuth,但我无法让它工作。我在这里看到的很多关于堆栈溢出或其他地方的帮助已经有近5年的历史了

现在,我正试图在eclipse中制作一个java程序,只发送一封电子邮件,我正在使用github.com/google/gmail-oauth2-tools

尝试创建OAuth令牌,但出现错误

OAuth2SaslClientFactory中的方法

    public SaslClient createSaslClient(String[] mechanisms,
        String authorizationId,
        String protocol,
        String serverName,
        Map<String, ?> props,
        CallbackHandler callbackHandler) {
    boolean matchedMechanism = false;
    for (int i = 0; i < mechanisms.length; ++i) {
        if ("XOAUTH2".equalsIgnoreCase(mechanisms[i])) {
            matchedMechanism = true;
            break;
        }
    }
    if (!matchedMechanism) {
        logger.info("Failed to match any mechanisms");
        return null;
    }
    return new OAuth2SaslClient((String)props.get(OAUTH_TOKEN_PROP), callbackHandler);
}
返回行表示构造函数无法处理该问题,但OAuth2SaSLClient.java中的构造函数实际上设置为具有(字符串,回调)参数

如果有人有一些快速简单的东西可以使用,我很乐意看到它,尽管它似乎需要使用一种特定的方法来创建OAuth令牌

如果代码有帮助的话,我可以发布代码,但我需要先把它清理干净,这是我尝试工作的初稿/混乱拼贴

或者是针对傻瓜的javamail/Oauth教程


这里的最终目标是将其与一个程序联系起来,该程序可以在发生事件时发出快速通知。我似乎做不到

混合使用OAuth和javamail是行不通的,您需要选择您的API:Gmail v4 API(使用OAuth)或javamail API。你说你只是想从自己的帐户发送电子邮件,所以我建议你使用javamail IMAP API。在使用javamail API时,您根本不需要Oauth

例如:

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.port", "587");

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(GOOGLE_USERNAME, password);
        }
});


Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(FROM_EMAIL, FROM_NAME));
// rest of the email settings
如果您需要代表其他人发送电子邮件,或者需要执行更高级的邮件操作,例如创建Gmail草稿,那么Gmail API将是合适的方法

注意:如果要使用Gmail API,请确保使用较新的Gmail API:


旧的Google Data API已被弃用

而不是将代码作为图像共享,如果您使用
代码块在此处共享代码,它将有所帮助
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.port", "587");

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(GOOGLE_USERNAME, password);
        }
});


Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(FROM_EMAIL, FROM_NAME));
// rest of the email settings