Python Письма не отправляются в BCC - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь создать код python, который будет отправлять электронные письма. До сих пор мне это удалось, но сообщения B CC не отправляются.

"""
June 18, 2020

@author: Carlos
"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail = smtplib.SMTP("smtp.gmail.com", 587)
msg = MIMEMultipart()

message = input("Your message: ")
password = input("Your password: ")
msg['From'] = input("Your email: ")
msg['To'] = input("Reciever(s): ")
msg['CC'] = ", " + input("CC(s): ")
msg['BCC'] = ", " + input("BCC(s): ")
msg['Subject'] = input("Your header: ")

msg.attach(MIMEText(message, 'plain'))

mail.ehlo()

mail.starttls()

mail.login(msg['From'], password)

mail.sendmail(msg['From'], msg['To'] + msg['CC'] + msg['BCC'], msg.as_string())

mail.close()

print("Successfully sent email to %s:" % (msg['To']))

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Я нашел решение моей проблемы с не отправкой! Вот мой код, если кому интересно!

"""
June 20, 2020

@author: Carlos
"""
import smtplib
mail = smtplib.SMTP("smtp.gmail.com", 587)

sender = input("Your email: ")
password = input("Your password: ")
reciever = input("Receiver(s): ")
cc = [input("CC(s): ")]
bcc = [input("BCC(s): ")]
subject = input("Your header: ")
message_text = input("Your message: ")
message = "From: %s\r\n" % sender + "To: %s\r\n" % reciever + "CC: %s\r\n" % ",".join(cc) + "Subject: %s\r\n" % subject + "\r\n"  + message_text
to = [reciever] + cc + bcc

mail.ehlo()

mail.starttls()

mail.login(sender, password)

mail.sendmail(sender, to, message)

mail.close()

print("Successfully sent email!")

0 голосов
/ 19 июня 2020

Вероятно, вы не хотите, чтобы B CC был частью самого сообщения (потому что по определению он не предназначен для просмотра получателями), поэтому его, вероятно, лучше всего хранить в отдельной переменной, а не как элемент экземпляра MIMEMultipart.

Вы также не хотите помещать начальные запятые et c (которые вы добавили только для того, чтобы помочь объединить строки) в элементы msg, поскольку они будут составляют часть сообщения.

Если вы сделаете это:

msg['To'] = input("Receiver(s): ")
msg['CC'] = input("CC(s): ")
bcc = input("BCC(s): ")

, вы можете составить список всех получателей, используя следующее:

all_recipients = sum([s.split(",") for s in (msg['To'], msg['CC'], bcc) if s],
                     [])

Вы затем можно отправить сообщение, используя:

mail.sendmail(msg['From'], ",".join(all_recipients), msg.as_string())

Приведенный выше код предполагает, что ваши входные строки не включают запятую, кроме как в качестве разделителя. В принципе, такой заголовок, как «Кому:», может содержать части реального имени, а они могут содержать запятые, например:

"John Doe, Yoyodyne, Inc." <john.doe@yoyodyne.example.com>

Если это можно использовать, то альтернативным подходом было бы составление списка в зависимости от того, какие заголовки To / CC / B CC не пусты, и присоедините их к ",", чтобы вам не приходилось разделять какие-либо строки:

non_empty_recipient_headers = [h for h in (msg['To'], msg['CC'], bcc) if h]

mail.sendmail(msg['From'], ",".join(non_empty_recipient_headers), msg.as_string())
...