mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-03 22:01:39 +00:00
329 lines
15 KiB
Markdown
329 lines
15 KiB
Markdown
# Users - Gmail - Send As/Signature/Vacation
|
|
- [API documentation](#api-documentation)
|
|
- [Definitions](#definitions)
|
|
- [Manage sendas](#manage-sendas)
|
|
- [Display sendas](#display-sendas)
|
|
- [Manage signature](#manage-signature)
|
|
- [Display signature](#display-signature)
|
|
- [Display users without a primary email address signature](#display-users-without-a-primary-email-address-signature)
|
|
- [Manage vacation](#manage-vacation)
|
|
- [Display vacation](#display-vacation)
|
|
- [User attribute `replace <Tag> <UserReplacement>` processing](Tag-Replace)
|
|
- [Standardize user signatures](#standardize-user-signatures)
|
|
|
|
## API documentation
|
|
* [Gmail API - SendAs/Signature](https://developers.google.com/gmail/api/reference/rest/v1/users.settings.sendAs)
|
|
* [Gmail API - Vacation](https://developers.google.com/gmail/api/v1/reference/users.settings/updateVacation)
|
|
* [Treat as an Alias](https://support.google.com/a/answer/1710338)
|
|
|
|
## Definitions
|
|
* [`<UserTypeEntity>`](Collections-of-Users)
|
|
* [Command data from Google Docs/Sheets/Storage](Command-Data-From-Google-Docs-Sheets-Storage)
|
|
```
|
|
<FalseValues>= false|off|no|disabled|0
|
|
<TrueValues> ::= true|on|yes|enabled|1
|
|
<DomainName> ::= <String>(.<String>)+
|
|
<EmailAddress> ::= <String>@<DomainName>
|
|
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
|
|
<EmailAddressEntity> ::=
|
|
<EmailAddressList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
|
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Users
|
|
<Charset> ::= ascii|mbcs|utf-8|utf-8-sig|utf-16|<String>
|
|
<Password> ::= <String>
|
|
<RegularExpression> ::= <String>
|
|
See: https://docs.python.org/3/library/re.html
|
|
<REMatchPattern> ::= <RegularExpression>
|
|
<RESearchPattern> ::= <RegularExpression>
|
|
<RESubstitution> ::= <String>>
|
|
<SMTPHostName> ::= <String>
|
|
<Tag> ::= <String>
|
|
<UserName> ::= <String>
|
|
<UserReplacement> ::=
|
|
(field:<UserReplacementFieldName>)|(schema:<SchemaName>.<FieldName>)|<String>
|
|
|
|
<StorageBucketName> ::= <String>
|
|
<StorageObjectName> ::= <String>
|
|
<StorageBucketObjectName> ::=
|
|
https://storage.cloud.google.com/<StorageBucketName>/<StorageObjectName>|
|
|
https://storage.googleapis.com/<StorageBucketName>/<StorageObjectName>|
|
|
gs://<StorageBucketName>/<StorageObjectName>|
|
|
<StorageBucketName>/<StorageObjectName>
|
|
|
|
<UserGoogleDoc> ::=
|
|
<EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
|
|
|
|
<SendAsContent> ::=
|
|
(sig|signature|htmlsig <String>)|
|
|
(file|htmlfile <FileName> [charset <Charset>])|
|
|
(gdoc|ghtml <UserGoogleDoc>)|
|
|
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
|
|
|
<SignatureContent> ::=
|
|
(<String>)|
|
|
(file|htmlfile <FileName> [charset <Charset>])|
|
|
(gdoc|ghtml <UserGoogleDoc>)|
|
|
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
|
|
|
<VacationMessageContent> ::=
|
|
(message|textmessage|htmlmessage <String>)|
|
|
(file|textfile|htmlfile <FileName> [charset <Charset>])|
|
|
(gdoc|ghtml <UserGoogleDoc>)|
|
|
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
|
```
|
|
## Manage sendas
|
|
```
|
|
gam <UserTypeEntity> [create|add] sendas <EmailAddress> [name] <String>
|
|
[<SendAsContent>
|
|
(replace <Tag> <UserReplacement>)*
|
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
|
[smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
|
|
smtpmsa.username <UserName> smtpmsa.password <Password>
|
|
[smtpmsa.securitymode none|ssl|starttls]]
|
|
gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
|
|
[<SendAsContent>
|
|
(replace <Tag> <UserReplacement>)*
|
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
|
gam <UserTypeEntity> delete sendas <EmailAddressEntity>
|
|
```
|
|
With `create|add`, the `<String>` following `<EmailAddress>` and optionally `name`, is the display name
|
|
of the sendas address.
|
|
|
|
`<SendAsContent>` is the signature, there are four ways to specify it:
|
|
* `sig|signature|htmlsig <String>` - Use `<String>` as the signature
|
|
* `file|htmlfile <FileName> [charset <Charset>]` - Read the signature from `<FileName>`
|
|
* `gdoc|ghtml <UserGoogleDoc>` - Read the signature from `<UserGoogleDoc>`
|
|
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the signature from the Google Cloud Storage file `<StorageBucketObjectName>`
|
|
|
|
The `default` option sets `<EmailAddress>` as the default sendas address for the user.
|
|
|
|
For `treatasalias`, see: https://support.google.com/a/answer/1710338
|
|
|
|
You can allow users to send mail through an external SMTP server when configuring a sendas address hosted outside your email domains. You must enable
|
|
this capability in Admin Console/Apps/Google Workspace/Gmail/Advanced settings/End User Access/Allow per-user outbound gateways.
|
|
|
|
Example:
|
|
Paul shall send emails from the marketing email address with the name Paul from Example" and replies shall go back to them.
|
|
``` gam user paul add sendas marketing@example.com "Paul from Example" replyto paul```
|
|
|
|
## Display sendas
|
|
### Display the sendas information as an indented list of keys and values.
|
|
```
|
|
gam <UserTypeEntity> info sendas <EmailAddressEntity> [compact|format|html]
|
|
gam <UserTypeEntity> show sendas [compact|format|html]
|
|
[primary|default] [verifyonly]
|
|
```
|
|
|
|
These are the output formatting options:
|
|
* `compact` - Escape carriage returns as \r and newlines as \n in original HTML
|
|
* `format` - Strip HTML keywords leaving basic printable information
|
|
* `html` - Show original HTML; this is the default option; the output is human readable but cannot be used as input to GAM
|
|
|
|
By default, all sendas addresses are shown, use these options to limit the display:
|
|
* `primary` - Display the primary email address
|
|
* `default` - Display the default sendas address
|
|
|
|
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
|
|
|
To capture a signature for use as input to GAM, do the following.
|
|
```
|
|
gam redirect stdout ./signature.html user user@domain.com show sendas compact
|
|
```
|
|
Edit signature.html and remove the following data leaving just the HTML.
|
|
```
|
|
SendAs Address: <user@domain.com>
|
|
IsPrimary: True
|
|
Default: True
|
|
Signature:
|
|
```
|
|
|
|
### Display the sendas information in CSV form.
|
|
```
|
|
gam <UserTypeEntity> print sendas [compact]
|
|
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
|
```
|
|
|
|
These are the output formatting options:
|
|
* `compact` - Strip carriage returns and newlines in original HTML; this makes these values easier to process in the CSV file
|
|
and can be used as input to GAM.
|
|
|
|
By default, all sendas addresses are shown, use these options to limit the display:
|
|
* `primary` - Display the primary email address
|
|
* `default` - Display the default sendas address
|
|
|
|
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
|
|
|
## Manage signature
|
|
```
|
|
gam <UserTypeEntity> signature|sig
|
|
<SignatureContent>
|
|
(replace <Tag> <UserReplacement>)*
|
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
|
[html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
|
|
[name <String>]
|
|
[primary]
|
|
```
|
|
`<SignatureContent>` is the signature, there are four ways to specify it:
|
|
* `<String>` - Use `<String>` as the signature
|
|
* `file|htmlfile <FileName> [charset <Charset>]` - Read the signature from `<FileName>`
|
|
* `gdoc|ghtml <UserGoogleDoc>` - Read the signature from `<UserGoogleDoc>`
|
|
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the signature from the Google Cloud Storage file `<StorageBucketObjectName>`
|
|
|
|
The `default` option sets `<EmailAddress>` as the default sendas address for the user.
|
|
|
|
For `treatasalias`, see: https://support.google.com/a/answer/1710338
|
|
|
|
When `<UserTypeEntity>` specifies an alias, the `primary` option causes the primary
|
|
email address signature rather than the alias signature to be set.
|
|
|
|
`[name <String>]` sets the display name for non-primary sendas addresses, not the name of the signature, as that isn't possible via the API.
|
|
|
|
If you have a current default signature, the API will update that, but if you delete it, it seems that the API will not over-write any of the other signatures, but instead add a new signature called `My signature`. If you rename that signature, the API will keep on updating that same signature, and not touch the other signatures.
|
|
|
|
## Display signature
|
|
### Display the signature as an indented list of keys and values.
|
|
```
|
|
gam <UserTypeEntity> show signature|sig [compact|format|html|template]
|
|
[primary|default] [verifyonly]
|
|
```
|
|
|
|
These are the output formatting options:
|
|
* `template` - Escape carriage returns as \r and newlines as \n in original HTML; this format produces output that can be used as input to GAM
|
|
* `compact` - Escape carriage returns as \r and newlines as \n in original HTML
|
|
* `format` - Strip HTML keywords leaving basic printable information
|
|
* `html` - Show original HTML; this is the default option; the output is human readable but cannot be used an input to GAM
|
|
|
|
By default, the signature for `<UserTypeEntity>` is displayed, use these options to alter the display:
|
|
* `primary` - Display the primary email address signature
|
|
* `default` - Display the default sendas address signature
|
|
|
|
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
|
|
|
To capture a signature for use as input to GAM, do the following.
|
|
```
|
|
gam redirect stdout ./signature.html user user@domain.com show signature compact
|
|
```
|
|
Edit signature.html and remove the following data leaving just the HTML.
|
|
```
|
|
SendAs Address: <user@domain.com>
|
|
IsPrimary: True
|
|
Default: True
|
|
Signature:
|
|
```
|
|
|
|
### Display the signature in CSV form.
|
|
```
|
|
gam <UserTypeEntity> print signature [compact]
|
|
[primary|default] [verifyonly] [todrive <ToDriveAttribute>*]
|
|
```
|
|
|
|
These are the output formatting options:
|
|
* `compact` - Strip carriage returns and newlines in original HTML; this makes these values easier to process in the CSV file
|
|
and can be used as input to GAM.
|
|
|
|
By default, the signature for `<UserTypeEntity>` is displayed, use these options to alter the display:
|
|
* `primary` - Display the primary email address signature
|
|
* `default` - Display the default sendas address signature
|
|
|
|
Use the `verifyonly` option to display `True` or `False` in the signature field based on whether the signature is non-blank.
|
|
|
|
## Display users without a primary email address signature
|
|
The command line is wrapped for readability.
|
|
```
|
|
gam config csv_output_row_filter "signature:boolean:false"
|
|
csv_output_header_filter "User,displayName,signature"
|
|
auto_batch_min 1 num_threads 10
|
|
redirect csv ./NoPrimarySignature.csv multiprocess
|
|
all users print signature primary verifyonly
|
|
```
|
|
* `config csv_output_row_filter "signature:boolean:false"` - Output rows that indicate no signature
|
|
* `csv_output_header_filter "User,displayName,signature"` - Output basic headers
|
|
* `auto_batch_min 1 num_threads 10` - Turn on parallel processing
|
|
* `redirect csv ./NoPrimarySignature.csv multiprocess` - Intelligently combine output from all processes
|
|
* `all users` - Process all non-suspended users
|
|
* `print signature primary verifyonly` - Display state of primary email address signature
|
|
|
|
## Manage vacation
|
|
```
|
|
gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
|
|
[<VacationMessageContent>
|
|
(replace <Tag> <UserReplacement>)*
|
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
[html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
|
|
[start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
|
|
```
|
|
The initial `<Boolean>` can be omitted to allow updates to other fields without affecting the current responder state.
|
|
|
|
`<VacationMessageContent>` is the vacation message, there are four ways to specify it:
|
|
* `message|textmessage|htmlmessage <String>` - Use `<String>` as the vacation message
|
|
* `file|htmlfile <FileName> [charset <Charset>]` - Read the vacation message from `<FileName>`
|
|
* `gdoc|ghtml <UserGoogleDoc>` - Read the vacation message from `<UserGoogleDoc>`
|
|
* `gcsdoc|gcshtml <StorageBucketObjectName>` - Read the vacation message from the Google Cloud Storage file `<StorageBucketObjectName>`
|
|
|
|
It's highly recommended to set (overwrite) start and end date. Otherwise it may not work for users who used vacation messages previously and where the end date is already expired.
|
|
|
|
Example:
|
|
```gam user@domain.com vacation ON subject "[Out of Office]" file autoreply.eml start 2000-01-01 end 2999-01-01```
|
|
|
|
## Display vacation
|
|
```
|
|
gam <UserTypeEntity> show vacation [compact|format|html] [enabledonly]
|
|
```
|
|
Gam displays the information as an indented list of keys and values.
|
|
|
|
These are the output formatting options:
|
|
* `compact` - Escape carriage returns as \r and newlines as \n in original HTML; this format produces output that can be used as input to GAM
|
|
* `format` - Strip HTML keywords leaving basic printable information
|
|
* `html` - Show original HTML; this is the default option; the output is human readable but cannot be used an input to GAM
|
|
|
|
* `enabledonly` - Do not display users with vacation autoreply disabled.
|
|
```
|
|
gam <UserTypeEntity> print vacation [compact] [enabledonly] [todrive <ToDriveAttribute>*]
|
|
```
|
|
Gam displays the information in CSV form.
|
|
|
|
* `compact` - Strip carriage returns and newlines in original HTML; this makes these values easier to process in the CSV file
|
|
and can be used as input to GAM.
|
|
* `enabledonly` - Do not display users with vacation autoreply disabled.
|
|
|
|
## Standardize user signatures
|
|
You can standardize user signatures by creating a signature template and a CSV file with data for each user.
|
|
|
|
You can create a signature template by defining the signature in the Gmail Settings GUI of a test user.
|
|
You must use the default signature `My signature`.
|
|
Use text like `{FirstName}` and `{Email}` in the locations where the actual values will go.
|
|
|
|
Once you're created the template signature, do the following:
|
|
```
|
|
$ gam redirect stdout ./SigTemplate.html user testuser@domain.com show signature template
|
|
$ more SigTemplate.html
|
|
<div dir="ltr">--<div>Name: {FirstName} {LastName}<div>Phone: {Phone}</div><div>Email: {Email}</div></div><div><br></div><div>Company Name</div><div>Company Address</div><div><br></div></div>\n
|
|
```
|
|
This is a sample Users.csv file.
|
|
```
|
|
email,first,last,phone
|
|
bsmith@domain.com,Bob,Smith,510-555-1212 x 123
|
|
mjones@domain.com,Mary,Jones,510-555-1212 x 456
|
|
```
|
|
|
|
This command will update the user's signatures.
|
|
```
|
|
gam csv Users.csv gam user "~email" signature htmlfile SigTemplate.html replace FirstName "~first" replace LastName "~last" replace Phone "~phone" replace Email "~email"
|
|
```
|
|
|
|
You can also do the update with user attributes:
|
|
|
|
This is a sample Users.csv file.
|
|
|
|
```
|
|
email
|
|
bsmith@domain.com
|
|
mjones@domain.com
|
|
```
|
|
|
|
This command will update the user's signatures.
|
|
```
|
|
gam csv Users.csv gam user "~email" signature htmlfile SigTemplate.html replace FirstName field:name.givenname replace LastName field:name.familyname replace Phone field:phone.value.type.work replace Email field:email.primaryemail
|
|
```
|