Рубрики
Без рубрики

Отправить электронные письма с Python и Gmail

Всем привет!. В этом посте я хочу поделиться с вами небольшим руководством, который покажет вам, как отправить им … Теги с Python, учебником, SMTP.

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