You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中借助Pythonanywhere实现每周定时发送邮件

解决方法

你当前的误区是把定时执行的脚本写成了Django视图函数,所以才会纠结入参和render返回值的问题,定时运行的脚本不需要作为视图对外提供访问,直接按独立可执行的Python脚本改造即可。

第一步:修改weekly_email_mm.py代码

import os
import sys
import datetime
import django
from django.core.mail import send_mail

# 替换为你Pythonanywhere上的实际项目路径
sys.path.append('/home/你的Pythonanywhere账号名/你的项目根目录文件夹名')
# 替换为你项目的settings路径,格式为「项目名.settings」
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings')
# 初始化Django环境,否则无法调用Django内置的邮件模块
django.setup()

def send_mm_email():
    # 时间判断逻辑放在函数内部,每次执行都会取最新的当前时间
    today = datetime.date.today()
    weekday = today.weekday()
    subject = 'Hello'
    message = 'Hi there'
    
    if weekday == 4:
        send_mail(
            subject,
            message,
            'something@from.com',
            ['user@xy.com'],
            fail_silently=False,
        )
        print('Friday, mails sent')
    else:
        print('Not Friday')    

if __name__ == "__main__":
    send_mm_email()

第二步:本地测试脚本有效性

在Pythonanywhere的Web控制台进入项目目录,执行以下命令测试脚本是否正常运行:
python weekly_email_mm.py
如果运行没有报错,输出Not Friday说明基础逻辑正常,你可以临时把判断条件weekday == 4改成对应当天的星期数值(周一为0,周日为6),测试能否正常收到邮件。

第三步:配置Pythonanywhere定时任务

进入Pythonanywhere后台的「Tasks」页面,添加每日定时任务,执行命令填写:
python /home/你的Pythonanywhere账号名/你的项目根目录文件夹名/weekly_email_mm.py
再选择你希望发邮件的时间即可,平台每天到点会自动执行脚本,仅周五会触发邮件发送,其余日期仅输出日志不发信。


注意事项

  • 确保你的Django项目settings.py中已经配置了正确的邮件参数(包括EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER、EMAIL_HOST_PASSWORD等),否则邮件发送会失败
  • 测试阶段建议保留fail_silently=False配置,出错时会输出具体报错信息方便排查
  • 不要把时间获取逻辑放在函数外部,否则变量仅会在脚本首次加载时计算,不会自动更新时间

内容的提问来源于stack exchange,提问作者RlM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:54:04