Do celów testowych potrzebuję zapełnić kilkaset skrzynek pocztowych różnymi wiadomościami i zamierzałem użyć do tego smtplib. Ale między innymi muszę mieć możliwość wysyłania wiadomości nie tylko do określonych skrzynek pocztowych, ale także do nich CC i BCC. Nie wygląda na to, żeby smtplib wspierał CC-ing i BCC-ing podczas wysyłania e-maili.
Szukasz sugestii, jak zrobić CC lub BCC wysyłając wiadomości ze skryptu Pythona.
(I - nie, nie tworzę skryptu do spamowania nikogo spoza mojego środowiska testowego).
Kluczową sprawą jest dodanie odbiorców jako listy identyfikatorów e-mail w wywołaniu sendmail.
źródło
msg['BCC']
wyłączone - ujawnia ukrytego nadawcę i nie ma wpływu na to, czy wiadomość jest do niego wysłana, czy nie (argumenty,sendmail
które to robią).Nie dodawaj nagłówka UDW.
Zobacz: http://mail.python.org/pipermail/email-sig/2004-September/000151.html
I to: "" "Zauważ, że drugi argument funkcji sendmail (), czyli odbiorcy, jest przekazywany jako lista. Możesz umieścić na liście dowolną liczbę adresów, aby wiadomość była dostarczana po kolei do każdego z nich. Ponieważ koperta informacje są oddzielone od nagłówków wiadomości, możesz nawet udzielić komuś BCC, umieszczając je w argumencie metody, ale nie w nagłówku wiadomości. "" "z http://pymotw.com/2/smtplib
źródło
Począwszy od Pythona 3.2, wydanego w listopadzie 2011 r., Smtplib ma nową funkcję
send_message
zamiast justsendmail
, co ułatwia obsługę To / CC / BCC. Wyciągając z oficjalnych przykładów wiadomości e-mail w języku Python , z niewielkimi modyfikacjami, otrzymujemy:Używanie nagłówków działa dobrze, ponieważ send_message respektuje BCC, jak opisano w dokumentacji :
Z
sendmail
było wspólne, aby dodać nagłówki CC do wiadomości, robi coś, takich jak:Lub
Problem polega na tym, że funkcja sendmail traktuje wszystkie te nagłówki tak samo, co oznacza, że zostaną one wysłane (widocznie) do wszystkich użytkowników To: i BCC:, pokonując cele BCC. Rozwiązaniem, jak pokazano w wielu innych tutaj odpowiedziach, było nie umieszczanie BCC w nagłówkach, a zamiast tego tylko na liście wiadomości e-mail przekazywanych
sendmail
.Zastrzeżenie polega na tym, że
send_message
wymaga obiektu Message, co oznacza, że musisz zaimportować klasę z,email.message
a nie tylko przekazywać ciągi dosendmail
.źródło
Rozróżnienie między TO, CC i BCC występuje tylko w nagłówkach tekstu. Na poziomie SMTP każdy jest odbiorcą.
DO - istnieje nagłówek DO: z adresem tego odbiorcy
CC - istnieje nagłówek CC: z adresem tego odbiorcy
UDW - Ten odbiorca w ogóle nie jest wymieniony w nagłówkach, ale nadal jest odbiorcą.
Jeśli masz
Masz trzech odbiorców. Nagłówki w treści wiadomości e-mail będą zawierać tylko DO: i DW:
źródło
Możesz spróbować MIMEText
następnie wyślij msg.as_string ()
https://docs.python.org/3.6/library/email.examples.html
źródło
Nie zadziałało, dopóki nie stworzyłem:
a następnie dodano DW w adresacie [lista], na przykład:
źródło
Żadna z powyższych rzeczy nie działała dla mnie, ponieważ miałem wielu odbiorców zarówno w „do”, jak i „cc”. Więc spróbowałem jak poniżej:
i rozszerz „adresatów” o „cc_recipients” i wyślij pocztę w trywialny sposób
źródło