如何通过 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...')
但此代码不发送电子邮件。我收到消息 "Something went wrong ..."
对于正常的消息,只有没有列表的文本,它可以工作。但是当我在 body 上放一个列表时,出现错误
拜托,有谁知道我可以用来解决这个问题的更好策略吗?
这里是正文:
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方法,您可以查看this quastion。
编辑:
第一部分是回答 OP 问题,但为了避免编译,这里是使用 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()
希望对您有所帮助!
在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...')
但此代码不发送电子邮件。我收到消息 "Something went wrong ..."
对于正常的消息,只有没有列表的文本,它可以工作。但是当我在 body 上放一个列表时,出现错误
拜托,有谁知道我可以用来解决这个问题的更好策略吗?
这里是正文:
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方法,您可以查看this quastion。
编辑: 第一部分是回答 OP 问题,但为了避免编译,这里是使用 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()
希望对您有所帮助!