Python smtpib - отправка электронной почты нескольким получателям - PullRequest
0 голосов
/ 03 мая 2020

Я хочу отправить электронное письмо нескольким получателям, но мне кажется, что я могу получить его только одним словом. У кого-нибудь есть идеи? Я включил код ниже, а также код, который я пробовал, который не работает

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

email_user = 'jane@doe.com'
email_password = 'password'
email_send = 'jane@doe.comk' #this works fro single recipient
# have tried but doesn't work: email_send = ['jane@doe.com', 'joe@bloggs.com']

subject = 'Latest FI Prices'

msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_send
msg['Subject'] = subject

body = 'Latest FI Prices Attached'
msg.attach(MIMEText(body,'plain'))

filename='FI_Prices.csv'
attachment = open('FI_Prices.csv','rb')

part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= "+filename)

msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('smtp.office365.com',587)
server.starttls()
server.login(email_user,email_password)


server.sendmail(email_user,email_send,text)
server.quit()

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

SMTP - это «древний» протокол, и я уверен, что сейчас мы разработали бы множество функций совершенно по-другому.

Что касается вашего вопроса, я хотел бы остановиться на двух моментах:

1. Сообщение и его конверт

Я не буду go вдаваться в детали, есть много прекрасных уроков. Вам необходимо поместить адреса в заголовки сообщений, так как здесь разрешены строки и комментарии, разделенные запятыми (обычно полные имена или псевдонимы получателей). Пример:

msg['To'] = '"John Doe" <jdoe@example.com>, "Guess Who" <xy@example.com>'

, и вам нужно указать серверу, кому вы хотите отправить это сообщение. Этот второй список адресов является еще одним списком. Адреса там должны быть без каких-либо комментариев (имен).

to_addrs = ["jdoe@example.com", "xy@example.com"]

К счастью, вы обычно хотите отправить адресатам, перечисленным в сообщении. В этом случае вы можете указать smtplib извлечь адреса из сообщения. См. send_message .

2. возвращаемое значение

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

0 голосов
/ 03 мая 2020

Вы можете попробовать, как показано ниже: -

email_send = "jane@doe.com, joe@bloggs.com"

выше должно работать.

...