簡體   English   中英

如何通過 Python 自動發送電子郵件,內容包含列表?

[英]How to automate the sending of e-mail by Python, with content that contains list?

在 Python3 中我想自動發送電子郵件,例如使用 smtplib

我這樣做了:

import smtplib
from datetime import datetime

now = datetime.now()
dia_hoje = now.strftime("%d")
mes_hoje = now.strftime("%m")
ano_hoje = now.strftime("%Y")

gmail_user = 'user'
gmail_password = 'password'

sent_from = gmail_user
to = ['address1', 'address2']

# Example of list text I will send
lista = ['SENADO: PLS 00205/2015, de autoria de Paulo Paim, fala sobre jornalistas e sofreu alterações em sua tramitação. Tramitação: Comissão de Assuntos Sociais. Situação: AGUARDANDO DESIGNAÇÃO DO RELATOR. http://legis.senado.leg.br/sdleg-getter/documento?dm=584243']

# I create the subject from today's date
subject = str(dia_hoje) + "/" + str(mes_hoje) + "/" + str(ano_hoje) + " Tramitações de interesse do jornalismo no Congresso"

# Creates the message body, with standard text and list content
body = "Olá seres humanos!\nEu sou um robô que vasculha a API da Câmara e do Senado em busca de proosicoes de interesse dos jornalistas.\nVeja as que tiveram alguma tramitação hoje.\n" + '\n'.join(lista)+ "\n Para mais detalhes consulte meu mestre: XXX"

email_text = """\
  From: %s
  To: %s
  Subject: %s

  %s
  """ % (sent_from, ", ".join(to), subject, body)  

try:
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

    print ('Email sent!')
except:
    print ('Something went wrong...')

但是此代碼不會發送電子郵件。 我收到消息“出了點問題......”

對於普通消息,只有沒有列表的文本,它可以工作。 但是當我在身體上放一個列表時,就會出現錯誤

請問,有誰知道我可以用來解決這個問題的更好的策略嗎?

這是身體打印:

print(body)        

Olá seres humanos!                                                              
Eu sou um robô que vasculha a API da Câmara e do Senado em busca de proosicoes de interesse dos jornalistas.
Veja as que tiveram alguma tramitação hoje.
SENADO: PLS 00205/2015, de autoria de Paulo Paim, fala sobre jornalistas e sofreu alterações em sua tramitação. Tramitação: Comissão de Assuntos Sociais. Situação: AGUARDANDO DESIGNAÇÃO DO RELATOR. http://legis.senado.leg.br/sdleg-getter/documento?dm=584243
 Para mais detalhes consulte meu mestre: XXX

這里有一個 email_text:

From: XXX@gmail.com                                                
  To: XXX@gmail.com, XXX@abraji.org.br
  Subject: 10/03/2020 Tramitações de interesse do jornalismo no Congresso

  Olá seres humanos!
Eu sou um robô que vasculha a API da Câmara e do Senado em busca de proosicoes de interesse dos jornalistas.
Veja as que tiveram alguma tramitação hoje.
SENADO: PLS 00205/2015, de autoria de Paulo Paim, fala sobre jornalistas e sofreu alterações em sua tramitação. Tramitação: Comissão de Assuntos Sociais. Situação: AGUARDANDO DESIGNAÇÃO DO RELATOR. http://legis.senado.leg.br/sdleg-getter/documento?dm=584243
 Para mais detalhes consulte meu mestre: XXX

如果您刪除try-except您將收到此錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 69-70: ordinal not in range(128)

要解決此問題,請使用以下命令修復您的email_text

email_text = email_text.encode('ascii', 'ignore').decode('ascii')

我猜這會從您的文本中刪除一些非 ascii 字符。 對於 attidional 方法,您可以查看問題。

編輯:第一部分是回答 OP quastion,但為了避免編譯,這里是使用 python 腳本發送電子郵件的更好方法:

recipients = ['john.doe@example.com', 'john.smith@example.co.uk']
msg = MIMEMultipart()
msg['From'] = "Can be any string you want, use ASCII chars only " # sender name
msg['To'] = ", ".join(recipients) # for one recipient just enter a valid email address
msg['Subject'] = "Subject"
body = "message body"
msg.attach(MIMEText(body, 'plain'))

server = smtplib.SMTP('smtp.gmail.com', 587)  # put your relevant SMTP here

server.ehlo()
server.starttls()
server.ehlo()
server.login('jhon@gmail.com', '1234567890')  # use your real gmail account user name and password
server.send_message(msg)
server.quit()

希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM