mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-05 20:23: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
|
||||
|
||||
### 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
|
||||
|
||||
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$ ./gam version
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
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>gam version
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
Windows-10-10.0.17134 AMD64
|
||||
|
@ -1,10 +1,9 @@
|
||||
\
|
||||
# Version and Help
|
||||
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
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
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 6.67.36
|
||||
Latest: 6.67.37
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@ -73,7 +72,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
6.67.36
|
||||
6.67.37
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@ -83,7 +82,7 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
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>
|
||||
Python 3.12.1 64-bit final
|
||||
MacOS Sonoma 14.2.1 x86_64
|
||||
|
@ -2,6 +2,11 @@
|
||||
|
||||
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
|
||||
|
||||
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'
|
||||
|
||||
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):
|
||||
for part in payload.get('parts', []):
|
||||
if 'attachmentId' in part['body']:
|
||||
@ -66848,7 +66855,12 @@ def printShowMessagesThreads(users, entityType):
|
||||
continue
|
||||
attachmentName = mg.group(1)
|
||||
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:
|
||||
result = callGAPI(gmail.users().messages().attachments(), 'get',
|
||||
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND],
|
||||
@ -66858,10 +66870,12 @@ def printShowMessagesThreads(users, entityType):
|
||||
printKeyValueList(['Attachment', attachmentName])
|
||||
Ind.Increment()
|
||||
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:
|
||||
printKeyValueList(['mimeType', part['mimeType']])
|
||||
printKeyValueList(['size', part['body']['size']])
|
||||
_showAttachmentMimeTypeSizeCharset(part, charset)
|
||||
Ind.Decrement()
|
||||
if save_attachments:
|
||||
filename, _ = uniqueFilename(targetFolder, cleanFilename(attachmentName), overwrite)
|
||||
@ -66878,8 +66892,7 @@ def printShowMessagesThreads(users, entityType):
|
||||
elif show_attachments:
|
||||
printKeyValueList(['Attachment', attachmentName])
|
||||
Ind.Increment()
|
||||
printKeyValueList(['mimeType', part['mimeType']])
|
||||
printKeyValueList(['size', part['body']['size']])
|
||||
_showAttachmentMimeTypeSizeCharset(part, charset)
|
||||
Ind.Decrement()
|
||||
break
|
||||
else:
|
||||
@ -67002,8 +67015,13 @@ def printShowMessagesThreads(users, entityType):
|
||||
if not mg:
|
||||
continue
|
||||
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):
|
||||
attachments.append((attachmentName, part['mimeType'], part['body']['size']))
|
||||
attachments.append((attachmentName, part['mimeType'], part['body']['size'], charset))
|
||||
break
|
||||
else:
|
||||
_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]}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]}charset'] = attachment[3]
|
||||
csvPF.WriteRowTitles(row)
|
||||
parameters['messagesProcessed'] += 1
|
||||
|
||||
|
Reference in New Issue
Block a user