Gmail Wrapper
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)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|