update outlook test
This commit is contained in:
parent
a035998513
commit
3d0993deab
3 changed files with 318 additions and 6 deletions
|
|
@ -320,6 +320,12 @@
|
|||
</dependency>
|
||||
|
||||
<!-- Microsoft oauth token -->
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
<version>1.6.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
|
|
@ -332,5 +338,22 @@
|
|||
<version>2.13.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.json</groupId>
|
||||
<artifactId>javax.json-api</artifactId>
|
||||
<version>1.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.glassfish</groupId>
|
||||
<artifactId>javax.json</artifactId>
|
||||
<version>1.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package com.alexanderlogistics;
|
||||
|
||||
import java.util.Properties;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.Store;
|
||||
|
||||
import org.imixs.archive.importer.DocumentImportService;
|
||||
import org.imixs.archive.importer.mail.IMAPOutlookAuthenticator;
|
||||
import org.imixs.workflow.ItemCollection;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
/**
|
||||
* This Imixs IMAPAuthenticator
|
||||
* @author rsoika
|
||||
*
|
||||
*/
|
||||
public class TestIMAPAuhtenticator {
|
||||
|
||||
|
||||
private final static Logger logger = Logger.getLogger(TestIMAPAuhtenticator.class.getName());
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test imap connect via oauth
|
||||
*
|
||||
* https://techcommunity.microsoft.com/t5/exchange/javamail-connecting-to-office-365-xoauth2-for-imap/m-p/1505026
|
||||
*/
|
||||
@Test
|
||||
public void testOutlookToken() {
|
||||
|
||||
IMAPOutlookAuthenticator auth=new IMAPOutlookAuthenticator();
|
||||
|
||||
|
||||
ItemCollection source=new ItemCollection();
|
||||
source.setItemValue(DocumentImportService.SOURCE_ITEM_SERVER, "outlook.office365.com");
|
||||
source.setItemValue(DocumentImportService.SOURCE_ITEM_PORT, "993");
|
||||
source.setItemValue(DocumentImportService.SOURCE_ITEM_USER, "imixs@alexander-logistics.com");
|
||||
source.setItemValue(DocumentImportService.SOURCE_ITEM_PASSWORD, "A6x8Q~EWVUyt~gfyTHtIJf4ig.F9tajUpEEXMaCL");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Properties sourceOptions = new Properties();
|
||||
sourceOptions.put("microsoft.tenantid", "51e2f038-0a96-41be-801d-bb4118aa018e");
|
||||
sourceOptions.put("microsoft.clientid", "39e9eec5-6939-47dc-9729-3438a9898e63");
|
||||
|
||||
try {
|
||||
Store store = auth.openMessageStore(source, sourceOptions);
|
||||
|
||||
Assert.assertNotNull(store);
|
||||
} catch (MessagingException e) {
|
||||
e.printStackTrace();
|
||||
Assert.fail();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -3,9 +3,13 @@ package com.alexanderlogistics;
|
|||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.mail.Folder;
|
||||
import javax.mail.Message;
|
||||
import javax.mail.Session;
|
||||
import javax.mail.Store;
|
||||
|
||||
|
|
@ -21,6 +25,7 @@ import org.junit.Test;
|
|||
|
||||
import com.fasterxml.jackson.databind.JavaType;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.sun.mail.imap.IMAPFolder;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
|
|
@ -40,7 +45,8 @@ public class TestIMAPGetToken {
|
|||
@Test
|
||||
public void imapAccess() {
|
||||
String mailServerAdress = "outlook.office365.com";
|
||||
String mailboxUserName = "###MyUserName###";
|
||||
// String mailboxUserName = "###MyUserName###";
|
||||
String mailboxUserName = "imixs@alexander-logistics.com";
|
||||
String mailboxPassword = "###MyPassword###";
|
||||
String protocol = "imaps";
|
||||
|
||||
|
|
@ -74,7 +80,116 @@ public class TestIMAPGetToken {
|
|||
Store store = session.getStore(protocol);
|
||||
store.connect(mailServerAdress, mailboxUserName, mailboxPassword);
|
||||
} catch (Exception e) {
|
||||
|
||||
|
||||
e.printStackTrace();
|
||||
Assert.fail();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void imapAccess2() {
|
||||
|
||||
String userEmailId = "imixs@alexander-logistics.com";
|
||||
try {
|
||||
String oauth2AccessToken = getAuthToken();
|
||||
|
||||
String host = "outlook.office365.com";
|
||||
String port = "993";
|
||||
Store store = null;
|
||||
|
||||
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
|
||||
Properties props = new Properties();
|
||||
|
||||
props.put("mail.imaps.ssl.enable", "true");
|
||||
props.put("mail.imaps.sasl.enable", "true");
|
||||
props.put("mail.imaps.port", port);
|
||||
|
||||
props.put("mail.imaps.auth.mechanisms", "XOAUTH2");
|
||||
props.put("mail.imaps.sasl.mechanisms", "XOAUTH2");
|
||||
|
||||
props.put("mail.imaps.auth.login.disable", "true");
|
||||
props.put("mail.imaps.auth.plain.disable", "true");
|
||||
|
||||
props.setProperty("mail.imaps.socketFactory.class", SSL_FACTORY);
|
||||
props.setProperty("mail.imaps.socketFactory.fallback", "false");
|
||||
props.setProperty("mail.imaps.socketFactory.port", port);
|
||||
props.setProperty("mail.imaps.starttls.enable", "true");
|
||||
props.put("mail.imaps.auth.plain.disable", "true");
|
||||
props.put("mail.debug", "true");
|
||||
props.put("mail.debug.auth", "true");
|
||||
|
||||
Session session = Session.getInstance(props);
|
||||
session.setDebug(true);
|
||||
|
||||
store = session.getStore("imaps");
|
||||
|
||||
System.out.println("OAUTH2 IMAP trying to connect with system properties to Host:" + host + ", Port: "
|
||||
+ port + ", userEmailId: " + userEmailId + ", AccessToken: " + oauth2AccessToken);
|
||||
|
||||
String anderesPasswort = "i^i$oe-!+o1o0io(";
|
||||
store.connect(host, userEmailId, oauth2AccessToken);
|
||||
System.out.println("IMAP connected with system properties to Host:" + host + ", Port: " + port
|
||||
+ ", userEmailId: " + userEmailId + ", AccessToken: " + oauth2AccessToken);
|
||||
if (store.isConnected()) {
|
||||
System.out.println("Connection Established using imap protocol successfully !");
|
||||
|
||||
IMAPFolder inbox = (IMAPFolder) store.getFolder("INBOX");
|
||||
inbox.open(Folder.READ_WRITE);
|
||||
|
||||
// fetches all messages from the INBOX...
|
||||
Message[] messages = inbox.getMessages();
|
||||
System.out.println("..." + messages.length + " new messages found");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("Store.Connect failed with the errror: " + e.getMessage());
|
||||
StringWriter sw = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(sw));
|
||||
String exceptionAsString = sw.toString();
|
||||
System.out.println(exceptionAsString);
|
||||
Assert.fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the Imap access
|
||||
*
|
||||
* https://stackoverflow.com/questions/73463357/cannot-authenticate-to-imap-on-office365-using-javamail
|
||||
*
|
||||
* mail.store.protocol="imap" mail.imap.host="outlook.office365.com"
|
||||
* mail.imap.port="993" mail.imap.ssl.enable="true"
|
||||
* mail.imap.starttls.enable="true" mail.imap.auth="true"
|
||||
* mail.imap.auth.mechanisms="XOAUTH2" mail.imap.user="<email box>"
|
||||
*/
|
||||
@Test
|
||||
public void imapAccess3() {
|
||||
Properties props = new Properties();
|
||||
|
||||
props.put("mail.store.protocol", "imap");
|
||||
props.put("mail.imap.host", "outlook.office365.com");
|
||||
props.put("mail.imap.port", "993");
|
||||
props.put("mail.imap.ssl.enable", "true");
|
||||
|
||||
props.put("mail.imap.starttls.enable", "true");
|
||||
props.put("mail.imap.auth", "true");
|
||||
props.put("mail.imap.auth.mechanisms", "XOAUTH2");
|
||||
props.put("mail.imap.user", "imixs@alexander-logistics.com");
|
||||
|
||||
// props.put("mail.imaps.auth.plain.disable","true");
|
||||
|
||||
props.put("mail.debug", "true");
|
||||
props.put("mail.debug.auth", "true");
|
||||
try {
|
||||
|
||||
String token = getAuthToken();
|
||||
|
||||
Session session = Session.getInstance(props);
|
||||
session.setDebug(true);
|
||||
System.out.println("info: properties: " + session.getProperties().toString());
|
||||
Store store = session.getStore("imap");
|
||||
store.connect("outlook.office365.com", "imixs@alexander-logistics.com", token);
|
||||
} catch (Exception e) {
|
||||
|
||||
e.printStackTrace();
|
||||
Assert.fail();
|
||||
}
|
||||
|
|
@ -100,17 +215,120 @@ public class TestIMAPGetToken {
|
|||
/**
|
||||
* Helper method to receive a Microsoft access Token
|
||||
*
|
||||
* https://jwt.ms/
|
||||
*
|
||||
* "OAuth2": {
|
||||
*
|
||||
* "Authority":
|
||||
* https://login.microsoftonline.com/51e2f038-0a96-41be-801d-bb4118aa018e/v2.0,
|
||||
*
|
||||
* "ClientId": "39e9eec5-6939-47dc-9729-3438a9898e63",
|
||||
*
|
||||
* "ClientSecret": "A6x8Q~EWVUyt~gfyTHtIJf4ig.F9tajUpEEXMaCL"
|
||||
*
|
||||
* }
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* Hallo Herr Soika,
|
||||
*
|
||||
*
|
||||
*
|
||||
* ich habe eine neue App angelegt und hier die Berechtigungen neu gesetzt.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Hier die Daten dazu:
|
||||
*
|
||||
*
|
||||
*
|
||||
* "OAuth2": {
|
||||
*
|
||||
* "Authority":
|
||||
* https://login.microsoftonline.com/51e2f038-0a96-41be-801d-bb4118aa018e/v2.0,
|
||||
*
|
||||
* "ClientId": "39e9eec5-6939-47dc-9729-3438a9898e63",
|
||||
*
|
||||
* "ClientSecret": "A6x8Q~EWVUyt~gfyTHtIJf4ig.F9tajUpEEXMaCL"
|
||||
*
|
||||
* }
|
||||
*
|
||||
*
|
||||
*
|
||||
* Hier noch der Link zu einem Video, welches ganz gut erklärt wie das ganze
|
||||
* eingebunden werden muss.
|
||||
*
|
||||
* Anhand dieser Anleitung bin ich ebefalls vorgegangen.
|
||||
*
|
||||
*
|
||||
*
|
||||
* https://www.youtube.com/watch?v=bMYA-146dmM&t=356s
|
||||
*
|
||||
*
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws ClientProtocolException
|
||||
*/
|
||||
public String getAuthToken() throws ClientProtocolException, IOException {
|
||||
CloseableHttpClient client = HttpClients.createDefault();
|
||||
HttpPost loginPost = new HttpPost("https://login.microsoftonline.com/###MyTenantID###/oauth2/v2.0/token");
|
||||
String clientId = "###MyClientId###";
|
||||
String scopes = "https://outlook.office365.com/.default";
|
||||
String tanantId = "51e2f038-0a96-41be-801d-bb4118aa018e";
|
||||
String clientId = "39e9eec5-6939-47dc-9729-3438a9898e63";
|
||||
String client_secret = "A6x8Q~EWVUyt~gfyTHtIJf4ig.F9tajUpEEXMaCL";
|
||||
|
||||
String client_secret = "###MyClientSecret###";
|
||||
HttpPost loginPost = new HttpPost("https://login.microsoftonline.com/" + tanantId + "/oauth2/v2.0/token");
|
||||
String scopes = "https://outlook.office365.com/.default";
|
||||
// scopes="https://outlook.office365.com/IMAP.AccessAsUser.All";
|
||||
// scopes="https://graph.microsoft.com/.default";
|
||||
// scopes="openid profile offline_access https://outlook.office365.com/SMTP.Send
|
||||
// https://outlook.office365.com/POP.AccessAsUser.All
|
||||
// https://outlook.office365.com/IMAP.AccessAsUser.All";
|
||||
|
||||
String encodedBody = "client_id=" + clientId + "&scope=" + scopes + "&client_secret=" + client_secret
|
||||
+ "&grant_type=client_credentials";
|
||||
|
||||
loginPost.setEntity(new StringEntity(encodedBody, ContentType.APPLICATION_FORM_URLENCODED));
|
||||
|
||||
loginPost.addHeader(new BasicHeader("cache-control", "no-cache"));
|
||||
CloseableHttpResponse loginResponse = client.execute(loginPost);
|
||||
|
||||
InputStream inputStream = loginResponse.getEntity().getContent();
|
||||
byte[] response = readAllBytes(inputStream);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
JavaType type = objectMapper.constructType(
|
||||
objectMapper.getTypeFactory().constructParametricType(Map.class, String.class, String.class));
|
||||
Map<String, String> parsed = new ObjectMapper().readValue(response, type);
|
||||
String result = parsed.get("access_token");
|
||||
|
||||
System.out.println("....access token = " + result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to receive a Microsoft access Token
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws ClientProtocolException
|
||||
*/
|
||||
public String getAuthTokenOld() throws ClientProtocolException, IOException {
|
||||
CloseableHttpClient client = HttpClients.createDefault();
|
||||
String tanantId = "51e2f038-0a96-41be-801d-bb4118aa018e";
|
||||
String clientId = "75657ae4-465d-4245-9c1f-ebd6fdfc4814";
|
||||
// String clientId = "6ed3fb66-a16a-47da-a4ae-fb3d8690b117";
|
||||
String objectId = "229d0e4f-eef1-476c-9b8c-97c437a93314";
|
||||
// String client_secret= "2a41bf2d-ffd8-444d-a2c5-6a4a418650ba";
|
||||
String client_secret = "EM_8Q~6HRhhKhwJKAIXQcRdlJzn.iOj2Fq3Yhdo_";
|
||||
|
||||
HttpPost loginPost = new HttpPost("https://login.microsoftonline.com/" + tanantId + "/oauth2/v2.0/token");
|
||||
String scopes = "https://outlook.office365.com/.default";
|
||||
// scopes="https://outlook.office365.com/IMAP.AccessAsUser.All";
|
||||
// scopes="https://graph.microsoft.com/.default";
|
||||
// scopes="openid profile offline_access https://outlook.office365.com/SMTP.Send
|
||||
// https://outlook.office365.com/POP.AccessAsUser.All
|
||||
// https://outlook.office365.com/IMAP.AccessAsUser.All";
|
||||
|
||||
String encodedBody = "client_id=" + clientId + "&scope=" + scopes + "&client_secret=" + client_secret
|
||||
+ "&grant_type=client_credentials";
|
||||
|
|
|
|||
Loading…
Reference in a new issue