Eu preciso, para fins de teste, preencher algumas centenas de caixas de e-mail com várias mensagens e usaria smtplib para isso. Mas, entre outras coisas, preciso ser capaz de enviar mensagens não apenas para caixas de correio específicas, mas também em CC e em BCC. Não parece que o smtplib suporta CC-ing e BCC-ing ao enviar e-mails.
Procurando por sugestões de como enviar mensagens CC ou BCC a partir do script python.
(E - não, não estou criando um script para enviar spam para ninguém fora do meu ambiente de teste.)
O principal é adicionar os destinatários como uma lista de ids de e-mail em sua chamada sendmail.
fonte
msg['BCC']
desligado - ele revela seu remetente oculto e não tem impacto sobre se a mensagem é enviada a eles ou não (os argumentos parasendmail
isso).Não adicione o cabeçalho Cco.
Veja isto: http://mail.python.org/pipermail/email-sig/2004-September/000151.html
E isto: "" "Observe que o segundo argumento para sendmail (), os destinatários, é passado como uma lista. Você pode incluir qualquer número de endereços na lista para que a mensagem seja entregue a cada um deles por vez. Desde o envelope as informações são separadas dos cabeçalhos das mensagens, você pode até mesmo enviar uma pessoa para BCC incluindo-os no argumento do método, mas não no cabeçalho da mensagem. "" "de http://pymotw.com/2/smtplib
fonte
A partir do Python 3.2, lançado em novembro de 2011, o smtplib tem uma nova função em
send_message
vez de apenassendmail
, o que torna mais fácil lidar com To / CC / BCC. Pegando os exemplos de e-mail oficial do Python , com algumas pequenas modificações, obtemos:Usar os cabeçalhos funciona bem, porque send_message respeita BCC conforme descrito na documentação :
Com
sendmail
isso era comum adicionar cabeçalhos CC à mensagem, fazendo algo como:Ou
O problema é que a função sendmail trata todos os cabeçalhos da mesma forma, o que significa que eles serão enviados (visivelmente) para todos os usuários Para: e BCC: frustrando os propósitos do BCC. A solução, conforme mostrado em muitas das outras respostas aqui, foi não incluir BCC nos cabeçalhos e, em vez disso, apenas na lista de e-mails passados para
sendmail
.A ressalva é que
send_message
requer um objeto Message, o que significa que você precisará importar uma classe de ememail.message
vez de apenas passar strings parasendmail
.fonte
A distinção entre TO, CC e BCC ocorre apenas nos cabeçalhos do texto. No nível SMTP, todos são destinatários.
TO - Há um cabeçalho TO: com o endereço deste destinatário
CC - há um cabeçalho CC: com o endereço deste destinatário
BCC - Este destinatário não é mencionado nos cabeçalhos, mas ainda é um destinatário.
Se você tem
Você tem três destinatários. Os cabeçalhos no corpo do e-mail incluirão apenas o PARA: e o CC:
fonte
Você pode tentar o MIMEText
então envie msg.as_string ()
https://docs.python.org/3.6/library/email.examples.html
fonte
Não funcionou para mim até que criei:
e então adicionou cc no destinatário [lista] como:
fonte
Nenhuma das coisas acima funcionou para mim, pois eu tinha vários destinatários em 'para' e 'cc'. Então, tentei como abaixo:
e estender os 'destinatários' com 'cc_recipients' e enviar e-mail de forma trivial
fonte