Skip to main content

GmailApi wrapper

Project description

Fast-gmail a simple python wrapper for gmailapi


Functionalities:

  • Send text/html messages
  • Send messages with signature & attachments
  • Get messages with pagination
  • Filter messages
  • Get drafts
  • Edit message labels
  • Get message attachments

Instalation:

pip install fast-gmail


Usage:

Initialization

  • Go to https://console.developers.google.com/apis/credentials and login with correct account
  • Setup Oauth consent screen
  • Create new credentials with OAuth client ID for web or installed app
  • Set Authorized redirect URIs to http://localhost:3000/ (Notice the trailing slash)
  • Download the credentials.json file
  • Go to Enable APIs & services and enable GmailAPI & PeopleApi(used for contacts)

With credentials.json file downloaded we can connect to Gmail

gmail = GmailApi(
    credentials_file_path = __path_to_credentials_json_file__,  # Defaults to ./credentials.json
    port = 3000, # Defaults to 3000  !IMPORTANT: if you change this default value don't forget to also changed on Authorized redirect URIs
)

Examples

  • FastAPI
  • Django
  • Flask (comming soon)

Send message

    from fast_gmail import GmailApi

    messages = GmailApi().send_message(
        sender: str,
        to: str,
        subject: str,
        html: Optional[str]=None,
        text: Optional[str]=None,
        cc: Optional[List[str] | str]=None,
        bcc: Optional[List[str] | str]=None,
        attachments: Optional[List[str] | str]=None,
        in_reply_to: Optional[str] = None,
        signature: bool = True
    )
    """Sends an email message.
        Args:
            sender (str): Email address of the message sender.
            to (str): Email address of the recipient.
            subject (str): Subject line of the email.
            html (Optional[str], optional): HTML content of the email body. Defaults to None.
            text (Optional[str], optional): Plain text content of the email body. Defaults to None.
            cc (Optional[List[str] | str], optional): List of email addresses to carbon copy. Defaults to None.
            bcc (Optional[List[str] | str], optional): List of email addresses to blind carbon copy. Defaults to None.
            attachments (Optional[List[str] | str], optional): List of file paths to attach to the email. Defaults to None.
            in_reply_to (Optional[str], optional): Message.message_id value that is replyed to. Defaults to None.
            signature (bool, optional): Whether to include a signature (if configured). Defaults to True.
        Returns:
            Optional[Message]: An object representing the sent message, or None on error.
    """

Get messages

    messages = GmailApi().get_messages(
        includeSpamTrash: bool = False,
        max_results: int = 10,
        labels: Union[List[Labels], List[str], None] = None,
        next_page_token: str = None,
        existing_pages: Optional[List[str] | str] = None,
        previous_page_token: Optional[str] = None,
        query: Union[SearchParams, str] = None,
    )
    """Retrieves messages from a user's mailbox.
        Args:
            includeSpamTrash (bool, optional): If True, includes messages from spam and trash folders. Defaults to False.
            max_results (int, optional): Maximum number of messages to return. Defaults to MAX_RESULTS (10).
            labels (Union[List[Labels], List[str], None], optional): List of label IDs or strings to filter by. Defaults to None (all labels).
            next_page_token (str, optional): Page token for fetching the next page of results.
            existing_pages (Optional[List[str] | str], optional): Used internally for pagination. Defaults to None.
            previous_page_token (Optional[str], optional): Page token for fetching the previous page of results.
            query (Union[SearchParams, str], optional): Search query to filter messages. Can be a string or a SearchParams object. 
        Returns:
            GetMessagesResponse: An object containing the retrieved messages and pagination information.
    """

Get INBOX/SPAM/TRASH messages

    messages = GmailApi().get_inbox_messages(
        max_results: int = MAX_RESULTS,
        next_page_token: str = None,
        existing_pages: Optional[List[str] | str] = None,
        previous_page_token: Optional[str] = None,
        query: Union[SearchParams, str] = None
    )

    # helpers for spam or trash
    messages = GmailApi().get_spam_messages()
    messages = GmailApi().get_trash_messages()

GET message

    message = GmailApi().get_message(id)
    # returns a Message object

GET attachment

    message = GmailApi().get_message(id)
    attachment_id = None
    attachment_name = None
    for attacment in message.attachments:
        attachment_id = attachment.part_id
        attachment_name = attachment.filename

    # get attachment by id
    by_id = message.get_attachment(id=attachment_id)
    # or by filename
    by_name = message.get_attachment(filename=attachment_name) # returns an Attachment object

    # save file to disk
    by_id.save(filepath=f"/tmp/{attachment.filename}", overwrite=True)

GET contacts

    contacts = GmailApi().get_contacts()
    for contact in contacts:
        if "emailAddresses" in contact and contact["emailAddresses"]:
            print(contact["emailAddresses"][0]["value"])

Search contacts

    contacts = GmailApi().search_contacts(query="example@gmail.com")
    for contact in contacts:
        if "person" in contact and contact["person"]:
            print(contact["person"]["emailAddresses"][0]["value"])

Message actions

    message = GmailApi().get_message(id)

    # mark read or unread
    message.toggle_read_unread
    # or
    message.mark_as_read
    # or
    message.mark_as_unread

    # spam
    message.toggle_spam
    # or
    message.mark_spam
    message.mark_not_spam

    # trash
    message.toggle_trash
    # or
    message.move_to_trash
    message.move_from_trash

    # starred
    message.toggle_starred
    message.mark_starred
    message.mark_not_starred

    #important
    message.toggle_important
    message.mark_important
    message.mark_not_important

    # other properties
    message.body
    message.html
    message.plain
    message.recipient
    message.subject
    message.sender
    message.snippet
    message.is_starred
    message.is_important
    message.is_spam
    message.is_unread
    ...

Classes:

class GmailApi:

Attributes:
  • credentials (Optional[Credentials]): Stores user credentials (OAuth tokens) for accessing Gmail.
  • google_service (GoogleService): An instance of GoogleService used for making API requests.
  • max_results (int): Maximum number of messages to retrieve per request (default 10).
  • SEPARATOR_SYMBOL (str): String used for separating page tokens during pagination.
  • profile_data (Optional[GmailProfile]): Caches the user's Gmail profile information.
  • application_type: ApplicationType = ApplicationType.WEB: Type of application WEB or INSTALLED,
  • code: Optional[str] = None: gmail oAuth response code for creating token.json file after successful login
Constructor (init):
  • Initializes the GmailApi object.
  • Reads credentials from token and credentials files.
  • Handles refreshing expired tokens.
  • Creates a GoogleService instance for making API calls.
Methods:
Message Retrieval:
  • get_message(id: str)-> Optional[Message]: Retrieves a message by its ID.
  • get_draft(id: str)-> Optional[Message]: Retrieves a draft by its ID.
Message Sending:
  • send_message(sender, to, subject, ...)-> Optional[Message]: Sends an email message with various options (text, HTML, attachments, signature).
Inbox Management:
  • get_inbox_messages()-> GetMessagesResponse: Retrieves messages from the inbox. Similar methods exist for getting trash, spam, and all messages with various filtering options.
Drafts Management:
  • get_draft_messages(): Retrieves draft messages.
Attachment Management:
  • get_attachment(message_id: str, attachment_id: str) -> Optional[MessagePartBody]: Retrieves an attachment from a message.
Profile and Label Management:
  • labels: Returns a list of user labels.
  • profile: Retrieves and caches the user's Gmail profile information.

Overall, this code provides a well-structured and functional interface for interacting with Gmail using the Gmail API.


class Message:

Properties:
  • id: Unique identifier for the message.
  • snippet: Shortened summary of the message content.
  • threadId: Thread ID that groups related messages together.
  • historyId: Unique identifier for a specific message history change.
  • sizeEstimate: Approximate size of the message in bytes.
  • internalDate: Internal timestamp representing when the message was created.
  • payload: Object of type MessagePart containing the parsed content of the message body and attachments.
  • raw: Optional property containing the raw email data (if available).
  • labelIds: List of label IDs associated with the message.
  • labels: List of GmailLabel objects representing the message's labels (fetched on demand).
Additional Message Properties:
  • message_headers: Returns a list of MessageHeader objects from the message's payload (if available).
  • body: Returns the message body content (combines plain text and HTML if both exist).
  • html: Returns the HTML content of the message body (if available).
  • plain: Returns the plain text content of the message body (if available).
  • alternative: Returns the text content of the most appropriate alternative part (if message uses multipart/alternative).
  • recipient: Extracts the recipient's email address from the "To" header (if available).
  • message_id: Extracts the message ID from the message headers (if available).
  • subject: Extracts the subject line from the message headers (if available).
  • sender: Extracts the sender's email address from the "From" header (if available).
  • has_attachments: Checks if the message or its nested parts contain attachments.
  • attachments: Returns a list of Attachment objects for all attachments within the message.
  • is_unread, is_starred, is_important, etc.: Boolean properties indicating the message's label status (unread, starred, important, spam, draft, trash).
  • created_date: Converts the internalDate to a datetime object representing the message creation time.
  • date: Parses the "Received" or "Date" header to get the message delivery date (if available).
  • date_string: Formats the delivery date according to a specified format string (defaults to "%a, %d %b %Y %H:%M:%S %z").

Methods:
  • mark_as_read, mark_as_unread: Toggles the unread flag for the message.
  • toogle_read_unread: Shortcut to toggle the unread flag based on the current state.
  • mark_spam, mark_not_spam: Toggles the spam label for the message.
  • toggle_spam: Shortcut to toggle the spam label based on the current state.
  • move_to_trash, move_from_trash: Toggles the trash label for the message.
  • toggle_trash: Shortcut to toggle the trash label based on the current state.
  • mark_important, mark_not_important: Toggles the important label for the message.
  • toggle_important: Shortcut to toggle the important label based on the current state.
  • mark_starred, mark_not_starred: Toggles the starred label for the message.
  • toggle_starred: Shortcut to toggle the starred label based on the current state.
  • get_attachment(filename=None, id=None): Retrieves an attachment by filename or internal part ID.
  • get_labels: Fetches and returns a list of GmailLabel objects for all labels associated with the message.
  • add_label(label), add_labels(labels): Adds labels to the message.
  • remove_label(label), remove_labels(labels): Removes labels from the message.
  • modify_labels(labels_to_add=None, labels_to_remove=None): Updates message labels by adding and/or removing labels.

Overall, this Message class provides a comprehensive way to access and manage individual email messages within a Gmail account. It allows you to retrieve message details, content, attachments, labels, and perform various actions like marking as read/unread, starring, labeling, and trash management.


class Attachment:

Properties:
  • filename (str): This attribute stores the filename of the attachment.
  • mimeType (str): This attribute stores the MIME type of the attachment content, which specifies the format of the data (e.g., image/jpeg, text/plain).
  • part_id (str): This attribute stores the internal identifier for the attachment within the message parts. This ID is used to download the attachment using the Gmail API.
  • google_service (GoogleService): This attribute holds a reference to the GoogleService object used for downloading the attachment. This object likely encapsulates authentication and communication details with the Gmail API.
  • id (Optional[str]): This optional attribute stores the ID of the attachment generated by Gmail after a message is fetched using the .get() method. This ID might change for the same attachment across different fetches.
  • data (Optional[str]): This optional attribute stores the Base64 encoded content of the attachment data downloaded from the API.
Methods:
  • download() -> None: This method downloads the attachment data from the Gmail API if it hasn't been downloaded already. It raises exceptions for errors like missing message ID or HTTP errors during download.
  • save(filepath: Optional[str] = None, overwrite: bool = False) -> None: This method saves the attachment data to a file. It allows specifying the filepath and whether to overwrite existing files. It raises an error if the file already exists and overwrite is set to False.

Overall, the Attachment class provides functionality to manage attachments associated with Gmail messages. It handles downloading attachments from the API, storing downloaded data, and saving them to local files.


class GetMessagesResponse:

Attributes:
  • next_page_token (Optional[str], optional): Token for fetching the next page of results. Defaults to None.
  • existing_pages (Optional[str], optional): Used internally for pagination. Defaults to None. List like string of page tokens separated by GmailApi.SEPARATOR_SYMBOL
  • previous_page_token (Optional[List[str | None]], optional): Token for fetching the previous page of results (may be empty list). Defaults to [].
  • messages (List[Message]): List of retrieved message objects.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fast_gmail-1.1.1a0.tar.gz (24.0 kB view details)

Uploaded Source

Built Distribution

fast_gmail-1.1.1a0-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file fast_gmail-1.1.1a0.tar.gz.

File metadata

  • Download URL: fast_gmail-1.1.1a0.tar.gz
  • Upload date:
  • Size: 24.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for fast_gmail-1.1.1a0.tar.gz
Algorithm Hash digest
SHA256 80d16d4983cb5bd237702540835ede3ba88efc54c2032c71e0389409b0569df9
MD5 fedfc279317a25fe233acd4d19e53107
BLAKE2b-256 b96d16b55857036a1039d85aed6ecc09cb2146c4c04396ba9ea9195acdae1db4

See more details on using hashes here.

File details

Details for the file fast_gmail-1.1.1a0-py3-none-any.whl.

File metadata

  • Download URL: fast_gmail-1.1.1a0-py3-none-any.whl
  • Upload date:
  • Size: 21.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for fast_gmail-1.1.1a0-py3-none-any.whl
Algorithm Hash digest
SHA256 066efe4ed172f8e821b2975fd9a64c7ef8b23837cd76a0741eb72388be1d1f8a
MD5 2fb1589abac98ec72e7d8a8b8fab034c
BLAKE2b-256 a4e08d3799e0e8658fff4a0d9af54a9a8e2145e1383c81f15688237946f6e667

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page