https://github.com/hallazzang/gmaily
Pythonic Gmail client
https://github.com/hallazzang/gmaily
gmail python
Last synced: 11 months ago
JSON representation
Pythonic Gmail client
- Host: GitHub
- URL: https://github.com/hallazzang/gmaily
- Owner: hallazzang
- Created: 2018-01-27T07:52:32.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-07-25T05:29:08.000Z (almost 4 years ago)
- Last Synced: 2025-07-04T05:08:20.034Z (about 1 year ago)
- Topics: gmail, python
- Language: Python
- Size: 16.6 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# gmaily
Unofficial Gmail python client with pythonic API.
## Features
- [x] Clean API
- [x] No other dependencies than standard library
- [ ] Lazy loading for content
## Example
```python
import sys
import getpass
import datetime
from gmaily import Gmaily
g = Gmaily()
user_email = input("Email: ")
user_pw = getpass.getpass()
if not g.login(user_email, user_pw):
print("Cannot login")
sys.exit(1)
msgs = g.inbox().after(datetime.date.today() - datetime.timedelta(weeks=2))
for msg in msgs.all():
print("\n" + (" Mail UID: %d " % msg.uid).center(80, "=") + "\n")
print("Subject:", msg.subject)
print("From:", msg.sender)
print("Date:", msg.date)
print("Attachments:", msg.attachments)
print("-" * 10)
print(msg.text)
g.logout()
```
## Usage
### Searching Mailbox
`SearchQuery`, which is returned by some methods like `Gmaily.inbox`
supports method chaining and you can easily mix search criterias together:
```python
two_weeks_ago = datetime.date.today() - datetime.timedelta(weeks=2)
msgs = g.inbox().by("john@example.com").before(two_weeks_ago)
```
Alternatively, you can use other mailboxes than `INBOX` in the above example
using `Gmaily.mailbox` method:
```python
msgs = g.mailbox("URGENT").on(datetime.date.today())
```
You can then execute the query and fetch the results using `SearchQuery.all`:
```python
print(msgs.all())
```
You can find the full list of supported criterias and their description at
[here](https://tools.ietf.org/html/rfc3501#section-6.4.4).
Note that `ALL` criteria is not present because it's the default criteria
and `SearchQuery.all` stands for executing the query.
Any other names like `.fetch()`, `.do()` could be taken the place,
but I chose the `.all()` because famous ORMs use it too.
Some other criterias are omitted too:
- `NOT`
- `OR`
- `UID`
## Installation
It requires `Python>=3.5`.
```
$ pip3 install -U gmaily
```
## License
MIT