使用 python 发送电子邮件:如何形成消息?

Posted

技术标签:

【中文标题】使用 python 发送电子邮件:如何形成消息?【英文标题】:Send emails using python: how to form the message? 【发布时间】:2019-10-27 09:01:55 【问题描述】:

我正在制作一个程序,该程序将从谷歌表中检索数据,这是我一周花费多少的支出日记。成功检索数据后,程序会向我发送一封电子邮件,告诉我我一周内每天花费了多少。

我的消费日记照片:

我正在使用 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 是的,它工作得非常好。非常感谢! 【参考方案1】:

是的,您的问题有解决方案。您应该继续使用smptlib,因为它是 python 中最好的电子邮件发送模块(如果还有其他模块)。但是,要解决您的问题,您可以在for day in range (2, num_days + 2): 之后添加day.pop(0) 您可以找到有关此here 的更多信息。弹出后,您可以像这样使用join 方法:output="".join(goods) 把这个放在你放.pop()东西的地方之后

【讨论】:

工作就像一个魅力:)

以上是关于使用 python 发送电子邮件:如何形成消息?的主要内容,如果未能解决你的问题,请参考以下文章

python: 如何使用 TO、CC 和 BCC 发送邮件?

使用 Excel VBA 以编程方式禁止 Outlook 电子邮件发送警告消息

如何使用 Python 将 pdf 文件发送到多个电子邮件?

用python发送电子邮件,消息丢失

如何发送电子邮件附件?

如何发送电子邮件附件?