Python - Enviando e-mail usando SMTP
O SMTP (Simple Mail Transfer Protocol) é um protocolo que trata do envio de e-mail e do roteamento de e-mail entre servidores de e-mail.
Python fornece smtplib módulo, que define um objeto de sessão do cliente SMTP que pode ser usado para enviar mensagens para qualquer máquina da Internet com um daemon de ouvinte SMTP ou ESMTP.
Aqui está uma sintaxe simples para criar um objeto SMTP, que pode ser usado posteriormente para enviar um e-mail −
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Aqui está o detalhe dos parâmetros -
-
anfitrião − Este é o host que está executando seu servidor SMTP. Você pode especificar o endereço IP do host ou um nome de domínio como tutorialspoint.com. Este é um argumento opcional.
-
porta − Se você estiver fornecendo host argumento, então você precisa especificar uma porta, onde o servidor SMTP está escutando. Normalmente esta porta seria 25.
-
local_hostname − Se o seu servidor SMTP estiver rodando em sua máquina local, então você pode especificar apenas localhost a partir desta opção.
Um objeto SMTP tem um método de instância chamado sendmail , que normalmente é usado para fazer o trabalho de enviar uma mensagem. Leva três parâmetros -
-
O remetente − Uma string com o endereço do remetente.
-
Os receptores − Uma lista de strings, uma para cada destinatário.
-
A mensagem − Uma mensagem como uma string formatada conforme especificado nas várias RFCs.
Exemplo
Aqui está uma maneira simples de enviar um e-mail usando o script Python. Experimente uma vez -
#!/usr/bin/python import smtplib sender = '[email protected]' receivers = ['[email protected]'] message = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: SMTP e-mail test This is a test e-mail message. """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Aqui, você colocou um e-mail básico na mensagem, usando aspas triplas, tomando o cuidado de formatar os cabeçalhos corretamente. Um e-mail requer um De , Para , e Assunto cabeçalho, separado do corpo do e-mail com uma linha em branco.
Para enviar o e-mail você usa smtpObj para se conectar ao servidor SMTP na máquina local e então use o sendmail juntamente com a mensagem, o endereço de e o endereço de destino como parâmetros (mesmo que os endereços de e para estejam dentro do próprio e-mail, eles nem sempre são usados para rotear e-mails).
Se você não estiver executando um servidor SMTP em sua máquina local, poderá usar smtplib cliente para se comunicar com um servidor SMTP remoto. A menos que você esteja usando um serviço de webmail (como Hotmail ou Yahoo! Mail), seu provedor de e-mail deve ter fornecido os detalhes do servidor de e-mail de saída para que você possa fornecê-los, como segue −
smtplib.SMTP('mail.your-domain.com', 25)
Enviando um e-mail HTML usando Python
Quando você envia uma mensagem de texto usando Python, todo o conteúdo é tratado como texto simples. Mesmo se você incluir tags HTML em uma mensagem de texto, ela será exibida como texto simples e as tags HTML não serão formatadas de acordo com a sintaxe HTML. Mas o Python oferece a opção de enviar uma mensagem HTML como uma mensagem HTML real.
Ao enviar uma mensagem de e-mail, você pode especificar uma versão Mime, tipo de conteúdo e conjunto de caracteres para enviar um e-mail HTML.
Exemplo
A seguir está o exemplo para enviar conteúdo HTML como um e-mail. Experimente uma vez -
#!/usr/bin/python import smtplib message = """From: From Person <[email protected]> To: To Person <[email protected]> MIME-Version: 1.0 Content-type: text/html Subject: SMTP HTML e-mail test This is an e-mail message to be sent in HTML format <b>This is HTML message.</b> <h1>This is headline.</h1> """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Enviando anexos como um e-mail
Para enviar um e-mail com conteúdo misto é necessário definir Content-type cabeçalho para multipart/mixed . Em seguida, as seções de texto e anexo podem ser especificadas dentro dos limites .
Um limite é iniciado com dois hífens seguidos por um número exclusivo, que não pode aparecer na parte da mensagem do e-mail. Um limite final indicando a seção final do e-mail também deve terminar com dois hífens.
Os arquivos anexados devem ser codificados com o pack("m") função para ter codificação base64 antes da transmissão.
Exemplo
Segue o exemplo, que envia um arquivo /tmp/test.txt como um anexo. Experimente uma vez -
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Read a file and encode it into base64 format fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) # base64 sender = '[email protected]' reciever = '[email protected]' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # Define the message action part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # Define the attachment section part3 = """Content-Type: multipart/mixed; name=\"%s\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ %(filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, reciever, message) print "Successfully sent email" except Exception: print "Error: unable to send email"
python
- Tipos de dados Python
- Operadores Python
- Instrução de passagem do Python
- Argumentos da função Python
- Dicionário Python
- Manipulação de Exceções do Python Usando a instrução try, except e finally
- Biblioteca Python do sensor de temperatura TMP006 usando Raspberry pi,
- Sensor de temperatura Python e Raspberry Pi
- Python Average:Como encontrar a AVERAGE de uma lista em Python
- Troque duas variáveis Python sem usar uma terceira