Enviar uma grande quantidade de e-mails manualmente é uma tarefa tediosa. Você pode usar serviços de terceiros para enviar e-mails em massa por vez.
Que tal você criar seu próprio script personalizado para enviar e-mails?
Não é maravilhoso?
Sim é. Vamos escrever um script em Python para enviar e-mails.
Python tem uma biblioteca chamada smtplib que é usada para enviar e-mails. A biblioteca smtplib é baseada no SMTP (Simple Mail Transport Protocol). SMTP é usado para enviar e-mails para outras pessoas.
últimas postagens
Configurar o Gmail
Aqui, vamos usar o Gmail como um provedor de e-mail. O Google não permite que scripts façam login. E precisamos fazer uma alteração na segurança de nossa conta do Gmail que permite que scripts façam login em nossa conta do Gmail.
Alterar a opção de segurança em nossa conta do Gmail não é bom, pois permite que outras pessoas acessem a conta com muita facilidade. É recomendável criar uma nova conta do Gmail. Vá para as configurações aqui e ative a configuração Permitir aplicativos menos seguros: ATIVADO.
Se você não se sentir confortável em ativar a configuração acima, pode usar a API do Google para fazer login na sua conta do Gmail. Você pode encontrar o script para usar as APIs do Google para autenticação aqui.
Etapas para enviar e-mail
Certas etapas precisam ser executadas para enviar um e-mail usando a biblioteca smtplib. Vamos ver as etapas primeiro e depois escreveremos o script.
#1. Conectando ao servidor SMTP
Cada provedor de serviços terá um nome de domínio e uma porta de servidor SMTP diferentes. Temos que usar o nome de domínio do servidor SMTP e a porta do provedor de e-mail que vamos usar no script. O nome de domínio do servidor SMTP e a porta do Gmail são smtp.gmail.com e 465.
Estaremos usando criptografia SSL para a conexão do servidor SMTP, pois é mais segura do que a criptografia TSL. Se você quiser usar a criptografia TSL, use a porta 587 em vez de 465. O nome de domínio do servidor SMTP será diferente com base no provedor de serviços de e-mail.
O código para se conectar ao servidor SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Conecte-se
Uma vez estabelecida a conexão com o servidor SMTP, podemos fazer login usando o endereço de e-mail e a senha com o método do objeto SMTP de login. O código é o seguinte.
server.login(sender_email, password)
#3. Enviar correio
Após o login, não há como esperar para enviar o e-mail. Envie o e-mail usando o método sendmail. Certifique-se de enviar o e-mail no seguinte formato.
Assunto: your_subject_for newline mail_content
Espaços não são necessários. Eles são apenas para esclarecimento no formato acima. Vamos ver o código de exemplo.
server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")
#4. Desistir
Não se esqueça de sair do SMTP c
Vimos as etapas para enviar e-mail usando Python. Mas não discutimos o código completo. Vamos passar rapidamente pelo código.
import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)
Criamos uma classe chamada Mail. E tem um método chamado send para enviar os e-mails. Escrever aula ou simplesmente não é com você. A classe torna mais legível. Implementamos todas as etapas discutidas acima, uma a uma, no método send.
Viva! você enviou um e-mail usando o script Python.
Conteúdo HTML
E se você quiser enviar o e-mail em HTML? É possível?
Sim, porque não. Podemos enviar o e-mail usando HTML na biblioteca chamada email.mime. É uma biblioteca integrada.
o MIME é um padrão usado para estender o formato de e-mails para suportar programas de aplicativos, vídeo, imagens, etc.,
Existem duas classes que precisamos do módulo email.mime. Eles são MIMEText e MIMEMultipart. Vejamos uma breve explicação sobre eles.
#1. MIMETexto
A classe MIMEText é usada para escrever nosso conteúdo de email em HTML. Criaremos uma instância da classe MIMEText passando o conteúdo HTML e o tipo de conteúdo. Veja o código de exemplo abaixo.
html_content = MIMEText(html_template, 'html')
Alguns serviços de e-mail não oferecem suporte à renderização de HTML. Portanto, é melhor criar duas instâncias da classe MIMEText para texto simples e HTML.
#2. MIMEMúltimaparte
A classe MIMEMultipart é utilizada para simplificar a formatação e escrita do assunto, desde endereço, endereço etc. Passaremos o conteúdo criado com a classe MIMEText para MIMEMultipart utilizando o método attach.
Precisamos garantir que a instância de MIMEMultipart seja criada com o argumento alternativo para renderizar texto simples ou HTML. Vamos enviar um e-mail com conteúdo HTML.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'etechpt.com Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ etechpt.com Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>etechpt.com</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
Você também pode adicionar cópia oculta usando esse atributo Bcc na instância MIMEMultipart.
Adicionando anexos
Os anexos podem ser imagens, pdfs, documentos, planilhas, etc. Chama-se MIMEBase na classe email.mime. É usado para adicionar anexos ao e-mail.
Vamos adicionar um anexo ao e-mail acima.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "etechpt.com-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)
Enviar para e-mails em massa de uma só vez
Usamos um loop para enviar o mesmo e-mail para vários membros. Esse é um caso (quando você não quer que os receptores saibam sobre outros receptores).
Suponha que você tenha que enviar o mesmo e-mail para 1.000 membros de uma só vez do mesmo grupo. Nesses casos, usar um loop não será apropriado. Podemos adicionar vários e-mails no campo Para na composição de e-mail geral. Como fazer isso no script Python?
Precisamos combinar a lista de e-mails como uma string separada por vírgula e espaço. Podemos usar a string do método join para combinar todos os e-mails como uma string. Veja o código para combinar e-mails como uma string.
", ".join(emails)
Substitua o campo Para no script acima usando a string acima. É isso, você enviou o e-mail para e-mails em massa de uma só vez.
Conclusão
Existem algumas bibliotecas de terceiros para enviar e-mails em Python. Alguns deles são envelopes, Yagmail, Flanco, etc., Essas bibliotecas nos ajudam a escrever scripts com poucas linhas de código. Você também pode explorá-los.
Agora, você pode automatizar seu e-mail usando scripts Python. A estrutura de envio de e-mails será diferente com base no seu caso de uso. Vimos diferentes cenários de envio de e-mails. Você pode personalizar facilmente os scripts discutidos no tutorial para o seu caso de uso. Eu tirei a referência deste artigo.
Codificação feliz 🙂