2016-07-14 4 views
0

Я пытаюсь отправить аутентифицированное письмо через сервер Gmail с помощью JavaMail API 1.5.5.JavaMail - отправить аутентифицированную oauth2 smtp mail

Я следовал учебнику в javaMailAPI 1.5.5 site и использовал this google tool, но не смог отправить почту.

Вот что я сделал:

private static void sendEmail(String _emailBody){ 
    //used oauth2.py in order to retrieve the access token 
    String accessToken = getAccessToken(refresh_token,username,client_id,client_secret); 
    // Setup mail server 
    Properties props = new Properties(); 
    props.put("mail.imap.ssl.enable", "true"); // required for Gmail 
    props.put("mail.imap.auth.mechanisms", "XOAUTH2"); 
    Session session = Session.getInstance(props); 
    Store store = session.getStore("imap"); 
    store.connect("imap.gmail.com", username, accessToken); 
    MimeMessage msg = new MimeMessage(session); 
    msg.setFrom(new InternetAddress(username)); 
    msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(_email)); 
    msg.setSubject("some subject"); 
    msg.setText(_emailBody); 
    Transport.send(msg); 

} 

я получил следующее execption:

com.sun.mail.util.MailConnectException 
Couldn't connect to host, port: localhost, 25; timeout -1 

Я также попытался включить IMAP в именах свойств к SMTP, но в этом случае программа была застряла на

store.connect("imap.gmail.com", username, accessToken); 

Как это можно решить? Я искал в Интернете ответ, но не нашел его.

Edit:

Не точно такой же вопрос, как это было предложено. Я использую аутентификацию oauth2 на JavaMailAPI 1.5.5, которая была выпущена в 2016 году. Метод подключения отличается. Старый не работает.

В нем говорится, что есть проблема с аутентификацией. Кроме того, я не использую имя пользователя и пароль, но имя пользователя и токен доступа, предоставляемые google.

+0

Возможный дубликат [MailConnectException при отправке почты с использованием java mail api] (http://stackoverflow.com/questions/20766044/mailconnectexception-while-sending-mail-using-java-mail-api) – DaImTo

+0

@DalmTo Не совсем , Я использую аутентификацию oauth2 на JavaMailAPI 1.5.5, которая была выпущена в 2016 году. Метод подключения отличается. Старый не работает. В нем говорится, что проблема аутентификации. –

+0

Я также связываюсь с именем пользователя и токеном доступа вместо имени пользователя и пароля. –

ответ

1

Вам не хватает базового понимания API JavaMail. Магазины предназначены для чтения сообщений, Транспорты предназначены для отправки сообщений. Основные примеры для Gmail are in the JavaMail FAQ. Попробуйте этот код, и если он все еще не работает, обновите свой вопрос с помощью кода, который вы используете, и разместите сообщение JavaMail debug output.