【发布时间】:2023-04-07 04:08:02
【问题描述】:
我正在制作一个程序,该程序将从谷歌表中检索数据,这是我一周花费多少的支出日记。成功检索数据后,程序会向我发送一封电子邮件,告诉我我一周内每天花费了多少。
我正在使用 gspread 来检索数据,并且我能够使用 for 循环逐列检索数据
它给了我数据作为一个列表。
例如,如果我这样做
num_days = 7
goods = []
for day in range(2, num_days + 2):
goods.append(worksheet.col_values(day))
OUTPUT: [['Mon 04/08/2019', 'Edeka 20.07'], ['Tue 04/09/2019', 'Edeka 9.77', 'Gym 60'], ['Wed 04/10/2019', 'Party 5', 'Jiujitsu System 30', 'Jiujitsu card 5', 'Jiujitsu Monthly fee 54'], ['Thu 04/11/2019', 'Laundry 3.5', 'Part 7.5 Euro'], ['Fri 04/12/2019', 'Edeka 5.95', 'Laundry 2'], ['Sat 04/13/2019', 'Food Festival 20 ', 'DM Hair Roller 3.25', 'Rewe 9.97'], ['Sun 04/14/2019', 'Monitor 224.99']]
所以我能够逐列检索并将它们作为列表放入列表中。
这一切都很好。但我想以以下格式发送电子邮件。
前)
星期一:
埃德卡 20.07周二:
埃德卡 9.77,
健身房 60...
太阳:监视器 224.99
这是到达我邮箱的电子邮件照片。
我希望第一个元素消失,只显示我买了什么商品,不包括日期。
我怎样才能像上面的照片一样形成要发送的电子邮件消息?
我目前正在使用 smtplib 发送电子邮件,但我不知道如何仅将我购买的商品放入邮件中。
def send_email_for_spending(money_spent_week):
with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
# title for your email
subject = "Here is how much you spent in this week."
# Number of Days
num_days = 7
goods = []
# it starts from 2 because column that has monday is 2nd
# column
for day in range(2, num_days + 2):
goods.append(worksheet.col_values(day))
message = f"""
MON:
{goods[0]}
TUE:
{goods[1]}
WED:
{goods[2]}
THU:
{goods[3]}
FRI:
{goods[4]}
SAT:
{goods[5]}
SUN:
{goods[6]}
"""
smtp.sendmail(EMAIL_ADDRESS, 'dudeindaegu@gmail.com', message)
【问题讨论】:
-
您应该继续使用 smptlib,因为它是 python 中最好的电子邮件发送模块(如果还有其他模块)。但是,要解决您的问题,您可以在
for day in range (2, num_days + 2):
之后添加day.pop(0)
您可以找到有关此here 的更多信息 -
哦,那行得通!但是,有什么办法可以像普通句子一样打印它?例如,如果我执行 day.pop(0),它将像这样打印出 '[edeka 20.7, gym 60]',但我确实想打印出'edeka 20.7, gym 60' 像这样没有支架。有什么办法吗?
-
是的。弹出后,您可以像这样使用
join
方法:output="".join(goods)
-
把这个放在你放
.pop()
东西的地方之后 -
@ArnavPoddar 是的,它工作得非常好。非常感谢!
标签:
python
string
email
project
gspread
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用 python 发送电子邮件:如何形成消息? - Python技术站