Skip to main content

Gmail Wrapper

CircleCI

Because scrapping Gmail data doesn't have to be a pain.

Installing

pip install gmail-wrapper

Developing

Create your venv

virtualenv .venv
source .venv/bin/activate

Then you can install the dependencies

pip install -e .

Testing

Simply run

make test

Basic Usage

  • Setup the client
from gmail_wrapper import GmailClient

email_account = "john.doe@gmail.com"
credentials_string = "{...}" # You must generate this on your Google account
scopes = [GmailClient.SCOPE_READONLY]
client = GmailClient(email_account, secrets_json_string=credentials_string, scopes=scopes)
  • Fetch messages
import sys

query = "filename:pdf label:friends" # Check Gmail query docs: https://support.google.com/mail/answer/7190
messages = client.get_messages(query=query, limit=10)
for message in messages:
    print("-- MESSAGE {} --".format(message.id))
    print("SUBJECT: {}".format(message.subject))
    print("DATE: {}".format(message.date))
    for attachment in message.attachments:
        print("\t-- ATTACHMENT {} --".format(attachment.id))
        print("\t\tFILENAME: {}".format(attachment.filename))
        print("\t\tDECODED SIZE: {}".format(sys.getsizeof(attachment.content)))
  • Modify message labels

If a single message:

message_id = "..."
message = client.get_message(message_id)
print(message.labels) # ["foo", "bar"]
message.modify(add_labels=["processed"], remove_labels=["foo"]) # Beware that you'll need proper scopes
print(message.labels) # ["bar", "processed"]

If multiple messages:

message_ids = ["...", "..."]
message = client.modify_multiple_messages(message_ids, ["processed"], remove_labels=["foo"])
  • Archive a message
message.archive() # Beware that you'll need proper scopes
  • Send message
content = '''
<html>
    <h1>Hey there</h1>
    <p>I am using gmail-wrapper lib!</p>
</html>
'''

message = client.send(
    subject="You will like it",
    html_content=content,
    to="thanos@loadsmart.com",
    cc=["iron.man@loadsmart.com", "spider.man@loadsmart.com"],
    bcc=["wolverine@loadsmart.com"]
) # Beware that you'll need proper scopes
print(message) # Gmail message: ABC123
  • Reply message
message_id = "..."
message = client.get_message(message_id)

reply = '''
I am out for vacation, will return <strong>Jan 14</strong>.

If it is really important, you can call me, but think twice.
'''
response = message.reply(reply)
  • Handle exceptions

Exceptions are part of every developer day-to-day. You may want to handle exceptions as follows:

from gmail_wrapper.exceptions import (
    MessageNotFoundError,
    AttachmentNotFoundError,
    GmailError,
)

try:
    do_something()
except MessageNotFoundError as e:
    print(f"There is no message! {e}")
except AttachmentNotFoundError as e:
    print(f"There is no attachment! {e}")
except GmailError as e:
    print(f"Google servers are burning! {e}")

Disclaimer

Gmail is a trademark of Google. This open-source project is not an official library nor has any endorsement of Google.

Metadata

Release files for gmail-wrapper 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for gmail-wrapper 2.0.0
File Interpreter ABI Platform
gmail_wrapper-2.0.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Release files / gmail_wrapper-2.0.0-py2.py3-none-any.whl

Download URL gmail_wrapper-2.0.0-py2.py3-none-any.whl
Size 7.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
590a74ce3a9e0217aa7f100efef2760123747c6e4152933388a5d41d512c818d
BLAKE2b-256 checksum
How to use checksums
b38142a5314884f2e1b6a1fd519911656286edcb01cf00399f367028babfa45a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release history Release notifications | RSS feed

This release

2.0.0 This release

1 release file

1.5.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page