Python发邮件脚本无报错但未收到邮件,求日志位置及代码问题排查
问题1:Linux Mint 20 中该类邮件发送日志的存储位置
- 如果你本地没有安装postfix、sendmail等本地邮件传输代理(MTA),你的Python脚本是直接连接Gmail远端SMTP服务器完成发送的,本地系统不会存储邮件传输的相关日志,
/var/log/下默认不会生成对应的记录。 - 如果你安装了本地MTA,相关日志默认存储在
/var/log/mail.log,部分关联报错也可以在/var/log/syslog中检索。 - 这种直连远端SMTP的场景,你可以直接登录Gmail网页端,检查「已发送邮件」「垃圾邮件」「安全活动记录」板块,确认Gmail是否实际触发了投递、是否将邮件判定为异常拦截。
问题2:给出的脚本存在的明确错误
你贴出的代码只完成了SMTP服务器的连接和身份校验,没有实际执行发送邮件的逻辑,这是最核心的问题:
- 你拿到有效
server对象后,没有调用server.sendmail(sender_email, 收件人地址, 格式化后的邮件内容)方法完成实际投递,自然不会有邮件发出。 - 额外注意事项:
- 你当前使用的是STARTTLS模式,对应的Gmail SMTP端口必须是
587,如果配置文件中填的是SSL端口465,需要改用smtplib.SMTP_SSL()初始化连接,不能调用starttls()方法。 - 目前普通个人Gmail账号已经完全废弃了「允许低安全性应用访问」的设置,即使你开启了该开关也无法直接用账号密码登录,必须先开启账号两步验证,生成专用的应用密码,填入配置的密码字段才能正常登录。
- 发送的邮件必须包含规范的
To、From、Subject头信息,否则Gmail会直接判定为垃圾内容拦截,不会执行投递。 - 连接使用完成后建议调用
server.quit()主动断开SMTP连接。
- 你当前使用的是STARTTLS模式,对应的Gmail SMTP端口必须是
附完整的连接+发送逻辑参考:
import json import smtplib import ssl from email.mime.text import MIMEText def get_smtp_server(): with open("config.json") as config: data = json.load(config) smtp_server = data["MAIL"]["SMTP_SERVER"] port = data["MAIL"]["SMTP_PORT"] sender_email = data["MAIL"]["SMTP_ACCOUNT"] password = data["MAIL"]["SMTP_PASSWORD"] context = ssl.create_default_context() try: server = smtplib.SMTP(smtp_server, port) server.ehlo() server.starttls(context=context) server.ehlo() server.login(sender_email, password) return server except Exception as e: print(e) return None # 实际发送逻辑 if __name__ == "__main__": server = get_smtp_server() if server: # 构造邮件内容 msg = MIMEText("这是测试邮件内容") msg["From"] = "发件人显示名 <yourgmail@gmail.com>" msg["To"] = "收件人地址 <xxx@xxx.com>" msg["Subject"] = "Python测试邮件" try: server.sendmail( from_addr="yourgmail@gmail.com", to_addrs=["xxx@xxx.com"], msg=msg.as_string() ) print("邮件发送成功") except Exception as e: print(f"发送失败:{e}") finally: server.quit()
内容的提问来源于stack exchange,提问作者Elcid_91
相关产品推荐
相关产品推荐

