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

Как отправить красивые электронные письма с вложениями (да, тоже CAT PICS), используя только Python

Оригинальный пост: https: ///letslearnabout.net/tutorial/how-to-send-beautiful-eamails-with-atathments-usin … Tagged с Python, учебником, обучением.

Оригинальный пост: https://letsletlenabout.net/tutorial/how-to-send-beautiful-eamails-with-atathments-using-only-python/

Знаете ли вы, что вы можете отправить электронные письма с помощью Python? Не только то, что вы можете отправлять файлы!

И вместо того, чтобы использовать черно-текстово-бело-фон простой текст, которые большинство людей используют, вы можете отправлять свои электронные письма в качестве файлов HTML, чтобы добавить вкусы на ваши электронные письма, как этот:

Всего за несколько минут вы узнаете, как создать SMTP-сервер для отправки электронной почты с помощью Python в список клиентов, студентов, друзей …

В этом видео вы узнаете, как:

  • Отправить одно письмо одному человеку
  • Добавить информацию, такую как ваше имя, имя приемника или предмет, чтобы сделать его более человеческим
  • Отправить одно письмо нескольким людям
  • Сделайте красивое письмо с помощью HTML
  • Прикрепите файлы к электронным письмам, которые мы отправили

Создавая все

Мы собираемся отправлять электронные письма с использованием учетной записи Gmail. До чего-либо создайте учетную запись Gmail (или использовать свой собственный) и включите «менее безопасный доступ приложения» в своей учетной записи. Вы можете сделать это здесь: https://myaccount.google.com/u/0/security?hl=en&pli=1.

После этого вы установлены! Создайте среду с Python (я использую Pipenv, так _Pipenv Shell) _ И вы готовы пойти!

Просто, один на один отправитель электронной почты

Давайте начнем с создания простого сценария, который отправляет одно текстовое электронное письмо другим людям из вашей учетной записи (Я использую Pipenv, поэтому я создаю один с Pipenv _ Shell_):

Создайте файл Python, например email_server.py , и писать:

import smtplib, ssl


# User configuration
sender_email = YOUR_EMAIL
receiver_email = RECEIVER_EMAIL
password = input('Please, type your password:n')

# Email text
email_body = '''
    This is a test email sent by Python. Isn't that cool?
'''

SMTP Это модуль Python, который мы будем использовать для создания объекта сеанса сеанса сеанса SMTP (простой передачи почты), который отправит любое письмо, которое мы хотим. SSL Модуль обеспечивает доступ к TLS (безопасность транспортного уровня), чтобы помочь нам сделать его более безопасным.

Затем мы добавим некоторые переменные, такие как адрес отправителя и приемника, запрос пользователю ввести пароль электронной почты и тело на электронную почту. Замените значения в верхнем регистре с вашим. Для целей тестирования я использую то же письмо.

После нашей конфигурации давайте напишем функцию, которая отправит электронные письма:

print("Sending the email...")
try:
        # Creating a SMTP session | use 587 with TLS, 465 SSL and 25
        server = smtplib.SMTP('smtp.gmail.com', 587)
        # Encrypts the email
        context = ssl.create_default_context()
        server.starttls(context=context)
        # We log in into our Google account
        server.login(sender_email, password)
        # Sending email from sender, to receiver with the email body
        server.sendmail(sender_email, receiver_email, email_body)
        print('Email sent!')
except Exception as e:
        print(f'Oh no! Something bad happened!n {e}')
finally:
        print('Closing the server...')
        server.quit()

Эта функция будет:

  • Создайте SMTPLIB. Экземпляр SMTP. Мы используем Gmail, поэтому мы отправляем его, используя хост smtp.gmail.com и порт 587 Отказ Вы можете использовать другие поставщики (например, Hotmail), используя их хост и порт.
  • Зашифруйте электронное письмо с помощью метода _starttl_s.
  • Войдите в свою учетную запись электронной почты Google
  • Отправьте электронное письмо с помощью электронной почты отправителя к электронной почте приемника, а сообщение просто простой текст.
  • Используйте попытку, за исключением всех ошибок и _Finally_Close SMTP экземпляр.

Запустите код сейчас, и вы получите ваш адрес электронной почты!

Но мы здесь не здесь, чтобы отправить просто письмо. Мы можем сделать это сами!

Давайте отправимся сейчас несколько электронных писем в список.

Отправка электронных писем в список людей

Чтобы отправить несколько электронных писем, нам нужно только выполнить несколько твиков здесь и там. Давайте также сделаем наши электронные письма более личными добавлением объекта по электронной почте и информацию о отправителе:

Во-первых, давайте напишем больше человеческих электронных писем:

import smtplib, ssl
from email.mime.text import MIMEText # New line
from email.utils import formataddr  # New line


# User configuration
sender_email = YOUR_EMAIL
sender_name = YOUR NAME  # New line
password = input('Please, type your password:n')    

receiver_email = RECEIVER_EMAIL
receiver_name = RECEIVER_NAME  # New line

Добавьте строки с комментарием «# Новая строка». Мы импортируем Mimetext (многоцелевые расширения интернет-почты), чтобы настроить наши электронные письма и метод _Formataddr_helper.

После первого принтера, но перед попробуйте Добавьте эту конфигурацию:

# Configurating user's info
msg = MIMEText(email_body, 'plain')
msg['To'] = formataddr((receiver_name, receiver_email))
msg['From'] = formataddr((sender_name, sender_email))
msg['Subject'] = 'Hello, my friend ' + receiver_name

Теперь мы создаем экземпляр Mimetext с Email_body как простой текст, мы устанавливаем наши «на» текст на имя приемника и электронной почты, «из» текста на наше имя и электронную почту, а также тему «Привет, имя моего друга».

Наконец, измените Sender.sendmail Метод:

server.sendmail(sender_email, receiver_email, msg.as_string())

Отправьте письмо еще раз:

Ницца, сейчас меньше Spammy Vibes Отказ Давайте отправим это на 100% нормальный, не поддельный, электронная почта в список людей:

# receiver_email = RECEIVER_EMAIL
# receiver_name = RECEIVER_NAME

receiver_emails = [RECEIVER_EMAIL_1, RECEIVER_EMAIL_2, RECEIVER_EMAIL_3]
receiver_names = [RECEIVER_NAME_1, RECEIVER_NAME_2, RECEIVER_NAME_3]

Поскольку мы собираемся повторять ресиверные электронные письма и имена, предшествуйте коду Below _receiver_Names _Variable с этим для цикла и вкладки кода, чтобы оно принадлежно к цикле:

for receiver_email, receiver_name in zip(receiver_emails, receiver_names):
    print("Sending the email...")
    # Configurating user's info
    msg = MIMEText(email_body, 'plain')
    ...

Это должен быть вашим кодом прямо сейчас:

import smtplib
import ssl
from email.mime.text import MIMEText  # New line
from email.utils import formataddr  # New line

# User configuration
sender_email = YOUR_EMAIL
sender_name = YOUR NAME
password = input('Please, type your password:n')

receiver_emails = [RECEIVER_EMAIL_1, RECEIVER_EMAIL_2, RECEIVER_EMAIL_3]
receiver_names = [RECEIVER_NAME_1, RECEIVER_NAME_2, RECEIVER_NAME_3]

# Email text
email_body = '''
    This is a test email sent by Python. Isn't that cool?
'''

for receiver_email, receiver_name in zip(receiver_emails, receiver_names):
    print("Sending the email...")
    # Configurating user's info
    msg = MIMEText(email_body, 'plain')
    msg['To'] = formataddr((receiver_name, receiver_email))
    msg['From'] = formataddr((sender_name, sender_email))
    msg['Subject'] = 'Hello, my friend ' + receiver_name
    try:
        # Creating a SMTP session | use 587 with TLS, 465 SSL and 25
        server = smtplib.SMTP('smtp.gmail.com', 587)
        # Encrypts the email
        context = ssl.create_default_context()
        server.starttls(context=context)
        # We log in into our Google account
        server.login(sender_email, password)
        # Sending email from sender, to receiver with the email body
        server.sendmail(sender_email, receiver_email, msg.as_string())
        print('Email sent!')
    except Exception as e:
        print(f'Oh no! Something bad happened!n {e}')
    finally:
        print('Closing the server...')
        server.quit()

Запустите код, и ваш адрес электронной почты будет отправлен на 3 разных адреса электронной почты!

Здесь мы отправляем электронное письмо на 3 разных человека, но вы можете отправить его на сотни ваших учеников, подписчиков, читателей блога и т. Д.! И…

… они получат уродливую электронную почту.

Я обещал вам отправлять красивые электронные письма с Python, который может привлечь людей к тому, что вы хотите. Итак, начнем!

Отправка красивых писем с HTML

Это довольно просто. Теперь мы отправляем строку как _email_body, _right?

Вместо этого мы собираемся отправить строку, содержащую HTML-код.

Во-первых, давайте создадим наш файл HTML. Используйте редактор кода, такого как VS-код или атом, или создайте его с помощью онлайн-редактора, такого как.

Сохраните его в HTML-файл (мой это Email.html ).

Теперь поместите Email_body с этим:

# Email body
email_html = open('email.html')
email_body = email_html.read()

Замените старую строку новым:

# msg = MIMEText(email_body, 'plain') # Old line
msg = MIMEText(email_body, 'html') # New line

Запустите код, и это результат:

Довольно круто, верно?

Но Что, если мы хотим отправлять также счета-фактуры, PDFS, файлы Excel, видео или некоторые другие файлы?

Добавить файлы на ваши электронные письма – Обязательный пример CAT.GIF

Чтобы добавить файлы, вместо отправки одного объекта HTML, мы собираемся отправить несколько частей. Один из них является HTML, другой GIF. Чтобы сделать это, добавьте это:

import smtplib, ssl
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart # New line
from email.mime.base import MIMEBase # New line
from email import encoders # New line

....
# Email body
email_html = open('email.html')
email_body = email_html.read()

filename = 'cat.gif' # New line

Не забудьте добавить файл под названием «CAT.GIF» в папку или заменить его одним из ваших собственных.

Замените (email_body, ‘html’) _creation с этим:

    msg = MIMEMultipart()
    msg['To'] = formataddr((receiver_name, receiver_email))
    msg['From'] = formataddr((sender_name, sender_email))
    msg['Subject'] = 'Hello, my friend ' + receiver_name

   msg.attach(MIMEText(email_body, 'html'))

Это создаст первую часть тела, тот, с помощью HTML, теперь давайте добавим вложение:

try:
            # Open PDF file in binary mode
            with open(filename, "rb") as attachment:
                            part = MIMEBase("application", "octet-stream")
                            part.set_payload(attachment.read())

            # Encode file in ASCII characters to send by email
            encoders.encode_base64(part)

            # Add header as key/value pair to attachment part
            part.add_header(
                    "Content-Disposition",
                    f"attachment; filename= {filename}",
            )

            msg.attach(part)
        except Exception as e:
                print(f'Oh no! We didn't found the attachment!n{e}')

Это будет:

  • Загрузите файл прикреплен
  • Кодировать его
  • Добавьте его на заголовок как вложение
  • Добавьте часть к MimemuMultiPART
  • Бросить и ошибка, если файл не найден.

Проверьте свой код с моим:

import smtplib
import ssl
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart  # New line
from email.mime.base import MIMEBase  # New line
from email import encoders  # New line

# User configuration
sender_email = YOUR_EMAIL
sender_name = YOUR_NAME
password = input('Please, type your password:n')

receiver_emails = [RECEIVER_EMAIL_1, RECEIVER_EMAIL_2, RECEIVER_EMAIL_3]
receiver_names = [RECEIVER_NAME_1, RECEIVER_NAME_2, RECEIVER_NAME_3]

# Email body
email_html = open('email.html')
email_body = email_html.read()

filename = 'cat.gif'

for receiver_email, receiver_name in zip(receiver_emails, receiver_names):
        print("Sending the email...")
        # Configurating user's info
        msg = MIMEMultipart()
        msg['To'] = formataddr((receiver_name, receiver_email))
        msg['From'] = formataddr((sender_name, sender_email))
        msg['Subject'] = 'Hello, my friend ' + receiver_name

        msg.attach(MIMEText(email_body, 'html'))

        try:
            # Open PDF file in binary mode
            with open(filename, "rb") as attachment:
                            part = MIMEBase("application", "octet-stream")
                            part.set_payload(attachment.read())

            # Encode file in ASCII characters to send by email
            encoders.encode_base64(part)

            # Add header as key/value pair to attachment part
            part.add_header(
                    "Content-Disposition",
                    f"attachment; filename= {filename}",
            )

            msg.attach(part)
        except Exception as e:
                print(f'Oh no! We didn't found the attachment!n{e}')
                break

        try:
                # Creating a SMTP session | use 587 with TLS, 465 SSL and 25
                server = smtplib.SMTP('smtp.gmail.com', 587)
                # Encrypts the email
                context = ssl.create_default_context()
                server.starttls(context=context)
                # We log in into our Google account
                server.login(sender_email, password)
                # Sending email from sender, to receiver with the email body
                server.sendmail(sender_email, receiver_email, msg.as_string())
                print('Email sent!')
        except Exception as e:
                print(f'Oh no! Something bad happened!n{e}')
                break
        finally:
                print('Closing the server...')
                server.quit()

Запустите код … И теперь вложение в электронном письме!

Вывод

Написать код, который позволяет отправить электронное письмо в свой список электронных напитков, с файлами вложения и более привлекательным, чем скучная формула черного текстового фона, легко.

Хотя это один файловый скрипт, вы можете легко включить его в фактическую структуру Python (Flask, Django ….) Веб-приложение, другая программа, которую вы на самом деле используете или улучшаете текущий, чтобы выполнить дополнительные функции.

Создание и отправка электронных писем никогда не было так легко с Python!

Мои учебные видеоролики YouTube

Окончательный код на GitHub

Добраться до меня в Twitter

Читать далее Учебники

Оригинал: “https://dev.to/davidmm1707/how-to-send-beautiful-emails-with-attachments-yes-cat-pics-too-using-only-python-4l9e”