Ich habe versucht, die Google Mail-API in Java zu verwenden, aber selbst wenn ich sie gegoogelt habe, war ich traurig, dass nur Stapelüberlauf- und englische Artikel auf der offiziellen Website von Google veröffentlicht wurden, sodass ich einen Artikel auf Japanisch schreiben musste. habe gedacht.
Ich möchte den Text und die angehängten Dateien der in Google Mail empfangenen E-Mails mit Java abrufen.
--Verwenden Sie Eclipse.
Dies ist eine Beispiel-E-Mail, um diese Zeit zu erhalten. Ich habe ein Bild eines Linux-Pinguins in die angehängte Datei angehängt.
Rufen Sie zur Vorbereitung auf die Verwendung der Google Mail-API zunächst die Google Mail-API-Bibliothek unter der folgenden URL ab. Gmail API Client Library for Java ; https://developers.google.com/api-client-library/java/apis/gmail/v1
Diejenigen, die MAVEN und GRADLE verwenden, können die Bibliothek installieren, indem sie den Anweisungen unter dem Link folgen. Wenn Sie eine solche Annehmlichkeit aus verschiedenen Gründen nicht nutzen können, laden Sie sie als Zip herunter und fügen Sie alle JAR-Dateien hinzu.
Führen Sie die folgenden zwei Dinge aus.
--Erstellen Sie ein Projekt in Ihrem Google-Konto.
Greifen Sie auf die folgende URL zu und erstellen Sie ein Projekt. Ressourcenverwaltung; https://console.developers.google.com/cloud-resource-manager __1. Klicken Sie auf "Projekt erstellen" __
__2. Geben Sie einen geeigneten Projektnamen ein und klicken Sie auf "Erstellen" __
__3. Nach einer Weile wird ein Projekt erstellt __ Warten wir einen Moment
Greifen Sie über die folgende URL auf die API-Bibliothek von Google zu und aktivieren Sie die Google Mail-API. API-Bibliothek; https://console.developers.google.com/apis/library
Greifen Sie auf die folgende URL zu, um einen OAuth 2.0-Client zu erstellen. Anmeldeinformationen; https://console.developers.google.com/apis/credentials
__1. Klicken Sie auf Anmeldeinformationen erstellen __
__2. OAuth-Client-ID auswählen __
__3. Wählen Sie "Andere", geben Sie ihm einen Namen und klicken Sie auf "Erstellen" __
__4. Fertigstellung __
__5. Laden Sie den privaten Schlüssel zur späteren Verwendung herunter __ Alles ist in Ordnung, aber speichern wir es als "client_secret.json".
__6 OAuth-Zustimmungsbildschirm entsprechend erstellen __
Der Verarbeitungsablauf ist ungefähr wie folgt, daher werden wir in der richtigen Reihenfolge fortfahren.
Führen Sie basierend auf dem zuvor erhaltenen privaten Schlüssel Authentifizierungsarbeiten durch, um ein Token für die Verwendung der API und ein Aktualisierungstoken für die Neuausstellung des Tokens zu erhalten.
__1. Platzieren Sie den zuvor erhaltenen privaten Schlüssel "client_secret.json" im Projekt __
__2. Ich erhalte die für die Authentifizierung erforderlichen Informationen, z. B. das Aktualisierungstoken basierend auf dem privaten Schlüssel, erstelle jedoch einen Ordner im Projekt, um ihn zu speichern. __ Nennen Sie es vorerst "Anmeldeinformationen".
__3. Endlich Codierung __ Holen Sie sich ein Token zur Verwendung der API und ein Aktualisierungstoken zur erneuten Ausgabe des Tokens basierend auf dem privaten Schlüssel
//Json-Verarbeitung
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
//Umfang
List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_READONLY);
//Privat Schlüssel
String CLIENT_SECRET_DIR = "client_secret.json";
//Speicherordner für Konfigurationsdateien rund um die Authentifizierung
String CREDENTIALS_FOLDER = "credentials";
//HTTP-Kommunikation
NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
//Authentifizierung
//Den privaten Schlüssel lesen
FileInputStream in = new FileInputStream(new File(CLIENT_SECRET_DIR));
InputStreamReader reader = new InputStreamReader(in);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, reader);
//Authentifizierungseinstellungen
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY,
clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(CREDENTIALS_FOLDER)))
.setAccessType("offline").build();
//Authentifizieren
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
Zunächst die Erklärung der Konstanten
--_ JSON_FACTORY__: Objekt zur Verarbeitung von JSON. Die von der API zurückgegebenen Daten liegen im JSON-Format vor. --__ GELTUNGSBEREICH____: Wie viel Zugriff sollte Google Mail über die API erhalten? Die GmailScopes-Klasse sollte alle Konstanten enthalten. Wählen Sie daher die entsprechende Konstante aus und verwenden Sie sie. Wenn Sie GMAIL_READONLY auswählen, sollten Sie in der Lage sein, diesmal alles zu tun, was Sie möchten. Wählen Sie es also aus. --__ CLIENT_SECRET_DIR__: Der Pfad der privaten Schlüsseldatei. Dieses Mal habe ich den Namen "client_secret.json" direkt darunter gesetzt, sodass "client_secret.json" in Ordnung ist. --__ CREDENTIALS_FOLDER__: Der Pfad des Ordners zum Speichern der Dateien um die mit dem privaten Schlüssel erhaltene Authentifizierung. Legen Sie den oben erstellten Ordner fest. --__ HTTP_TRANSPORT__: Objekt für die HTTP-Kommunikation.
Als nächstes Erläuterung der Verarbeitung
//Den privaten Schlüssel lesen
FileInputStream in = new FileInputStream(new File(CLIENT_SECRET_DIR));
InputStreamReader reader = new InputStreamReader(in);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, reader);
Der private Schlüssel "client_secret.json" direkt darunter wird gelesen
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(CREDENTIALS_FOLDER)))
.setAccessType("offline").build();
Ich habe die Einstellung zum Auslösen der Authentifizierung festgelegt.
//Authentifizieren
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
Führen Sie tatsächlich eine HTTP-Kommunikation durch, werfen Sie den privaten Schlüssel, rufen Sie das Token oder das Zugriffstoken ab und speichern Sie es im angegebenen Ordner. Wenn Sie es ausführen, sollten Sie einige Dateien im Ordner sehen, wie unten gezeigt.
Ich verwende eine API namens Liste der Nachrichten. Nachrichten ist eine API zum Abrufen, Senden und Bearbeiten von E-Mails. Die Liste enthält buchstäblich eine Liste der empfangenen E-Mails. Da es sich nur um eine Liste handelt, können Sie nur die Nachrichten-ID und die Thread-ID abrufen und den Text nicht sehen. Verwenden Sie get in messages, um den Text und detaillierte Daten abzurufen. Die Erklärung der offiziellen Website lautet vorerst wie folgt (amerikanisch)
Users.messages: list ; https://developers.google.com/gmail/api/v1/reference/users/messages/list
Das Lesen ist praktisch, da es die zum Auslösen der API erforderlichen Informationen, den erforderlichen Bereich, die Definition des zurückgegebenen JSON und den Beispielcode in verschiedenen Sprachen enthält. Es ist amerikanisch.
Erstellen Sie vorerst ein Objekt für den Google Mail-Dienst, führen Sie die Nachrichtenliste für dieses Objekt aus und fügen Sie die zurückgegebenen Daten in die Liste ein.
//Erstellen Sie einen Google Mail-Dienst
//Anwendungsname
String APPLICATION_NAME = "Test1";
//Greifen Sie auf Google Mail zu
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
//Post bekommen
//Nutzer
String USER = "me";
//Erhalten Sie alle E-Mails(Nur die Nachrichten-ID ist enthalten)
ListMessagesResponse messagesResponse = service.users().messages().list(USER).execute();
List<Message> messageList = messagesResponse.getMessages();
Beschreibung der Konstanten
--__ APPLICATION_NAME__: Der Name, der dem Objekt des zu erstellenden Google Mail-Dienstes gegeben werden soll. Angemessen.
Beschreibung der Verarbeitung
//Erstellen Sie einen Google Mail-Dienst
//Anwendungsname
String APPLICATION_NAME = "Test1";
//Greifen Sie auf Google Mail zu
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
Ich erstelle ein Objekt für den Google Mail-Dienst.
//Post bekommen
//Nutzer
String USER = "me";
//Erhalten Sie alle E-Mails(Nur die Nachrichten-ID ist enthalten)
ListMessagesResponse messagesResponse = service.users().messages().list(USER).execute();
List<Message> messageList = messagesResponse.getMessages();
Ich führe eine Liste von Nachrichten aus und speichere die Ergebnisse in einer Liste. Das Argument ist nur Benutzer. Ich möchte meine Mail sehen, also lege einfach "mich" hinein. Dadurch wird eine JSON-Liste erstellt, die nur die Nachrichten-ID und die Thread-ID enthält, wie unten gezeigt.
{
"id": "1635e36ac0cf27ce",
"threadId": "1635e36ac0cf27ce"
}
Erhalten Sie außerdem detaillierte Daten wie Betreff und Text aus der Nachrichten-ID, um die Ziel-E-Mails einzugrenzen.
//Durchsuchen Sie alle E-Mail-Daten, um die Ziel-E-Mail zu finden
Message targetMessage = null;
for (Message message : messageList) {
//Holen Sie sich alle Mail-Daten
Message fullMessage = service.users().messages().get(USER, message.getId()).execute();
//Header anzeigen
for (MessagePartHeader header : fullMessage.getPayload().getHeaders()) {
//Name ist Betreff in der Kopfzeile(Gegenstand)Rufen Sie die Nachrichten-ID der Nachricht ab, deren Wert "Testmail" ist.
if (header.getName().equals("Subject") && header.getValue().equals("Test Email")) {
targetMessage = fullMessage;
}
}
}
Um zunächst eine Entschuldigung zu finden, ist die Art und Weise, diesen Code zu schreiben, nicht sehr gut. Es ist besser, diesen Prozess in Methoden zu unterteilen und ihn zu einer Methode zu machen, die zurückgegeben wird, wenn die Zielmail gefunden wird, und ich würde es definitiv tun So werde ich es machen. Dieses Mal wollte ich als Beispielcode, der im Internet veröffentlicht werden soll, die gesamte Verarbeitung auf dieselbe Weise schreiben, also habe ich dies getan.
Abgesehen von Ausreden verwende ich die Nachrichten-ID aus der Liste der abgerufenen Nachrichten und die Get-API für Nachrichten in der Google Mail-API, um detailliertere Daten wie Betreff und Text zu erhalten. Ich bin. Wir suchen nach einer E-Mail mit dem Betreff "Test-E-Mail", um die Ziel-E-Mail in den erfassten Daten zu finden.
Variablenbeschreibung
--__ Nachricht targetMessage__: Variable zum Speichern der Zielmail
Beschreibung der Verarbeitung
//Holen Sie sich alle Mail-Daten
Message fullMessage = service.users().messages().get(USER, message.getId()).execute();
Derzeit lautet die offizielle Erklärung für get for messages wie folgt Users.messages : get; https://developers.google.com/gmail/api/v1/reference/users/messages/get
Wenn Sie die Benutzer- und Nachrichten-ID in das Argument einfügen und auslösen, werden detailliertere E-Mail-Informationen zurückgegeben.
{
"historyId": "212543",
"id": "1635e36ac0cf27ce",
"internalDate": "1526294031000",
"labelIds": [
"IMPORTANT",
"Label_8",
"SENT"
],
"payload": {
"body": {
"size": 0
},
"filename": "",
"headers": [
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Received",
"value": "by 10.179.15.206 with HTTP; Mon, 14 May 2018 03:33:51 -0700 (PDT)"
},
{
"name": "Date",
"value": "Mon, 14 May 2018 19:33:51 +0900"
},
{
"name": "Delivered-To",
"value": "[email protected]"
},
{
"name": "Message-ID",
"value": "<CAJsBAS7wAJm+gaUETbUzR1fyshn=zgu4mb5sexdKAv7+jHbmCA@mail.gmail.com>"
},
{
"name": "Subject",
"value": "Test Email"
},
{
"name": "From",
"value": "Fuga Hoge <[email protected]>"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "multipart/mixed; boundary=\"0000000000009360f1056c2805b7\""
}
],
"mimeType": "multipart/mixed",
"partId": "",
"parts": [
{
"body": {
"size": 0
},
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "multipart/alternative; boundary=\"0000000000009360ec056c2805b5\""
}
],
"mimeType": "multipart/alternative",
"partId": "0",
"parts": [
{
"body": {
"data": "5pys5paH44G744Gr44KD44KJ44KJDQo=",
"size": 23
},
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=\"UTF-8\""
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
}
],
"mimeType": "text/plain",
"partId": "0.0"
},
{
"body": {
"data": "PGRpdiBkaXI9Imx0ciI-5pys5paH44G744Gr44KD44KJ44KJPGJyPjwvZGl2Pg0K",
"size": 48
},
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/html; charset=\"UTF-8\""
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
}
],
"mimeType": "text/html",
"partId": "0.1"
}
]
},
{
"body": {
"attachmentId": "ANGjdJ_kQ0lQ3VjL86PDW2-qlN7bEQf-PLcRtzgFKvkg49Mi7KGwxlS8G2sn0LcOqdjM3D9CkVyVhmu1xbdDrxJC-GaaU7cBTUr4KUbwtENCONY9p0WW0stx8QuCEF5fnC2ZkKBFjOTxLqH3QJn88RGz-1IaE8l2wdexLgCP7MhYRNVx5Q0UCuvykLJO2WU3_uyJZWyZoVz5SxJz7_kXtLLv7X58p24HE3UU3Bxi3WIp5wpznsg1Z5GOmkYNTe29f7ag52B7L0p5SS_hIeGd73WqkgkH_Hma7Qmn0fPgd6wu_HUT8sqITt96CTfrl0M",
"size": 124626
},
"filename": "linux.png ",
"headers": [
{
"name": "Content-Type",
"value": "image/png; name=\"linux.png\""
},
{
"name": "Content-Disposition",
"value": "attachment; filename=\"linux.png\""
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
},
{
"name": "X-Attachment-Id",
"value": "f_jh6421y31"
}
],
"mimeType": "image/png",
"partId": "1"
}
]
},
"sizeEstimate": 171687,
"snippet": "Körper Honyara",
"threadId": "1635e36ac0cf27ce"
}
Es ist ziemlich lang so.
//Header anzeigen
for (MessagePartHeader header : fullMessage.getPayload().getHeaders()) {
//Name ist Betreff in der Kopfzeile(Gegenstand)Rufen Sie die Nachrichten-ID der Nachricht ab, deren Wert "Testmail" ist.
if (header.getName().equals("Subject") && header.getValue().equals("Test Email")) {
targetMessage = fullMessage;
}
}
Es gibt Daten mit dem Schlüssel "Betreff" im Header der erfassten JSON-Nutzdaten, und das ist der Betreff. Ich suche jemanden, dessen Betreff "Test Mail" ist.
Einige der abgerufenen JSONs haben den Schlüssel "Snippet" und einen solchen Wert, "Body Honyara", aber dies ist ein Snippet anstelle des Body und wenn die Liste der E-Mails angezeigt wird Außerdem ist es anders, weil es die Daten desjenigen sind, der den Text ein wenig anzeigt, um den Inhalt zu informieren. Da der Text dieser Test-E-Mail kurz ist, enthält sie den vollständigen Text. Grundsätzlich ist es jedoch besser zu glauben, dass der vollständige Text nicht enthalten ist.
_Dies ist ein Ausschnitt _
Der echte Text befindet sich tiefer in den Payload Parts und ist Base64-codiert. Daher muss er zum Lesen in UTF8 usw. decodiert werden.
//Texterfassung
//Texterfassung(Base64)
String bodyBase64 = targetMessage.getPayload().getParts().get(0).getParts().get(0).getBody().get("data").toString();
//Von Base64 dekodieren(Byte-String)
byte[] bodyBytes = Base64.decodeBase64(bodyBase64);
//Konvertieren Sie die Byte-Zeichenfolge in eine Zeichenfolge
String body = new String(bodyBytes, "UTF-8");
Beschreibung der Verarbeitung
//Texterfassung(Base64)
String bodyBase64 = targetMessage.getPayload().getParts().get(0).getParts().get(0).getBody().get("data").toString();
Wie Sie sehen können, befindet sich der Text in einer unverständlichen tiefen Position. Sehen Sie sich den Roh-JSON oben an, um zu sehen, warum dies passiert ist. Da die Rückgabeklasse der Methode get der Objekttyp ist, konnte ich die Daten mit toString () im erwarteten Format abrufen. Es ist übrigens BASE64-codiert.
//Von Base64 dekodieren(Byte-String)
byte[] bodyBytes = Base64.decodeBase64(bodyBase64);
Vorerst von BASE64 in UTF8-Byte-String konvertieren. Ich möchte, dass du bald ein String wirst.
//Konvertieren Sie die Byte-Zeichenfolge in eine Zeichenfolge
String body = new String(bodyBytes, "UTF-8");
Jetzt ist es endlich ein String. Dies ist der Text.
Laden Sie abschließend die angehängte Datei herunter.
//Erhalten Sie angehängte Dateien
//Nutzlastteil erkunden
for (MessagePart part : targetMessage.getPayload().getParts()) {
String fileName = part.getFilename();
//Dateiname ist null oder""Wenn nicht, handelt es sich um eine angehängte Datei. Laden Sie sie herunter.
if (fileName != null && fileName.length() > 0) {
//Download-Datei(Base64)
MessagePartBody attachPart = service.users().messages().attachments()
.get(USER, targetMessage.getId(), part.getBody().getAttachmentId()).execute();
//Von Base64 dekodieren
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
//Im System speichern
FileOutputStream fileOutFile = new FileOutputStream(fileName);
fileOutFile.write(fileByteArray);
fileOutFile.close();
}
}
Verwenden Sie für Anhänge die Google Mail-API message.attachments.get. Die Erklärung der offiziellen Website lautet vorerst wie folgt. Mit der Anhangs-ID und der Nachrichten-ID können Sie die angehängte Datei in BASE64 codieren lassen.
Beschreibung der Verarbeitung
//Erhalten Sie angehängte Dateien
//Nutzlastteil erkunden
for (MessagePart part : targetMessage.getPayload().getParts()) {
String fileName = part.getFilename();
//Dateiname ist null oder""Wenn nicht, handelt es sich um eine angehängte Datei. Laden Sie sie herunter.
if (fileName != null && fileName.length() > 0) {
//Kürzung
}
}
Der Dateiname und die Anhangs-ID werden in den Teilen der Nutzlast gespeichert. Es gibt jedoch auch einen Text usw. in derselben Hierarchie. In diesem Fall sollte der Dateiname "" usw. sein. Vermeiden Sie diese und erhalten Sie die Anhangs-ID.
//Erhalten Sie angehängte Dateien
//Nutzlastteil erkunden
if (fileName != null && fileName.length() > 0) {
//Download-Datei(Base64)
MessagePartBody attachPart = service.users().messages().attachments().get(USER, targetMessage.getId(), part.getBody().getAttachmentId()).execute();
//Von Base64 dekodieren
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
//Im System speichern
FileOutputStream fileOutFile = new FileOutputStream(fileName);
fileOutFile.write(fileByteArray);
fileOutFile.close();
}
Nachdem Sie die Anhangs-ID haben, können Sie die Anhänge mithilfe von message.attachments.get in der Google Mail-API abrufen. Da die erfasste angehängte Datei BASE64-codiert ist, wird sie in eine Byte-Zeichenfolge decodiert. Speichern Sie dann die zuletzt decodierte Byte-Zeichenfolge in einer Datei. Wenn Sie es ausführen, sollte die angehängte Datei wie unten gezeigt direkt unter dem Projekt heruntergeladen werden.
Wenn Sie den gesamten hier geschriebenen Code verbinden, sieht es wie folgt aus.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.gmail.model.ListMessagesResponse;
import com.google.api.services.gmail.model.Message;
import com.google.api.services.gmail.model.MessagePart;
import com.google.api.services.gmail.model.MessagePartBody;
import com.google.api.services.gmail.model.MessagePartHeader;
public class Test {
public static void main(String[] args) throws IOException, GeneralSecurityException {
//Json-Verarbeitung
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
//Umfang
List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_READONLY);
//Privat Schlüssel
String CLIENT_SECRET_DIR = "client_secret.json";
//Speicherordner für Konfigurationsdateien rund um die Authentifizierung
String CREDENTIALS_FOLDER = "credentials";
//HTTP-Kommunikation
NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
//Authentifizierung
//Den privaten Schlüssel lesen
FileInputStream in = new FileInputStream(new File(CLIENT_SECRET_DIR));
InputStreamReader reader = new InputStreamReader(in);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, reader);
//Authentifizierungseinstellungen
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY,
clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(CREDENTIALS_FOLDER)))
.setAccessType("offline").build();
//Authentifizieren
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
//Erstellen Sie einen Google Mail-Dienst
//Anwendungsname
String APPLICATION_NAME = "Test1";
//Greifen Sie auf Google Mail zu
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME)
.build();
//Post bekommen
//Nutzer
String USER = "me";
//Erhalten Sie alle E-Mails(Es ist nur die E-Mail-ID enthalten)
ListMessagesResponse messagesResponse = service.users().messages().list(USER).execute();
List<Message> messageList = messagesResponse.getMessages();
//Durchsuchen Sie alle E-Mail-Daten, um die Ziel-E-Mail zu finden
Message targetMessage = null;
for (Message message : messageList) {
//Holen Sie sich alle Mail-Daten
Message fullMessage = service.users().messages().get(USER, message.getId()).execute();
//Header anzeigen
for (MessagePartHeader header : fullMessage.getPayload().getHeaders()) {
//Name ist Betreff in der Kopfzeile(Gegenstand)Rufen Sie die Mail-ID der Nachricht ab, deren Wert "Testmail" ist.
if (header.getName().equals("Subject") && header.getValue().equals("Test Email")) {
targetMessage = fullMessage;
}
}
}
//Texterfassung
//Texterfassung(Base64)
String bodyBase64 = targetMessage.getPayload().getParts().get(0).getParts().get(0).getBody().get("data").toString();
//Von Base64 dekodieren(Byte-String)
byte[] bodyBytes = Base64.decodeBase64(bodyBase64);
//Konvertieren Sie die Byte-Zeichenfolge in eine Zeichenfolge
String body = new String(bodyBytes, "UTF-8");
//Standardausgabe von Text
System.out.println(body);
//Erhalten Sie angehängte Dateien
//Nutzlastteil erkunden
for (MessagePart part : targetMessage.getPayload().getParts()) {
String fileName = part.getFilename();
//Dateiname ist null oder""Wenn nicht, handelt es sich um eine angehängte Datei. Laden Sie sie herunter.
if (fileName != null && fileName.length() > 0) {
//Download-Datei(Base64)
MessagePartBody attachPart = service.users().messages().attachments()
.get(USER, targetMessage.getId(), part.getBody().getAttachmentId()).execute();
//Von Base64 dekodieren
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
//Im System speichern
FileOutputStream fileOutFile = new FileOutputStream(fileName);
fileOutFile.write(fileByteArray);
fileOutFile.close();
}
}
}
}
Auf diese Weise können Sie Google Mail-E-Mails automatisch abrufen und möglicherweise die damit verbundenen Aufgaben automatisieren. Die hier sorgfältig erläuterte Google Mail-API enthält auch die folgende URL. Obwohl die offizielle Sprache Amerikanisch ist, wird die Verwendung erläutert. Wenn Sie sie also lesen, können Sie alles tun.
API Reference ; https://developers.google.com/gmail/api/v1/reference/
Als persönlicher Eindruck bei der Verwendung der Google Mail-API war es schwierig, nach Nutzdaten und Teilen zu suchen, wenn Betreff und Text abgerufen wurden. Daher gab die Nachrichtenklasse ihr Bestes und verfügte über viele Felder. Ich bin froh, wenn Sie automatisch beitreten können.
Recommended Posts