RPA.Email.ImapSmtp
module RPA.ImapSmtp
class RPA.Email.ImapSmtp.ImapSmtp
ImapSmtp is a library for sending, reading, and deleting emails. ImapSmtp is interfacing with SMTP and IMAP protocols.
*About criteria argument*
Various keywords like List Messages
and Move Messages
have keyword
argument called criterion
which can be used to filter emails according
to given criteria.
Syntax needs to according to specification and more information about that can be read from https://robocorp.com/docs/development-guide/email/sending-emails-with-gmail-smtp#listing-email-messages-by-criteria
Troubleshooting
- Authentication error with GMail - βApplication-specific password requiredβ : See: https://support.google.com/mail/answer/185833?hl=en
- More secure apps (XOAUTH2 protocol) - Use the OAuth2 flow as in this Portal robot: : example-oauth-email Make sure to specify a provider (and optionally a tenant) when importing the library and planning to use this flow.
Examples
Robot Framework
It is highly recommended to secure your passwords and take care
that they are not stored in version control by mistake.
See RPA.Robocorp.Vault
to see how to store secrets in
Robocorp Vault.
When sending HTML content with IMG tags, the src
filenames must match
the base image name given with the images
parameter.
Python
variable ROBOT_LIBRARY_DOC_FORMAT
variable ROBOT_LIBRARY_SCOPE
variable TO_PROTECT
method add_gmail_labels
Add GMail labels to messages matching criterion and if given, source folder
Parameters
- labels β comma separated list of labels to add
- criterion β label messages matching criterion
- source_folder β look for messages in this folder, default all folders
- Returns: status of the operation
method authorize
Authorize user to SMTP and IMAP servers.
Parameters
- account β user account as string, defaults to None
- password β user password as string, defaults to None
- smtp_server β SMTP server address, defaults to None
- imap_server β IMAP server address, defaults to None
- smtp_port β SMTP server port, defaults to None (587 for SMTP)
- imap_port β IMAP server port, defaults to None
- is_oauth β Use XOAUTH2 protocol with a base64 encoded OAuth2 string as password
Will use separately set credentials or those given in keyword call.
method authorize_imap
Authorize to IMAP server.
Parameters
- account β IMAP account name, defaults to None
- password β IMAP account password, defaults to None
- imap_server β IMAP server address, defaults to None
- imap_port β IMAP server port, defaults to None
- is_oauth β Use XOAUTH2 protocol with a base64 encoded OAuth2 string as password
Can be called without giving any parameters if library
has been initialized with necessary information and/or
keyword Set Credentials
has been called.
method authorize_smtp
Authorize to SMTP server.
Parameters
- account β SMTP account name, defaults to None
- password β SMTP account password, defaults to None
- smtp_server β SMTP server address, defaults to None
- smtp_port β SMTP server port, defaults to None (587 for SMTP)
- is_oauth β Use XOAUTH2 protocol with a base64 encoded OAuth2 string as password
Can be called without giving any parameters if library
has been initialized with necessary information and/or
keyword Set Credentials
has been called.
method convert_eml_file_into_message
Converts EML file into message dictionary.
Returned dictionary contains:
- headers of the email
- attachments the filenames of the attachments or if attachments have been saved then they are absolute filepaths to each attachment
- body_text is the TEXT formatted content of the email body
- body_html is the HTML formatted content of the email body
Parameters
- eml_filepath β filepath to the EML file
- save_attachments_directory β path to the directory where possible attachments will be saved to, if not given then attachment filenames are returned in a list of the return dictionary in the key βattachmentsβ
- Returns: dictionary containing information aboutthe EML message
method create_folder
Create email folder
- Parameters: folder_name β name for the new folder
- Returns: True if operation was successful, False if not
method delete_folder
Delete email folder
- Parameters: folder_name β current folder name
- Returns: True if operation was successful, False if not
method delete_message
Delete single message from server based on criterion.
Parameters
- criterion β filter messages based on this search, can also be a message dictionary
- source_folder β defaults to already selected folder, but can be set to delete message in a specific folder
- Returns: True if success, False if not
If criterion does not return exactly 1 message then delete is not done.
method delete_messages
Delete messages from server based on criterion.
Parameters
- criterion β filter messages based on this search, can also be a list of message dictionaries
- limit β maximum number of message to delete
- source_folder β defaults to already selected folder, but can be set to delete message in a specific folder
- Returns: True if success, False if not
method do_message_actions
Do actions to messages matching criterion and if given, source folder
Actions can be:
- msg_copy
- msg_delete
- msg_flag
- msg_unflag
- msg_read
- msg_unread
- msg_save
- msg_attachment_save
- glabel_add
- glabel_remove
Result object contains following attributes:
- actions_done, number of messages on which action was performed
- message_count, number of messages matching criterion
- ids, message ids matching criterion
- uids, dictionary of message uids and message content
Parameters
- criterion β perform actions on messages matching this
- actions β list of actions to perform on matching messages
- source_folder β look for messages in this folder, default all folders
- target_folder β can be file path or email folder (for example action: msg_copy)
- labels β comma separated list of labels (for example action: glabel_add)
- limit β maximum number of messages (for example action: msg_delete)
- overwrite β to control if file should overwrite (for example action: msg_attachment_save)
- prefix β prefix to be added into filename (for example: msg_save)
- Returns: result object
method email_to_document
Convert a raw e-mail into a Word document.
This keyword extracts the HTML (or Text) content from the passed input e-mail and saves it into docx format at the provided output path.
Parameters
- input_source β Path, bytes or file-like object with the input raw e-mail content
- output_path β Where to save the output docx file
Examples
Robot Framework
Python
method flag_messages
Mark messages as flagged
Parameters
- criterion β mark messages matching criterion
- unflag β to mark messages as not flagged
- Returns: successful operations (int), matching messages (int)
method generate_oauth_string
Generate and return an OAuth2 string compatible with the IMAP/POP/SMTP XOAUTH2 protocol.
This string usually gets passed to the Authorize
keyword as password when
is_oauth=${True}.
Parameters
- username β The e-mail address youβre going to send the e-mail with.
- access_token β Access token string found in the dictionary obtained with
Get OAuth Token
orRefresh OAuth Token
.
- Returns: Base64 encoded string packing these credentials and replacing the legacy password when enabling the OAuth2 flow.
Example: Robot Framework
method generate_oauth_url
Generates an authorization URL which must be opened by the user to start the OAuth2 flow and obtain an authorization code as response.
- Parameters: client_id β Client app ID. (generated by the provider)
- Returns: Authorization URL string not containing any sensitive info in it.
Example: Robot Framework
method get_decoded_email_body
Decodes email body and extracts its text/html content.
Automatically detects character set if the header is not set.
Parameters
- message β Raw 7-bit message body input e.g. from imaplib. Double encoded in quoted-printable and latin-1
- html_first β Prioritize html extraction over text when this is True
- Returns: Message body as unicode string and a boolean telling if the message has attachments
method get_folder_list
Get list of folders on the server
Parameters
- subdirectory β list subdirectories for this folder
- pattern β list folders matching this pattern
- Returns: list of folders
method get_oauth_token
Exchanges the code obtained previously with Generate OAuth URL
for a
token.
Parameters
- client_secret β Client app secret. (generated by the provider)
- response_url β The final URL containing the authorization code found in the address bar after authenticating and authorizing the Client app through the authorization URL.
- Returns: A dictionary containing the access & refresh token, plus metadata.
Example: Robot Framework
method list_messages
Return list of messages matching criterion.
Parameters
- criterion β list emails matching this, defaults to ββ
- source_folder β list messages from this folder
- readonly β set False if you want to mark matching messages as read
- Returns: list of messages
Note. listing messages without source_folder might take a long time
method mark_as_read
Mark messages as read
Parameters
- criterion β mark messages matching criterion
- unread β to mark messages as not read
- Returns: successful operations (int), matching messages (int)
method mark_as_unread
Mark messages as not read
- Parameters: criterion β mark messages matching criterion
- Returns: successful operations (int), matching messages (int)
method move_messages
Move messages from source folder to target folder
Parameters
- criterion β move messages matching criterion
- source_folder β location of the messages, default INBOX
- target_folder β where messages should be move into
- Returns: True if all move operations succeeded, False if not
method move_messages_by_ids
Move message by their Message-IDβs from source folder to target folder
Parameters
- message_ids β one Message-ID as string or list of Message-IDs
- source_folder β location of the messages, default INBOX
- target_folder β where messages should be move into
- use_gmail_search β set to True to use Rfc822msgid search, default is HEADER Message-ID search
- Returns: True if all move operations succeeded, False if not
method refresh_oauth_token
Refreshes the token as the access one usually expires after 1h and the refresh one never expires. (as long as it doesnβt get revoked)
Parameters
- client_id β Client app ID. (generated by the provider)
- client_secret β Client app secret. (generated by the provider)
- token β Full token dictionary previously obtained with
Get OAuth Token
.
- Returns: A token dictionary containing a new access token and updated metadata.
Example: Robot Framework
method remove_gmail_labels
Remove GMail labels to messages matching criterion and if given, source folder
Parameters
- labels β comma separated list of labels to remove
- criterion β unlabel messages matching criterion
- source_folder β look for messages in this folder, default all folders
- Returns: status of the operation
method rename_folder
Rename email folder
Parameters
- oldname β current folder name
- newname β new name for the folder
- suppress_error β to silence warning message, defaults to False
- Returns: True if operation was successful, False if not
method save_attachment
Save mail attachment of a single given email on the local disk.
Parameters
- message β message item
- target_folder β local folder for saving attachments to (needs to exist), defaults to userβs home directory if None
- overwrite β overwrite existing file if True, defaults to False
- prefix β optional filename prefix added to the attachments, empty by default
- Returns: list of saved attachments (list of absolute filepaths) in one email
method save_attachments
Save mail attachments of emails matching criterion on the local disk.
Parameters
- criterion β attachments are saved for mails matching this, defaults to ββ
- target_folder β local folder for saving attachments to (needs to exist), defaults to userβs home directory if None
- overwrite β overwrite existing file if True, defaults to False
- prefix β optional filename prefix added to the attachments, empty by default
- Returns: list of saved attachments (absolute file paths) of all emails
method save_messages
Save messages based on criteria and store them to target folder with attachment files.
Does not save message if target_folder is not given.
Parameters
- criterion β filter messages based on this, defaults to ββ
- target_folder β path to folder where message are saved, defaults to None
- prefix β optional filename prefix added to the attachments, empty by default
- Returns: True if succeeded, False otherwise
method select_folder
Select folder by name
Parameters
- folder_name β name of the folder to select
- readonly β if set to True then message flags are not modified
- Returns: message count in the selected folder
Returns number of messages in the folder or exception if folder does not exist on the server.
method send_message
Send SMTP email
Parameters
- sender β who is sending, ie. βfromβ
- recipients β who is receiving, ie. βtoβ
- subject β mail subject field
- body β mail body content
- attachments β list of filepaths to attach
- html β if message content is in HTML, default False
- images β list of filepaths for inline images
- cc β list of email addresses for email βccβ field
- bcc β list of email addresses for email βbccβ field
- attachment_position β content position for attachment, default top
- in_reply_to β the βMessage IDβ to which this message is in reply to, for example <message_id_for_reply_to>
- return_path β email address which should receive βbounce messagesβ
- reply_to β email address which should receive the reply
Valid sender values
- First Lastname <address@domain>
- address@domain
About in_reply_to
In addition of setting in_reply_to parameter to match the βMessage IDβ of the email this message is replying to, some email servers require that also subject of the original email is included in the reply email subject with
re: ` prefix, ie. βre: Why it is best to use Robocorp RPAβ or with the original email subject.
And please note that in_reply_to the βMessage IDβ needs to contain < in the start of the ID and > at the end of the ID.
About return_path
Email servers tend to set βReturn-Pathβ of the email on their own so in some cases user given address wonβt work as the email server does not use the user set address. If possible, the email serverβs configuration can be changed to ensure that βReturn-Pathβ header is respected.
method send_smtp_hello
Send hello message to SMTP server.
Required step when creating SMTP connection.
method set_credentials
Set credentials
Parameters
- account β user account as string, defaults to None
- password β user password as string, defaults to None
method unflag_messages
Mark messages as not flagged
- Parameters: criterion β mark messages matching criterion
- Returns: successful operations (int), matching messages (int)
method wait_for_message
Wait for email matching criterion to arrive into mailbox.
Parameters
- criterion β message filter to wait for, defaults to ββ
- timeout β total time in seconds to wait for email, defaults to 5.0
- interval β time in seconds for new check, defaults to 1.0
- readonly β set False if you want to mark matching messages as read
- Returns: list of messages