Всем привет!. В этом посте я хочу поделиться с вами небольшим руководством, который покажет вам, как отправлять электронные письма с помощью Python и Gmail.
Требования
- Python (Я использую Python 3.8.2)
- Пип (я использую PIP 20.1.1)
Проект настройки
Чтобы создать наш проект, мы собираемся использовать Виртуальский , чтобы создать изолированную среду Python для этого проекта. Тем не менее, вы также можете использовать Пьенв или Венв Отказ
Итак, сначала мы должны установить венчание .
pip3 install virtualenv
Теперь мы должны создать папку Project и настроить VirtualenV.
# Creating a project folder mkdir emails-example cd emails-example # Creating the virtual environment virtualenv env # Activate the virtual environment source env/bin/activate # Create our main file touch main.py
ПРИМЕЧАНИЕ: Чтобы выйти из окружающей среды, вы просто должны написать Деактивировать Отказ
Настройка Доценв
Перед началом записи кода нам нужно установить пакет Python-Dotenv , управлять переменными среды, где мы поставьте наши учетные данные Gmail. Мы будем использовать .env.env. Файлы для легко настроить проект и чтобы избежать обмена конфиденциальной информации в нашем коде.
pip install -U python-dotenv
Хорошо, теперь мы должны проверить, если мы сможем использовать пакет. Создайте файл под названием .env.env. .
touch .env
Создайте тестовую переменную в нашем .env файл.
TEST="my test variable"
Импортировать Доценв Пакет и загрузите переменные.
# main.py
# Import section ....
import os
from dotenv import load_dotenv
# Loading ENV variables
load_dotenv()
# Obtain our TEST variable
print(os.getenv('TEST'))
Запустите скрипт.
python main.py # my test variable
Настройте свою учетную запись Gmail
Чтобы использовать Gmail SMTP, нам нужно разрешить внешние приложения в нашей учетной записи Gmail. Итак, мы должны пойти на нашу учетную запись.
Нажмите на Безопасность вариант.
Прокрутите вниз, пока не увидите Менее безопасный доступ приложения Раздел и нажмите Включите доступ Отказ
Нажмите кнопку «Переключить», чтобы включить конфигурацию.
Отправить основные электронные письма
Теперь, когда мы настроили нашу учетную запись Gmail, мы можем начать запись кода. Во-первых, мы должны импортировать Python smtplib Клиент, который поможет нам отправить наши электронные письма.
# main.py # Import section .... from smtplib import SMTP, SMTPException # Import SMTP module # ....
Мы создадим некоторые переменные среды, которые нам нужно настроить наш SMTP-клиент.
# .env SENDER="YOUR GMAIL EMAIL" PASSWORD="YOUR GMAIL PASSWORD" RECEIVERS="A LIST OF EMAILS TO SEND THE MESSAGE, SEPARATED USING ','" HOST="smtp.gmail.com" PORT="587"
Теперь мы можем установить некоторые константы, используя переменные среды, определенные ранее.
# main.py
# Constants section ....
# GMAIL account sender
SENDER = os.getenv('SENDER')
PASSWORD = os.getenv('PASSWORD')
# Accounts receivers
RECEIVERS = os.getenv('RECEIVERS').split(',')
# SMTP server options
HOST = os.getenv('HOST')
PORT = os.getenv('PORT')
# ....
# SMTP object
SMTP_OBJECT = SMTP(host=HOST, port=PORT)
Хорошо, мы создадим базовую функцию для повторного использования в других функциях и избежать дублирования кода.
# main.py
# Methods section ....
# Base function
def send_email(message=""):
"""
Send an email using the credentials defined before
Parameters
----------
message : str
content to send in the message
"""
try:
SMTP_OBJECT.ehlo()
SMTP_OBJECT.starttls()
SMTP_OBJECT.login(SENDER, PASSWORD)
SMTP_OBJECT.sendmail(SENDER, RECEIVERS, message)
SMTP_OBJECT.quit()
print("Successfully sent email")
except SMTPException:
print ("Error: unable to send email")
- ЭЛО () Откройте передачу, используя команду
Эхозвох. Обычно этот метод называется автоматически при использовании функции SendMail (). Мы также можем использовать функцию EHLO_OR_HELO_IF_NEEDED () Для этого. - starttls () Использует протокол TLS в соединении.
- Войти () Войдите в SMTP-сервер.
- sendmail () Отправляет нашу электронную почту.
- Quit () Завершить сеанс и закройте соединение.
Как только у нас будет базовая функция, мы можем создать наши basic_mail функция.
# main.py
# Methods section ....
def basic_email(message = ""):
"""
Basic email with plain text message
"""
send_email(message)
Наше Главная Функция будет следующим.
# main.py
# Import section ....
import sys
# Main section ...
if __name__ == "__main__":
# Message to send
message = """
this message is sent from python for testing purposes
"""
if len(sys.argv)> 1 :
if sys.argv[1] == '--help':
print('Info: ')
print('--help List the options to send an email')
print('--basic Sends a plain text email')
print('--txt Send an email from a text file content')
print('--attach Send an email with an attachment')
elif sys.argv[1] == '--basic':
print("Sending a plain text email")
basic_email(message)
else:
print("Please give the type of message to send.")
print("For help execute `python main.py --help`")
Мы можем проверить нашу функцию, выполнив следующую команду в нашем терминале.
python main.py --basic # Sending a plain text email # Successfully sent email
Отправить письмо из файла TXT
Здесь мы отправим сообщение из .txt файл. Во-первых, мы должны импортировать некоторые полезные функции.
# main.py # Import section .... from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase import email.encoders
- MimeBase Это базовый класс для всех подклассов, специфичных MIME.
- MimemultiPart Отправлять сообщения, разделенные на несколько сообщений. Обычно используется для вложений.
- Mimetext Работать с простой текстовыми файлами.
Теперь мы можем создать нашу функцию для отправки электронных писем, прикрепляющих текстовый файл.
# main.py
# Methods section ....
def send_from_txt():
"""
Send an email reading the content message from a txt file
"""
message = MIMEMultipart('alternative')
message['Subject'] = 'TXT file content'
message['From'] = SENDER
body = "Email message body"
content = MIMEText(body, 'plain')
message.attach(content)
# process text file
file_open = open('text.txt', 'rb')
file_content = MIMEText(_text=file_open.read(), _charset='utf-8')
file_open.close()
message.attach(file_content)
# Send email
send_email(message.as_string())
Добавьте опцию к нашей главной функции.
# main.py
# Main section ...
if __name__ == "__main__":
# ....
if len(sys.argv)> 1 :
# if ....
elif sys.argv[1] == '--txt':
print("Sending an email from a text file content")
send_from_txt()
else:
# ....
Создать .txt Файл с сообщением.
# Creating file touch text.txt # Edit the file nano text.txt # Put the following message Message from a TXT file
Мы можем проверить нашу функцию, выполнив следующую команду в нашем терминале.
python main.py --txt # Sending an email from a text file content # Successfully sent email
Прикрепление файлов
Наконец, мы отправим электронное письмо с приложением PDF.
# main.py
# Methods section ....
def send_attachment():
"""
Send an email with an attachment
"""
message = MIMEMultipart('alternative')
message['Subject'] = 'Attachment'
message['From'] = SENDER
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(open('file.pdf', 'rb').read())
attachment.add_header('Content-Disposition', 'attachment; filename="file.pdf"')
email.encoders.encode_base64(attachment)
message.attach(attachment)
# Send email
send_email(message.as_string())
Добавьте опцию к нашей главной функции.
# main.py
# Main section ...
if __name__ == "__main__":
# ....
if len(sys.argv)> 1 :
# if ....
elif sys.argv[1] == '--attach':
print("Sending an email with an attachment")
send_attachment()
else:
# ....
Мы можем проверить нашу функцию, выполнив следующую команду в нашем терминале.
python main.py --attach # Sending an email with an attachment # Successfully sent email
ПРИМЕЧАНИЕ: Чтобы проверить этот метод, мы должны поставить в нашу папку проекта файл под названием file.pdf Отказ
Окончательные слова
Спасибо за чтение этого поста и не забудьте выключить Менее безопасный доступ приложения конфигурация.
Вы можете найти код этого руководства здесь Отказ
Оригинал: “https://dev.to/brayvasq/send-emails-with-python-and-gmail-pn1”