编写一个自动发送每日电子邮件报告的Python脚本

要编写一个自动发送每日电子邮件报告的Python脚本,你可以使用smtplib库来发送邮件,email库来构建邮件内容,并使用schedule或time库来设定每日的自动发送时间。以下是步骤以及如何设置这个脚本。

  1. 环境准备

    • 确保安装Python:推荐使用Python 3.6及以上版本。
    • 安装依赖库:
    • 如果需要使用调度任务的库schedule,可以用以下命令安装:

pip install schedule
  1. 编写 Python 脚本
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import schedule
import time

配置邮件服务器的设置

SMTP_SERVER = 'smtp.example.com'  # 例如:Gmail是 'smtp.gmail.com'
SMTP_PORT = 587  # 对于Gmail和大多数邮件服务是587
SMTP_USER = 'your_email@example.com'
SMTP_PASSWORD = 'your_password'

配置收件人、主题和内容

TO_EMAIL = 'recipient@example.com'
SUBJECT = '每日报告'
BODY = '这是自动发送的每日报告。'

def send_email():
    try:
        # 创建一个邮件对象
        msg = MIMEMultipart()
        msg['From'] = SMTP_USER
        msg['To'] = TO_EMAIL
        msg['Subject'] = SUBJECT

        # 添加邮件内容
        msg.attach(MIMEText(BODY, 'plain'))

        # 设置SMTP服务器并发送邮件
        with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
            server.starttls()  # 启动TLS加密
            server.login(SMTP_USER, SMTP_PASSWORD)
            server.send_message(msg)

        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

# 使用schedule库来设定每日发送任务
def schedule_daily_email():
    # 设定每天的发送时间,比如早上9点发送
    schedule.every().day.at("09:00").do(send_email)

    print("开始等待每日发送任务...")
    while True:
        schedule.run_pending()
        time.sleep(60)  # 每60秒检查一次任务

# 直接调用发送函数进行测试
if __name__ == "__main__":
    # 运行调度任务
    schedule_daily_email()
  1. 详细步骤解释

    • 配置SMTP服务器:
    • 替换SMTP_SERVER和SMTP_PORT为你的邮件提供商的SMTP地址。例如:
    • Gmail: smtp.gmail.com,端口是587。
    • 替换SMTP_USER为你的电子邮件地址。
    • 替换SMTP_PASSWORD为你的邮件账户的密码。如果使用的是Gmail,需要创建应用专用密码,而不是使用普通密码。
    • 配置邮件内容:
    • 设置TO_EMAIL为你希望发送报告的收件人电子邮件。
    • SUBJECT是邮件主题,BODY是邮件正文内容。你可以根据需要修改这些内容。
    • 调度发送时间:
    • 使用schedule库,设定每天的发送时间,比如每天早上9点:

schedule.every().day.at("09:00").do(send_email)。
•   修改时间即可调整发送时间(24小时制)。
  1. 运行脚本

    • 将脚本保存为send_daily_report.py。
    • 在命令行中运行:

python send_daily_report.py

•   脚本会在后台运行,并在指定时间发送邮件。
  1. 部署和设置自动启动

    • 长期运行:
    • 在服务器上,你可以使用screen或tmux来保持脚本运行,确保即使断开SSH连接,脚本也能继续运行。
    • 示例使用screen:

screen -S email_report
python send_daily_report.py
# 按下Ctrl+A,然后D键来退出screen会话。
•   本地机器上自动启动:
•   如果希望在计算机启动时自动运行该脚本,可以使用操作系统的任务计划功能。
•   Windows: 使用“任务计划程序”创建一个任务,在启动时运行。
•   Linux/macOS: 使用crontab:
crontab -e

添加以下行,表示在系统启动时运行脚本:

@reboot python /path/to/send_daily_report.py
  1. 注意事项

    • 安全性: 避免在代码中硬编码密码。可以使用环境变量存储敏感信息,使用os.environ读取。
    • Gmail安全设置: 如果使用Gmail发送邮件,请确保开启“低安全应用访问”或使用应用专用密码,否则可能无法登录。
    • 调试: 如果邮件发送失败,检查端口、SMTP服务器、登录凭据,或者查看Python的异常输出,了解具体问题。

按照上述步骤和代码,你可以设置一个自动发送每日邮件报告的Python脚本。根据需求,修改报告内容和发送时间,以便满足实际需求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容