Parsing mail gmail

Parsing mail gmail

0
0

Buongiorno

Sto impazzendo con la funzione base64decode!!

Devo poter eseguire il parsing delle mail da una casella gmail (non g-suite). Ho configurato il tutto e ricevo in un campo testo tutto il json restituito dalle data-api di una singola mail. e fin qui è stato più facile del previsto.

I problemi nascono dal fatto che gmail codifica il corpo del messaggio mail in b64.

Tramite la funzione jsongetelement ricavo la parte che mi interessa (il body appunto) ed a questo punto davo per scontato che con Base64Decode avrei decodificato in un’altro campo testo l’html del body.

Questo avviene, ma ricevo gran parte del codice con caratteri incomprensibili, mentre altre parti dello stesso, leggibili.

Sembra come se la funzione Base64Decode restituisse un file corrotto.

Alloro mi sono armato di santa pazienza ed ho provato il tutto sia su mac che su windowos; Stesso risultato.

Ho provato con TextDecode …idem.

La cosa strana è che copiando il body senza decodificarlo, per intenderci la parte che ricavo con JsonGetElemet, e dandolo in pasto ad un decodificatore online, restituisce il testo perfettamente formattato in html!!

per capirci quello che ricevo dopo la decodifica in fm è questo:

<htmlB�XY�B�Y]HY\]Z]�H��۝[�U\H��۝[�H�^�[��\��]Z\��N
NKLH��B��[H\OH�^���Ȉ�[OH�\�^N��ۙNȃ�����&v���F����&v���&�GF�ӣ��������屔�4(????���4(????䁑������Ȉ�4(���؁��????�х�����ձ��Ʌ���Ȉ���屔????�еͥ�������퍽�����������홽�е�������
����ɤ�!��ٕѥ���ͅ�̵͕ɥ�숁�������Ȉ�4(��<br>
</p>
<br>
<br>
<div style=”color: rgb(0, 0, 0);”>
<hr tabindex=”-1″ style=”display:inline-block; width:98%”>
<div id=”divRplyFwdMsg” dir=”ltr”><font face=”Calibri, sans-serif” color=”#000000″ style=”font-size:11pt”><b>Da:</b> Clienti &lt;Clienti@ciip.it&gt;<br>
<b>Inviato:</b> giovedì 5 novembre 2020 11:47<brB���N�؏�S��P��HHX\���[�[]�O���B������]Ώ؏�N���YH�۝�[�\��[�����M��ٛ

 

Qualche suggerimento???

 

RISOLTO
Segnalato come spam
Pubblicato da (Domande: 8, Risposte: 26)
Domandato il 16 Novembre 2020 12:25
77 visualizzazioni
0
Domanda privata

Ho scopertop la causa

il body è codificato in b64encode url format.

basterebbe una funzione che facesse l'encoding di tale formato.

Esiste?? (senza usare il java script)??

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 16 Novembre 2020 19:53
0
Domanda privata

MBS. oppure scarichi i dati raw e eviti il problema

.g.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1487)
Risposto il 17 Novembre 2020 16:41
0
Domanda privata

E' una sola opzione o ne sono due??

utilizzo il plugin MBS e scarico i dati raw, o utilizzo MBS o scarico i dati Raw??

Nella seconda ipotesi, un accenno per darmi un'indirizzata??:-)

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 17 Novembre 2020 16:46
0
Domanda privata

due opzioni diverse. MBS ha una opzione specifica per decodificare B64url.
la seconda, mi sono espresso male io: se tu usi il formato raw te lo becchi in base64url, ma puoi anche usare il formato full (che usa payload invece di raw) che ti dovrebbe risolvere il problema. l'oggetto in questione è enum(Format)

facci sapere!

.g.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1487)
Risposto il 18 Novembre 2020 10:48
0
Domanda privata

Grazie Giulio (come sempre)

Ma perdonami, non riesco a capire.

Quando parli di usare il formato full, da dove dovrei ricavarlo??

"l'oggetto in questione è enum(Format)"

Dalla chiamata alle data-api??

Ho letto la documentazione delle data-api di google ma sinceramente non mi sono imbattuto in questa informazione.

o forse sono io che mi ci sto approcciando in maniera errata.

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 18 Novembre 2020 11:00
0
Domanda privata

Mi sa che già uso il payload

{
"id": "175cbca6406af729",
"threadId": "175cbca6406af729",
"labelIds": [
"IMPORTANT",
"CATEGORY_PERSONAL",
"INBOX"
],
"snippet": "Da: ************************; Inviato: giovedì 5 novembre 2020 11:47 A: TENNACOLA - Marco Diotallevi Oggetto: I: Scheda Pronto Intervento 2020.167 Da: ***************************.it [mailto:",
"payload": {
"partId": "",
"mimeType": "multipart/alternative",
"filename": "",
"headers": [
{
"name": "Delivered-To",
"value": "tennarep@gmail.com"
},
{
"name": "Received",
"value": "by 2002:a19:f509:0:0:0:0:0 with SMTP id j9csp2754700lfb; Sun, 15 Nov 2020 04:04:00 -0800 (PST)"
},
{ ..............................................................

 

per ricavare il body uso:

JSONGetElement ( google_api::JSONmessage; "payload.parts[0].body.data" )

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 18 Novembre 2020 11:25
0
Domanda privata

https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get

https://developers.google.com/gmail/api/reference/rest/v1/Format

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1487)
Risposto il 18 Novembre 2020 12:41
0
Domanda privata

Grazie Giulio per l'aiuto, ma gmail di default usa già il Full.

Comunque sia con il parametro enum impostato a Full che minimal o raw si ottiene sempre il body codificato in Base64url.

Che Fm non abbia una decodifica per questo formato, mi sembra assurdo, anche perchè tra il B64 ed il B64url cambiano solo 3 caratteri.

Se non sbaglio le vecchie versioni di base-element aveva un "codifificare" per il b64url ma nelle nuove è stato deprecato.

Poi a me sarebbe servito il contrario.

Quindi ricapitolando, o si paga per un plugin o ci si adatta con il javascript o le data-api di gmail per Fm sono inutili.

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 18 Novembre 2020 13:18
0
Domanda privata

Risolto il problema con la decodifica con una funzione personalizzata, ora ne ho un'altro:

per spostare la mail in una cartella (label) dovrei passare questo parametro nelle opzioni cUrl:

curl --request POST

  'https://gmail.googleapis.com/gmail/v1/users/miamail@gmail.com/messages/175cbca6406af729/modify?key=[YOUR_API_KEY]'

  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]'

  --header 'Accept: application/json'

  --header 'Content-Type: application/json'

  --data '{"addLabelIds":["Label_8707417612487280852"],"removeLabelIds":["INBOX"]}'

  --compressed

la parte in neretto è quella che non riesco a scrivere.

Ho provato creando un json e passarlo con -d @$json oppure a scriverla direttamente nelle opzioni ma mi restituisce sempre:

{

  "error": {

    "code": 400,

    "message": "No label add or removes specified",

    "errors": [

      {

        "message": "No label add or removes specified",

        "domain": "global",

        "reason": "invalidArgument"

      }

    ],

    "status": "INVALID_ARGUMENT"

  }

}

 

non capisco che tipo di json è, se è un array o cosa in quanto lo vorrebbe così:

{

  "addLabelIds": [

    "Label_8707417612487280852"

  ],

  "removeLabelIds": [

    "INBOX"

  ]

}

e le parentesi quadre ci devono essere

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 5 Dicembre 2020 09:39
0
Domanda privata

Risolto 

commettevo un banale errore nello scrivere il json

Segnalata come spam
Pubblicato da (Domande: 8, Risposte: 26)
Risposto il 5 Dicembre 2020 19:00