mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-06 04:33:34 +00:00
Fixed bug in gam <UserTypeEntity> show messages ... showattachments
to avoid a trap when text/plain
attachments in character sets other than UTF-8
are displayed.
This commit is contained in:
@ -11,6 +11,11 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 6.67.37
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> show messages ... showattachments` to avoid a trap when `text/plain` attachments
|
||||||
|
in character sets other than `UTF-8` are displayed.
|
||||||
|
|
||||||
### 6.67.36
|
### 6.67.36
|
||||||
|
|
||||||
Updated `gam batch <BatchContent>` and `gam tbatch <BatchContent>` commands to accept lines with the following form:
|
Updated `gam batch <BatchContent>` and `gam tbatch <BatchContent>` commands to accept lines with the following form:
|
||||||
|
@ -334,7 +334,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin/bin/gamadv-xtd3$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin/bin/gamadv-xtd3$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin/bin/gamadv-xtd3$ ./gam version
|
admin@server:/Users/admin/bin/gamadv-xtd3$ ./gam version
|
||||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAMADV-XTD3 6.67.36 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.37 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -1002,7 +1002,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\GAMADV-XTD3>del C:\GAMConfig\oauth2.txt
|
C:\GAMADV-XTD3>del C:\GAMConfig\oauth2.txt
|
||||||
C:\GAMADV-XTD3>gam version
|
C:\GAMADV-XTD3>gam version
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAMADV-XTD3 6.67.36 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.37 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
\
|
|
||||||
# Version and Help
|
# Version and Help
|
||||||
|
|
||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAMADV-XTD3 6.67.36 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.37 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -16,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAMADV-XTD3 6.67.36 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.37 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -28,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAMADV-XTD3 6.67.36 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.37 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -65,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gamadv-xtd3
|
Path: /Users/Admin/bin/gamadv-xtd3
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 6.67.36
|
Latest: 6.67.37
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@ -73,7 +72,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
6.67.36
|
6.67.37
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@ -83,7 +82,7 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 6.67.36 - https://github.com/taers232c/GAMADV-XTD3
|
GAM 6.67.37 - https://github.com/taers232c/GAMADV-XTD3
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
Merged GAM-Team version
|
Merged GAM-Team version
|
||||||
|
|
||||||
|
6.67.37
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> show messages ... showattachments` to avoid a trap when `text/plain` attachments
|
||||||
|
in character sets other than `UTF-8` are displayed.
|
||||||
|
|
||||||
6.67.36
|
6.67.36
|
||||||
|
|
||||||
Updated `gam batch <BatchContent>` and `gam tbatch <BatchContent>` commands to accept lines with the following form:
|
Updated `gam batch <BatchContent>` and `gam tbatch <BatchContent>` commands to accept lines with the following form:
|
||||||
|
@ -66837,7 +66837,14 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
return 'Body not available'
|
return 'Body not available'
|
||||||
|
|
||||||
ATTACHMENT_NAME_PATTERN = re.compile(r'^.*name="?(.*?)(?:"|;|$)')
|
ATTACHMENT_NAME_PATTERN = re.compile(r'^.*name="?(.*?)(?:"|;|$)')
|
||||||
|
CHARSET_NAME_PATTERN = re.compile(r'^.*charset="?(.*?)(?:"|;|$)')
|
||||||
|
|
||||||
|
def _showAttachmentMimeTypeSizeCharset(part, charset):
|
||||||
|
printKeyValueList(['mimeType', part['mimeType']])
|
||||||
|
printKeyValueList(['size', part['body']['size']])
|
||||||
|
if charset:
|
||||||
|
printKeyValueList(['charset', charset])
|
||||||
|
|
||||||
def _showSaveAttachments(messageId, payload, attachmentNamePattern):
|
def _showSaveAttachments(messageId, payload, attachmentNamePattern):
|
||||||
for part in payload.get('parts', []):
|
for part in payload.get('parts', []):
|
||||||
if 'attachmentId' in part['body']:
|
if 'attachmentId' in part['body']:
|
||||||
@ -66848,7 +66855,12 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
continue
|
continue
|
||||||
attachmentName = mg.group(1)
|
attachmentName = mg.group(1)
|
||||||
if (not attachmentNamePattern) or attachmentNamePattern.match(attachmentName):
|
if (not attachmentNamePattern) or attachmentNamePattern.match(attachmentName):
|
||||||
if (part['mimeType'] == 'text/plain' and not noshow_text_plain) or save_attachments:
|
charset = ''
|
||||||
|
if part['mimeType'] == 'text/plain':
|
||||||
|
mg = CHARSET_NAME_PATTERN.match(header['value'])
|
||||||
|
if mg:
|
||||||
|
charset = mg.group(1)
|
||||||
|
if (part['mimeType'] == 'text/plain' and not noshow_text_plain) or save_attachments:
|
||||||
try:
|
try:
|
||||||
result = callGAPI(gmail.users().messages().attachments(), 'get',
|
result = callGAPI(gmail.users().messages().attachments(), 'get',
|
||||||
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND],
|
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND],
|
||||||
@ -66858,10 +66870,12 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
printKeyValueList(['Attachment', attachmentName])
|
printKeyValueList(['Attachment', attachmentName])
|
||||||
Ind.Increment()
|
Ind.Increment()
|
||||||
if part['mimeType'] == 'text/plain':
|
if part['mimeType'] == 'text/plain':
|
||||||
printKeyValueList([Ind.MultiLineText(base64.urlsafe_b64decode(str(result['data'])).decode(UTF8)+'\n')])
|
try:
|
||||||
|
printKeyValueList([Ind.MultiLineText(base64.urlsafe_b64decode(str(result['data'])).decode(charset)+'\n')])
|
||||||
|
except (LookupError, UnicodeDecodeError, UnicodeError):
|
||||||
|
_showAttachmentMimeTypeSizeCharset(part, charset)
|
||||||
else:
|
else:
|
||||||
printKeyValueList(['mimeType', part['mimeType']])
|
_showAttachmentMimeTypeSizeCharset(part, charset)
|
||||||
printKeyValueList(['size', part['body']['size']])
|
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
if save_attachments:
|
if save_attachments:
|
||||||
filename, _ = uniqueFilename(targetFolder, cleanFilename(attachmentName), overwrite)
|
filename, _ = uniqueFilename(targetFolder, cleanFilename(attachmentName), overwrite)
|
||||||
@ -66878,8 +66892,7 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
elif show_attachments:
|
elif show_attachments:
|
||||||
printKeyValueList(['Attachment', attachmentName])
|
printKeyValueList(['Attachment', attachmentName])
|
||||||
Ind.Increment()
|
Ind.Increment()
|
||||||
printKeyValueList(['mimeType', part['mimeType']])
|
_showAttachmentMimeTypeSizeCharset(part, charset)
|
||||||
printKeyValueList(['size', part['body']['size']])
|
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
@ -67002,8 +67015,13 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
if not mg:
|
if not mg:
|
||||||
continue
|
continue
|
||||||
attachmentName = mg.group(1)
|
attachmentName = mg.group(1)
|
||||||
|
charset = ''
|
||||||
|
if part['mimeType'] == 'text/plain':
|
||||||
|
mg = CHARSET_NAME_PATTERN.match(header['value'])
|
||||||
|
if mg:
|
||||||
|
charset = mg.group(1)
|
||||||
if (not attachmentNamePattern) or attachmentNamePattern.match(attachmentName):
|
if (not attachmentNamePattern) or attachmentNamePattern.match(attachmentName):
|
||||||
attachments.append((attachmentName, part['mimeType'], part['body']['size']))
|
attachments.append((attachmentName, part['mimeType'], part['body']['size'], charset))
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
_getAttachments(messageId, part, attachmentNamePattern, attachments)
|
_getAttachments(messageId, part, attachmentNamePattern, attachments)
|
||||||
@ -67060,6 +67078,7 @@ def printShowMessagesThreads(users, entityType):
|
|||||||
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}name'] = attachment[0]
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}name'] = attachment[0]
|
||||||
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}mimeType'] = attachment[1]
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}mimeType'] = attachment[1]
|
||||||
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}size'] = attachment[2]
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}size'] = attachment[2]
|
||||||
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}charset'] = attachment[3]
|
||||||
csvPF.WriteRowTitles(row)
|
csvPF.WriteRowTitles(row)
|
||||||
parameters['messagesProcessed'] += 1
|
parameters['messagesProcessed'] += 1
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user