Всем привет!. В этом посте я хочу поделиться с вами небольшим руководством, который покажет вам, как отправлять электронные письма с помощью 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”