繁体   English   中英

使用OAuth和GMail的Javamail

[英]Javamail using OAuth and GMail

我一直在使用Java应用程序来使用我的Gmail连接发送电子邮件,但遇到了麻烦。

我发现我需要使用JavaMail当前实现所使用的OAuth,但是我还没有真正找到实现此目的的明确指南。 我是一名业余程序员,并且,当我理解时,我有点傻瓜(我正在学校里为某些C努力工作),但是我想在这里学习。

我汇总的大部分内容都是从我发现的其他内容中挑选出来的,试图使某些内容有效。 但是我遇到的问题是两件事之一。

要么我无法获得授权,然后我收到Google的电子邮件,说某个应用程序试图在不符合现代安全性标准的情况下尝试访问我的电子邮件,或者我需要通过网络浏览器登录。

根据我的发现,几年前Google改变了其安全性,这就是为什么我们现在需要使用OAuth的原因,幸运的是JavaMail支持OAuth,但我无法使其正常运行。 我在Stack Overflow或其他地方看到的很多帮助都已经有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的代码

    public OAuth2SaslClient(String oauthToken, CallbackHandler callbackHandler) {
this.oauthToken = oauthToken;
this.callbackHandler = callbackHandler;  }

该返回行表示构造函数无法处理该问题,但是OAuth2SaSLClient.java中的构造函数实际上已设置为具有(String,Callback)参数。

如果某人有快速简便的方法可以工作,即使看起来似乎需要使用创建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: https : //developers.google.com/gmail/api/quickstart/java

旧的Google Data API已弃用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM