Nicht den Körper der E-Mail mit Google Mail PHP API
Ich habe Probleme mit der Google Mail PHP API.
Möchte ich abrufen, den Inhalt von E-Mails, aber ich kann es abrufen nur für E-Mails, die Anhänge haben! Meine Frage ist, warum?
Hier mein code bisher:
//Authentication things above...
$client = getClient();
$gmail = new Google_Service_Gmail($client);
$list = $gmail->users_messages->listUsersMessages('me', ['maxResults' => 1000]);
while ($list->getMessages() != null) {
foreach ($list->getMessages() as $mlist) {
$message_id = $mlist->id;
$optParamsGet2['format'] = 'full';
$single_message = $gmail->users_messages->get('me', $message_id, $optParamsGet2);
$threadId = $single_message->getThreadId();
$payload = $single_message->getPayload();
$headers = $payload->getHeaders();
$parts = $payload->getParts();
//print_r($parts); PRINTS SOMETHING ONLY IF I HAVE ATTACHMENTS...
$body = $parts[0]['body'];
$rawData = $body->data;
$sanitizedData = strtr($rawData,'-_', '+/');
$decodedMessage = base64_decode($sanitizedData); //should display my body content
}
if ($list->getNextPageToken() != null) {
$pageToken = $list->getNextPageToken();
$list = $gmail->users_messages->listUsersMessages('me', ['pageToken' => $pageToken, 'maxResults' => 1000]);
} else {
break;
}
}
Die zweite option zum abrufen von Inhalten, die ich kenne, ist die Verwendung des snippets befindet sich in der Header Teil, aber es ruft nur die ersten 50 Zeichen oder so, das ist nicht sehr nützlich.
Kann mir keiner helfen. Im mit dieser url, $Endpunkt = "googleapis.com/gmail/v1/users/me/messages/$id?format=full"; aber es ist nur immer 194-Zeichen in einer E-Mail nicht die vollständige E-Mail. was kann ich tun?
InformationsquelleAutor F3L1X79 | 2015-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: möchten Sie vielleicht, um meine zweite Antwort unter diesen einen für eine mehr vollständige code.
Schließlich arbeitete ich heute, hier also der vollständige code Antwort für die Suche nach den Körper - Dank @Tholle:
Wie Sie sehen können, mein problem war, dass manchmal der Körper kann nicht gefunden werden in der Nutzlast->Teile aber direkt in die Nutzlast->body! (plus ich hinzufügen, dass die Schleife für mehrere Teile).
Hoffe, dies hilft jemand anderes.
Das ist interessant, wissen Sie, was die Bedingung ist für den Körper werden in Nutzlast -> Körper statt in der Nutzlast -> teilen?
nicht sicher, aber wenn ich mich richtig erinnere hängt es ab, wenn Ihre mail bekam Anhänge oder nicht. Es ist schon eine lange Zeit, da muss ich dieses Skript verwenden, sorry.
ok danke, was habe ich herausgefunden so weit ist, dass, wenn die Nutzlast
mimeType
istmultipart/alternative
, der Körper wird im payload-Teile, und wenn diemimeType
isttext/plain
odertext/html
Körper werden in Nutzlast-Körper. Habe ich noch nicht getestet Anlagen noch nicht, aber ich werde Ausschau für SieKann mir keiner helfen. Im mit dieser url, $Endpunkt = "googleapis.com/gmail/v1/users/me/messages/$id?format=full"; aber es ist nur immer 194-Zeichen in einer E-Mail nicht die vollständige E-Mail. was kann ich tun?
InformationsquelleAutor F3L1X79
Für diejenigen, die interessiert sind, habe ich stark verbessert, meine Letzte Antwort, macht es die Arbeit mit text/html - (und fallback auf text/plain, wenn nötig) und die Umwandlung der Bilder als base64-Anhänge, die automatisch geladen werden, wenn gedruckt, wie voller HTML!
Code ist nicht perfekt und ist zu lange um es zu erklären in details, aber es ist für mich arbeiten.
Fühlen Sie sich frei, es zu nehmen und passen Sie es (vielleicht korrigieren/verbessern Sie, wenn notwendig).
Cheers.
Eigentlich habe ich kein problem, um alle Arten von Bildern, die sich in der Text der E-Mail. Für diejenigen, die sich in den Anlagen-möchten Sie vielleicht, um eine Schleife auf der $payload->getParts(). Vielleicht ist es euer problem hier?
Der Körper funktioniert einwandfrei. Also habe ich die $payload->getParts() iteration?? Können Sie weitere bitte helfen?
Ich schulde dir ein Bier!! Herausragende code! Absolut perfekt!
Dies ist eine großartige Lösung! Einwandfrei findet den Körper in einer anderen Reihe von Situationen! danke!
InformationsquelleAutor F3L1X79
Schrieb ich diesen code als eine Verbesserung von @F3L1X79's Antwort als diese Filter, die html-Antwort richtig.
Kann mir keiner helfen. Im mit dieser url, $Endpunkt = "googleapis.com/gmail/v1/users/me/messages/$id?format=full"; aber es ist nur immer 194-Zeichen in einer E-Mail nicht die vollständige E-Mail. was kann ich tun?
format=full ist die Standardeinstellung, die Sie nicht brauchen, um es zu senden. Versuchen Sie ohne, bekommen Sie ein anderes Ergebnis? Auch, wahrscheinlich besser, hier in einer separaten Frage! 🙂
InformationsquelleAutor Maulik Gangani
Weitere Verbesserung der code sollte rekursiv sein, auch Sie müssen die Last der Nachricht im format "voll" zu extrahieren den Körper. Unten drei Funktionen können Sie in Ihrer eigenen Klasse.
Sorry, du hast Recht. Die Antwort war, fehlt eine Funktion. Ich habe gerade aktualisiert. Sie können kopieren Sie Sie in Ihrer eigenen Klasse und rufen
getMessageBody()
.InformationsquelleAutor sieppl