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

Отправка электронной почты в Python с помощью модуля SMTPLIB

Мы можем отправить электронную почту в программе Python, используя модуль SMTPLIB. Модуль Python SMTPLIB определяет объект сеанса клиента SMTP для отправки электронной почты из Python Program.

Автор оригинала: Pankaj Kumar.

Модуль Python SMTPLIB может использоваться для отправки электронных пибочек в программе Python. Это очень распространенное требование в программных приложениях и SMTPLIB предоставляет клиенту протокола SMTP для отправки электронных писем.

1. Отправка электронной почты в Python

Давайте разработаем программу для отправки электронной почты в Python.

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

Это звучит лучше, чем просто простая задача отправки электронной почты на статические электронные письма. Давайте начнем.

1.1) Определение файлов, содержащих электронные письма

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

contribute contribute@example.com
shubham shubham@example.com

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

Мы назовем вышеуказанный файл как Contacts.txt Отказ

1.2) Определение шаблона

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

Давайте посмотрим на шаблон, который мы собираемся использовать для программы:

Dear ${USER_NAME}, 
This is an email which is sent using Python. Isn't that great?!

Have a great day ahead! 
Cheers

Обратите внимание на строку шаблона $ {User_name} Отказ Эта строка будет заменена на имя, которое содержится в текстовом файле, который мы в последний раз создам.

Мы назовем вышеуказанный файл как message.txt Отказ

1.3) Пашина электронных писем из файла

Мы можем анализировать текстовый файл, открыв его в R Режим, а затем итерация через каждую строку файла:

def get_users(file_name):
    names = []
    emails = []
    with open(file_name, mode='r', encoding='utf-8') as user_file:
        for user_info in user_file:
            names.append(user_info.split()[0])
            emails.append(user_infouser.split()[1])
    return names, emails

С этой функцией Python мы возвращаем два списка имена , Письма который содержит имена и электронные письма пользователя из файла, который мы передаем к нему. Они будут использоваться в корпусе сообщения шаблона электронной почты.

1.4) Получение объекта шаблона

Пришло время мы получаем объект шаблона, в котором мы используем файл шаблона, который мы создали, открыв его в R Режим и анализ это:

def parse_template(file_name):
    with open(file_name, 'r', encoding='utf-8') as msg_template:
        msg_template_content = msg_template.read()
    return Template(msg_template_content)

С этой функцией мы получаем объект шаблона, который содержит содержимое файла, которое мы указали с именем файла.

2. Как отправлять электронные письма?

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

  • Установка SMTP-соединения и учетные данные для входа в систему
  • MimemultiPART объект сообщения необходимо построить с соответствующими заголовками для От , К и Тема поля.
  • Подготовьте и добавлять кузов сообщений
  • Отправка сообщения с помощью объекта SMTP

Давайте выполним каждый из этих шагов здесь.

3. Определение деталей подключения

Чтобы определить данные подключения SMTP-сервера, мы сделаем функцию Main (), в которой мы определяем наш хост, давайте посмотрим на фрагмент кода:

def main():
    names, emails = get_users('contacts.txt') # read user details
    message_template = parse_template('message.txt')

    # set up the SMTP server
    smtp_server = smtplib.SMTP(host='host_address_here', port=port_here)
    smtp_server.starttls()
    smtp_server.login(FROM_EMAIL, MY_PASSWORD)

В диапазоне выше главной () мы впервые получили имена пользователей и электронные письма, за которыми следуют, которые мы построили объект SMTP-сервера. хозяин и порт Зависит от поставщика услуг, который вы используете для отправки электронных писем. Например, в случае Gmail у нас будет:

smtp_server = smtplib.SMTP(host='smtp.gmail.com', port=25)

Теперь мы наконец готовы отправить электронное письмо.

4. Отправка электронного письма из Python Program

Вот образец программы:

# Get each user detail and send the email:
for name, email in zip(names, emails):
    multipart_msg = MIMEMultipart()       # create a message

    # substitute user name with template String
    message = message_template.substitute(USER_NAME=name.title())

    # message parameter definition
    multipart_msg['From']=FROM_EMAIL
    multipart_msg['To']=email
    multipart_msg['Subject']="JournalDev Subject"
        
    # add in the message body
    multipart_msg.attach(MIMEText(message, 'plain'))
    
    # send the message via the server
    smtp_server.send_message(multipart_msg)
    del multipart_msg
    
# Terminate the SMTP session and close the connection
smtp_server.quit()
    
if __name__ == '__main__':
    main()

Теперь мы можем увидеть электронное письмо, прибывающее по адресам, которые мы определили в файле. Чтобы закрыть, давайте посмотрим на полный код, который мы использовали для отправки электронных писем:

import smtplib

from string import Template

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

FROM_EMAIL = 'email'
MY_PASSWORD = 'mypassword'

def get_users(file_name):
    names = []
    emails = []
    with open(file_name, mode='r', encoding='utf-8') as user_file:
        for user_info in user_file:
            names.append(user_info.split()[0])
            emails.append(user_info.split()[1])
    return names, emails

def parse_template(file_name):
    with open(file_name, 'r', encoding='utf-8') as msg_template:
        msg_template_content = msg_template.read()
    return Template(msg_template_content)

def main():
    names, emails = get_users('contacts.txt') # read user details
    message_template = parse_template('message.txt')

    # set up the SMTP server
    smtp_server = smtplib.SMTP(host='host-here', port=port-here)
    smtp_server.starttls()
    smtp_server.login(FROM_EMAIL, MY_PASSWORD)

    # Get each user detail and send the email:
    for name, email in zip(names, emails):
        multipart_msg = MIMEMultipart()       # create a message

        # add in the actual person name to the message template
        message = message_template.substitute(USER_NAME=name.title())

        # Prints out the message body for our sake
        print(message)

        # setup the parameters of the message
        multipart_msg['From']=FROM_EMAIL
        multipart_msg['To']=email
        multipart_msg['Subject']="JournalDev Subject"
        
        # add in the message body
        multipart_msg.attach(MIMEText(message, 'plain'))
        
        # send the message via the server set up earlier.
        smtp_server.send_message(multipart_msg)
        del multipart_msg
        
    # Terminate the SMTP session and close the connection
    smtp_server.quit()
    
if __name__ == '__main__':
    main()

Обратите внимание, что вам придется заменить свойство хоста и портов для использования поставщика электронной почты. Для Gmail я использовал эти свойства:

smtp_server = smtplib.SMTP(host='smtp.gmail.com', port=587)

Когда мы запускаем этот скрипт, мы просто распечатаем текст, который мы отправляем:

Питон отправляет электронные письма

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

Ошибка безопасности Gmail

Просто следуйте инструкциям, указанным в электронном письме и снова запустите скрипт, и вы увидите, что электронное письмо прибыло в поле «Электронная почта», который вы настроили в файле контактов, как:

Письмо, полученное от сценария Python

Ссылка: Python Smtplib Официальные документы