summaryrefslogtreecommitdiff
path: root/python-simplegmail.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-simplegmail.spec')
-rw-r--r--python-simplegmail.spec677
1 files changed, 677 insertions, 0 deletions
diff --git a/python-simplegmail.spec b/python-simplegmail.spec
new file mode 100644
index 0000000..e0110b6
--- /dev/null
+++ b/python-simplegmail.spec
@@ -0,0 +1,677 @@
+%global _empty_manifest_terminate_build 0
+Name: python-simplegmail
+Version: 4.1.1
+Release: 1
+Summary: A simple Python API client for Gmail.
+License: MIT License
+URL: https://github.com/jeremyephron/simplegmail
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/bc/82/bc78ebd7f1fa5b55450357397d43b83bae2d944106b17b1fb93af1e3d3a6/simplegmail-4.1.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-google-api-python-client
+Requires: python3-beautifulsoup4
+Requires: python3-dateutil
+Requires: python3-oauth2client
+Requires: python3-lxml
+
+%description
+Currently Supported Behavior:
+- Sending html messages
+- Sending messages with attachments
+- Sending messages with your Gmail account signature
+- Retrieving messages with the full suite of Gmail's search capabilities
+- Retrieving messages with attachments, and downloading attachments
+- Modifying message labels (includes marking as read/unread, important/not
+ important, starred/unstarred, trash/untrash, inbox/archive)
+## Table of Contents
+- [Getting Started](#getting-started)
+- [Installation](#installation)
+- [Usage](#usage)
+ - [Send a simple message](#send-a-simple-message)
+ - [Send a message with attachments, cc, bcc fields](#send-a-message-with-attachments-cc-bcc-fields)
+ - [Retrieving messages](#retrieving-messages)
+ - [Marking messages](#marking-messages)
+ - [Changing message labels](#changing-message-labels)
+ - [Downloading attachments](#downloading-attachments)
+ - [Retrieving messages with queries](#retrieving-messages-advanced-with-queries)
+ - [Retrieving messages with more advanced queries](#retrieving-messages-more-advanced-with-more-queries)
+- [Feedback](#feedback)
+## Getting Started
+The only setup required is to download an OAuth 2.0 Client ID file from Google
+that will authorize your application.
+This can be done at: https://console.developers.google.com/apis/credentials.
+For those who haven't created a credential for Google's API, after clicking the
+link above (and logging in to the appropriate account),
+1. Select/create the project that this authentication is for (if creating a new
+project make sure to configure the OAuth consent screen; you only need to set
+an Application name)
+2. Click on the "Dashboard" tab, then "Enable APIs and Services". Search for
+Gmail and enable.
+3. Click on the Credentials tab, then "Create Credentials" > "OAuth client ID".
+4. Select what kind of application this is for, and give it a memorable name.
+Fill out all necessary information for the credential (e.g., if choosing
+"Web Application" make sure to add an Authorized Redirect URI. See
+https://developers.google.com/identity/protocols/oauth2 for more infomation).
+5. Back on the credentials screen, click the download icon next to the
+credential you just created to download it as a JSON object.
+6. Save this file as "client_secret.json" and place it in the root directory of
+your application. (The `Gmail` class takes in an argument for the name of this
+file if you choose to name it otherwise.)
+The first time you create a new instance of the `Gmail` class, a browser window
+will open, and you'll be asked to give permissions to the application. This
+will save an access token in a file named "gmail-token.json", and only needs to
+occur once.
+You are now good to go!
+Note about authentication method: I have opted not to use a username-password
+authentication (through imap/smtp), since using Google's authorization is both
+significantly safer and avoids clashing with Google's many security measures.
+## Installation
+Install using `pip` (Python3).
+```bash
+pip3 install simplegmail
+```
+## Usage
+### Send a simple message:
+```python
+from simplegmail import Gmail
+gmail = Gmail() # will open a browser window to ask you to log in and authenticate
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+### Send a message with attachments, cc, bcc fields:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "cc": ["bob@bobsemail.com"],
+ "bcc": ["marie@gossip.com", "hidden@whereami.com"],
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "attachments": ["path/to/something/cool.pdf", "path/to/image.jpg", "path/to/script.py"],
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+It couldn't be easier!
+### Retrieving messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Unread messages in your inbox
+messages = gmail.get_unread_inbox()
+# Starred messages
+messages = gmail.get_starred_messages()
+# ...and many more easy to use functions can be found in gmail.py!
+# Print them out!
+for message in messages:
+ print("To: " + message.recipient)
+ print("From: " + message.sender)
+ print("Subject: " + message.subject)
+ print("Date: " + message.date)
+ print("Preview: " + message.snippet)
+ print("Message Body: " + message.plain) # or message.html
+```
+### Marking messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message_to_read = messages[0]
+message_to_read.mark_as_read()
+# Oops, I want to mark as unread now
+message_to_read.mark_as_unread()
+message_to_star = messages[1]
+message_to_star.star()
+message_to_trash = messages[2]
+message_to_trash.trash()
+# ...and many more functions can be found in message.py!
+```
+### Changing message labels:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Get the label objects for your account. Each label has a specific ID that
+# you need, not just the name!
+labels = gmail.list_labels()
+# To find a label by the name that you know (just an example):
+finance_label = list(filter(lambda x: x.name == 'Finance', labels))[0]
+messages = gmail.get_unread_inbox()
+# We can add/remove a label
+message = messages[0]
+message.add_label(finance_label)
+# We can "move" a message from one label to another
+message.modify_labels(to_add=labels[10], to_remove=finance_label)
+# ...check out the code in message.py for more!
+```
+### Downloading attachments:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message = messages[0]
+if message.attachments:
+ for attm in message.attachments:
+ print('File: ' + attm.filename)
+ attm.save() # downloads and saves each attachment under it's stored
+ # filename. You can download without saving with `attm.download()`
+```
+### Retrieving messages (advanced, with queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# Unread messages in inbox with label "Work"
+labels = gmail.list_labels()
+work_label = list(filter(lambda x: x.name == 'Work', labels))[0]
+messages = gmail.get_unread_inbox(labels=[work_label])
+# For even more control use queries:
+# Messages that are: newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+query_params = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Work"], ["Homework", "CS"]]
+}
+messages = gmail.get_messages(query=construct_query(query_params))
+# We could have also accomplished this with
+# messages = gmail.get_unread_messages(query=construct_query(newer_than=(2, "day"), labels=[["Work"], ["Homework", "CS"]]))
+# There are many, many different ways of achieving the same result with search.
+```
+### Retrieving messages (more advanced, with more queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# For even more control use queries:
+# Messages that are either:
+# newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+# or
+# newer than 1 month old, unread, labeled "Top Secret", but not starred.
+labels = gmail.list_labels()
+# Construct our two queries separately
+query_params_1 = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Finance"], ["Homework", "CS"]]
+}
+query_params_2 = {
+ "newer_than": (1, "month"),
+ "unread": True,
+ "labels": ["Top Secret"],
+ "exclude_starred": True
+}
+# construct_query() will create both query strings and "or" them together.
+messages = gmail.get_messages(query=construct_query(query_params_1, query_params_2))
+```
+For more on what you can do with queries, read the docstring for `construct_query()` in `query.py`.
+## Feedback
+If there is functionality you'd like to see added, or any bugs in this project,
+please let me know by posting an issue or submitting a pull request!
+
+%package -n python3-simplegmail
+Summary: A simple Python API client for Gmail.
+Provides: python-simplegmail
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-simplegmail
+Currently Supported Behavior:
+- Sending html messages
+- Sending messages with attachments
+- Sending messages with your Gmail account signature
+- Retrieving messages with the full suite of Gmail's search capabilities
+- Retrieving messages with attachments, and downloading attachments
+- Modifying message labels (includes marking as read/unread, important/not
+ important, starred/unstarred, trash/untrash, inbox/archive)
+## Table of Contents
+- [Getting Started](#getting-started)
+- [Installation](#installation)
+- [Usage](#usage)
+ - [Send a simple message](#send-a-simple-message)
+ - [Send a message with attachments, cc, bcc fields](#send-a-message-with-attachments-cc-bcc-fields)
+ - [Retrieving messages](#retrieving-messages)
+ - [Marking messages](#marking-messages)
+ - [Changing message labels](#changing-message-labels)
+ - [Downloading attachments](#downloading-attachments)
+ - [Retrieving messages with queries](#retrieving-messages-advanced-with-queries)
+ - [Retrieving messages with more advanced queries](#retrieving-messages-more-advanced-with-more-queries)
+- [Feedback](#feedback)
+## Getting Started
+The only setup required is to download an OAuth 2.0 Client ID file from Google
+that will authorize your application.
+This can be done at: https://console.developers.google.com/apis/credentials.
+For those who haven't created a credential for Google's API, after clicking the
+link above (and logging in to the appropriate account),
+1. Select/create the project that this authentication is for (if creating a new
+project make sure to configure the OAuth consent screen; you only need to set
+an Application name)
+2. Click on the "Dashboard" tab, then "Enable APIs and Services". Search for
+Gmail and enable.
+3. Click on the Credentials tab, then "Create Credentials" > "OAuth client ID".
+4. Select what kind of application this is for, and give it a memorable name.
+Fill out all necessary information for the credential (e.g., if choosing
+"Web Application" make sure to add an Authorized Redirect URI. See
+https://developers.google.com/identity/protocols/oauth2 for more infomation).
+5. Back on the credentials screen, click the download icon next to the
+credential you just created to download it as a JSON object.
+6. Save this file as "client_secret.json" and place it in the root directory of
+your application. (The `Gmail` class takes in an argument for the name of this
+file if you choose to name it otherwise.)
+The first time you create a new instance of the `Gmail` class, a browser window
+will open, and you'll be asked to give permissions to the application. This
+will save an access token in a file named "gmail-token.json", and only needs to
+occur once.
+You are now good to go!
+Note about authentication method: I have opted not to use a username-password
+authentication (through imap/smtp), since using Google's authorization is both
+significantly safer and avoids clashing with Google's many security measures.
+## Installation
+Install using `pip` (Python3).
+```bash
+pip3 install simplegmail
+```
+## Usage
+### Send a simple message:
+```python
+from simplegmail import Gmail
+gmail = Gmail() # will open a browser window to ask you to log in and authenticate
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+### Send a message with attachments, cc, bcc fields:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "cc": ["bob@bobsemail.com"],
+ "bcc": ["marie@gossip.com", "hidden@whereami.com"],
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "attachments": ["path/to/something/cool.pdf", "path/to/image.jpg", "path/to/script.py"],
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+It couldn't be easier!
+### Retrieving messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Unread messages in your inbox
+messages = gmail.get_unread_inbox()
+# Starred messages
+messages = gmail.get_starred_messages()
+# ...and many more easy to use functions can be found in gmail.py!
+# Print them out!
+for message in messages:
+ print("To: " + message.recipient)
+ print("From: " + message.sender)
+ print("Subject: " + message.subject)
+ print("Date: " + message.date)
+ print("Preview: " + message.snippet)
+ print("Message Body: " + message.plain) # or message.html
+```
+### Marking messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message_to_read = messages[0]
+message_to_read.mark_as_read()
+# Oops, I want to mark as unread now
+message_to_read.mark_as_unread()
+message_to_star = messages[1]
+message_to_star.star()
+message_to_trash = messages[2]
+message_to_trash.trash()
+# ...and many more functions can be found in message.py!
+```
+### Changing message labels:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Get the label objects for your account. Each label has a specific ID that
+# you need, not just the name!
+labels = gmail.list_labels()
+# To find a label by the name that you know (just an example):
+finance_label = list(filter(lambda x: x.name == 'Finance', labels))[0]
+messages = gmail.get_unread_inbox()
+# We can add/remove a label
+message = messages[0]
+message.add_label(finance_label)
+# We can "move" a message from one label to another
+message.modify_labels(to_add=labels[10], to_remove=finance_label)
+# ...check out the code in message.py for more!
+```
+### Downloading attachments:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message = messages[0]
+if message.attachments:
+ for attm in message.attachments:
+ print('File: ' + attm.filename)
+ attm.save() # downloads and saves each attachment under it's stored
+ # filename. You can download without saving with `attm.download()`
+```
+### Retrieving messages (advanced, with queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# Unread messages in inbox with label "Work"
+labels = gmail.list_labels()
+work_label = list(filter(lambda x: x.name == 'Work', labels))[0]
+messages = gmail.get_unread_inbox(labels=[work_label])
+# For even more control use queries:
+# Messages that are: newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+query_params = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Work"], ["Homework", "CS"]]
+}
+messages = gmail.get_messages(query=construct_query(query_params))
+# We could have also accomplished this with
+# messages = gmail.get_unread_messages(query=construct_query(newer_than=(2, "day"), labels=[["Work"], ["Homework", "CS"]]))
+# There are many, many different ways of achieving the same result with search.
+```
+### Retrieving messages (more advanced, with more queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# For even more control use queries:
+# Messages that are either:
+# newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+# or
+# newer than 1 month old, unread, labeled "Top Secret", but not starred.
+labels = gmail.list_labels()
+# Construct our two queries separately
+query_params_1 = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Finance"], ["Homework", "CS"]]
+}
+query_params_2 = {
+ "newer_than": (1, "month"),
+ "unread": True,
+ "labels": ["Top Secret"],
+ "exclude_starred": True
+}
+# construct_query() will create both query strings and "or" them together.
+messages = gmail.get_messages(query=construct_query(query_params_1, query_params_2))
+```
+For more on what you can do with queries, read the docstring for `construct_query()` in `query.py`.
+## Feedback
+If there is functionality you'd like to see added, or any bugs in this project,
+please let me know by posting an issue or submitting a pull request!
+
+%package help
+Summary: Development documents and examples for simplegmail
+Provides: python3-simplegmail-doc
+%description help
+Currently Supported Behavior:
+- Sending html messages
+- Sending messages with attachments
+- Sending messages with your Gmail account signature
+- Retrieving messages with the full suite of Gmail's search capabilities
+- Retrieving messages with attachments, and downloading attachments
+- Modifying message labels (includes marking as read/unread, important/not
+ important, starred/unstarred, trash/untrash, inbox/archive)
+## Table of Contents
+- [Getting Started](#getting-started)
+- [Installation](#installation)
+- [Usage](#usage)
+ - [Send a simple message](#send-a-simple-message)
+ - [Send a message with attachments, cc, bcc fields](#send-a-message-with-attachments-cc-bcc-fields)
+ - [Retrieving messages](#retrieving-messages)
+ - [Marking messages](#marking-messages)
+ - [Changing message labels](#changing-message-labels)
+ - [Downloading attachments](#downloading-attachments)
+ - [Retrieving messages with queries](#retrieving-messages-advanced-with-queries)
+ - [Retrieving messages with more advanced queries](#retrieving-messages-more-advanced-with-more-queries)
+- [Feedback](#feedback)
+## Getting Started
+The only setup required is to download an OAuth 2.0 Client ID file from Google
+that will authorize your application.
+This can be done at: https://console.developers.google.com/apis/credentials.
+For those who haven't created a credential for Google's API, after clicking the
+link above (and logging in to the appropriate account),
+1. Select/create the project that this authentication is for (if creating a new
+project make sure to configure the OAuth consent screen; you only need to set
+an Application name)
+2. Click on the "Dashboard" tab, then "Enable APIs and Services". Search for
+Gmail and enable.
+3. Click on the Credentials tab, then "Create Credentials" > "OAuth client ID".
+4. Select what kind of application this is for, and give it a memorable name.
+Fill out all necessary information for the credential (e.g., if choosing
+"Web Application" make sure to add an Authorized Redirect URI. See
+https://developers.google.com/identity/protocols/oauth2 for more infomation).
+5. Back on the credentials screen, click the download icon next to the
+credential you just created to download it as a JSON object.
+6. Save this file as "client_secret.json" and place it in the root directory of
+your application. (The `Gmail` class takes in an argument for the name of this
+file if you choose to name it otherwise.)
+The first time you create a new instance of the `Gmail` class, a browser window
+will open, and you'll be asked to give permissions to the application. This
+will save an access token in a file named "gmail-token.json", and only needs to
+occur once.
+You are now good to go!
+Note about authentication method: I have opted not to use a username-password
+authentication (through imap/smtp), since using Google's authorization is both
+significantly safer and avoids clashing with Google's many security measures.
+## Installation
+Install using `pip` (Python3).
+```bash
+pip3 install simplegmail
+```
+## Usage
+### Send a simple message:
+```python
+from simplegmail import Gmail
+gmail = Gmail() # will open a browser window to ask you to log in and authenticate
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+### Send a message with attachments, cc, bcc fields:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+params = {
+ "to": "you@youremail.com",
+ "sender": "me@myemail.com",
+ "cc": ["bob@bobsemail.com"],
+ "bcc": ["marie@gossip.com", "hidden@whereami.com"],
+ "subject": "My first email",
+ "msg_html": "<h1>Woah, my first email!</h1><br />This is an HTML email.",
+ "msg_plain": "Hi\nThis is a plain text email.",
+ "attachments": ["path/to/something/cool.pdf", "path/to/image.jpg", "path/to/script.py"],
+ "signature": True # use my account signature
+}
+message = gmail.send_message(**params) # equivalent to send_message(to="you@youremail.com", sender=...)
+```
+It couldn't be easier!
+### Retrieving messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Unread messages in your inbox
+messages = gmail.get_unread_inbox()
+# Starred messages
+messages = gmail.get_starred_messages()
+# ...and many more easy to use functions can be found in gmail.py!
+# Print them out!
+for message in messages:
+ print("To: " + message.recipient)
+ print("From: " + message.sender)
+ print("Subject: " + message.subject)
+ print("Date: " + message.date)
+ print("Preview: " + message.snippet)
+ print("Message Body: " + message.plain) # or message.html
+```
+### Marking messages:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message_to_read = messages[0]
+message_to_read.mark_as_read()
+# Oops, I want to mark as unread now
+message_to_read.mark_as_unread()
+message_to_star = messages[1]
+message_to_star.star()
+message_to_trash = messages[2]
+message_to_trash.trash()
+# ...and many more functions can be found in message.py!
+```
+### Changing message labels:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+# Get the label objects for your account. Each label has a specific ID that
+# you need, not just the name!
+labels = gmail.list_labels()
+# To find a label by the name that you know (just an example):
+finance_label = list(filter(lambda x: x.name == 'Finance', labels))[0]
+messages = gmail.get_unread_inbox()
+# We can add/remove a label
+message = messages[0]
+message.add_label(finance_label)
+# We can "move" a message from one label to another
+message.modify_labels(to_add=labels[10], to_remove=finance_label)
+# ...check out the code in message.py for more!
+```
+### Downloading attachments:
+```python
+from simplegmail import Gmail
+gmail = Gmail()
+messages = gmail.get_unread_inbox()
+message = messages[0]
+if message.attachments:
+ for attm in message.attachments:
+ print('File: ' + attm.filename)
+ attm.save() # downloads and saves each attachment under it's stored
+ # filename. You can download without saving with `attm.download()`
+```
+### Retrieving messages (advanced, with queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# Unread messages in inbox with label "Work"
+labels = gmail.list_labels()
+work_label = list(filter(lambda x: x.name == 'Work', labels))[0]
+messages = gmail.get_unread_inbox(labels=[work_label])
+# For even more control use queries:
+# Messages that are: newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+query_params = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Work"], ["Homework", "CS"]]
+}
+messages = gmail.get_messages(query=construct_query(query_params))
+# We could have also accomplished this with
+# messages = gmail.get_unread_messages(query=construct_query(newer_than=(2, "day"), labels=[["Work"], ["Homework", "CS"]]))
+# There are many, many different ways of achieving the same result with search.
+```
+### Retrieving messages (more advanced, with more queries!):
+```python
+from simplegmail import Gmail
+from simplegmail.query import construct_query
+gmail = Gmail()
+# For even more control use queries:
+# Messages that are either:
+# newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
+# or
+# newer than 1 month old, unread, labeled "Top Secret", but not starred.
+labels = gmail.list_labels()
+# Construct our two queries separately
+query_params_1 = {
+ "newer_than": (2, "day"),
+ "unread": True,
+ "labels":[["Finance"], ["Homework", "CS"]]
+}
+query_params_2 = {
+ "newer_than": (1, "month"),
+ "unread": True,
+ "labels": ["Top Secret"],
+ "exclude_starred": True
+}
+# construct_query() will create both query strings and "or" them together.
+messages = gmail.get_messages(query=construct_query(query_params_1, query_params_2))
+```
+For more on what you can do with queries, read the docstring for `construct_query()` in `query.py`.
+## Feedback
+If there is functionality you'd like to see added, or any bugs in this project,
+please let me know by posting an issue or submitting a pull request!
+
+%prep
+%autosetup -n simplegmail-4.1.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-simplegmail -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 17 2023 Python_Bot <Python_Bot@openeuler.org> - 4.1.1-1
+- Package Spec generated