Вероятно, вы не хотите, чтобы 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())