2015-10-28 5 views
0

Я работаю над Java-приложением, чтобы использовать мое соединение Gmail для отправки электронной почты, но я нахожусь на стене.Javamail с использованием OAuth и GMail

Я выяснил, что мне нужно использовать OAuth, который использует текущая реализация JavaMail, но я на самом деле не нашел четкого руководства по тому, как это сделать. Я программист-любитель и хорошо, вроде манекена, когда дело доходит до понимания (я очень много работаю для некоторых C в школе, LOL), но я пытаюсь учиться здесь.

Большая часть того, что я собрал, была отобрана из других вещей, которые я нашел, пытаясь получить что-то, что это такое. Но проблема, с которой я сталкиваюсь, - одна из двух вещей.

Либо я не могу получить разрешение, а затем получаю письмо от Google, в котором говорится, что приложение пытается получить доступ к моей электронной почте, не соблюдая современные стандарты безопасности, или что мне нужно войти в систему через веб-браузер.

Из-за того, что я нашел, несколько лет назад Google изменил свою безопасность, поэтому мы должны использовать OAuth сейчас, что, к счастью, поддерживает JavaMail, но я не могу заставить его работать. И много помощи, которую я видел здесь в Stack Overflow или других местах, почти 5 лет.

Прямо сейчас, я пытаюсь сделать программу Java в затмении, чтобы просто отправить по электронной почте, и я использую github.com/google/gmail-oauth2-tools

Чтобы попытаться сделать OAuth лексема, но есть ошибка

Error Line

метод в 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) параметр.

Если у кого-то есть что-то быстрое и легкое, что работает, я бы хотел его увидеть, хотя кажется, что для этого нужно использовать определенный способ создания токена OAuth.

Я могу опубликовать свой код, если это поможет, но сначала мне нужно его очистить, это своего рода первый черновик/грязный коллаж из вещей, которые я пытался получить.

Или учебник javamail/Oauth для чайников.

Конечная цель состоит в том, чтобы связать это с программой, которая может отправить быстрое уведомление, когда что-то произойдет. Которого я не могу сделать.

+2

Вместо обмена код, изображений, это поможет, если вы совместно используете код здесь, используя 'code blocks' –

ответ

0

Смешивание OAuth и javamail не будет работать, вам нужно выбрать свой API: либо API Gmail v4 (с 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, то API Gmail будет правильный подход ,

Примечание: если вы собираетесь использовать API Gmail, обязательно использовать новую API Gmail: https://developers.google.com/gmail/api/quickstart/java

старый API Google Data осуждается

Смежные вопросы