То, что вы можете использовать, - это сообщение MIMEMultipart в качестве объекта, а затем отправить этот объект в качестве электронной почты.
Для этого вам нужно будет импортировать следующее:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
Далее вам необходимо определить учетные данные, которые будут использоваться вашим сценарием для доступа к электронной почте отправителя. Обратите внимание, что вы не должны жестко кодировать свой пароль в скрипте, в целях безопасности вы должны хранить его в переменной среды, но для демонстрации я жестко закодировал учетные данные.
me = 'YourEmail@mail.com'
my_pass = '*******'
Теперь вы ' Вы готовы открыть файл .txt, содержащий получателей.
emails_file = open('email_addr.txt', 'r')
email_addr = emails_file.read()
Убедитесь, что электронные письма хранятся в следующем формате:
first@mail.com,second@mail.com,third@mail.com...
Вы можете хранить их в другом формате в вашем файле .txt, но вышеизложенное - это то, что собирается принять наше сообщение MIMEMultipart, поэтому просто убедитесь, что это тот формат, который вы переходите к нему.
Как только вы определите свои учетные данные для входа и загрузите получателей из вашего .txt файла, вы можете определить функцию для отправки электронных писем. Мы импортировали MIMEMultipart, и теперь пришло время его использовать.
def sendMail():
msg = MIMEMultipart()
msg['Subject'] = 'Hello, this is my test subject!'
msg['From'] = me
msg['To'] = email_addr
msg становится объектом MIMEMultipart и будет хранить информацию для вашего субъекта, от кого получено электронное письмо и кому оно предназначено. Как только это будет определено, вы можете прикрепить тело вашего письма из .txt файла.
message_file = open('my_message.txt', 'r')
the_message = MIMEText(message_file.read())
msg.attach(the_message)
Следующий фрагмент кода будет использовать «ehlo» для идентификации себя на сервере ESMTP, а затем будет использовать «starttls» для установки SMTP-соединения в TLS (Transport Layer Security) mode.
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
Последний фрагмент кода позволяет сценарию «войти» в сообщение электронной почты отправителя с использованием ранее определенных учетных данных и затем отправить сообщение.
s.login(me, my_pass)
s.send_message(msg, None, None)
s.quit()
emails_file.close()
Осталось только вызвать функцию
sendMail()
Обратите внимание:
s.send_message (msg, None, None)
Обычно имеет формат (msg, from_addr, to_addr), но это работает странным образом: msg ['To'] принимает строку в качестве параметра, а s.send_message принимает список ( если я не ошибаюсь). В документации говорится, что
Если from_addr равен None или to_addrs равен None, send_message заполняет эти аргументы адресами, извлеченными из заголовков msg, как указано в RF C 5322
Поэтому я решил установить для from_addr и to_addr значение None, чтобы я мог просто передать строку с несколькими адресами в части кода msg [To].
Вот окончательный код:
#--- Simple mail transfer protocol library ---#
import smtplib
from email.mime.multipart import MIMEMultipart # Message as a multipart
from email.mime.text import MIMEText # Used to attach text
#--- Login info:
# For security purposes store this info in environment variables
# For the purpose of demonstration I hardcoded it here ---#
me = 'YourEmail@mail.com'
my_pass = '*******' # Your password
#--- Open your email addresses from a .txt file
# The format for addresses should be as follows:
# first@email.com,second@email.com,third@email.com... ---#
emails_file = open('email_addr.txt', 'r')
email_addr = emails_file.read()
#--- Define a function to send your mail:
def sendMail():
# Create a MIMEMultipart object
msg = MIMEMultipart()
msg['Subject'] = 'Hello, this is my test subject!'
msg['From'] = me
msg['To'] = email_addr
# Attach message from a txt file
message_file = open('my_message.txt', 'r')
the_message = MIMEText(message_file.read())
msg.attach(the_message)
# Using GMAIL SMTP in my case ---#
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
# Login
s.login(me, my_pass)
# Send the message
s.send_message(msg, None, None)
s.quit()
emails_file.close()
sendMail()
# Call your function ---#