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

Python SMTP Client调用sendmail方法报缺少必填参数msg错误如何解决?

错误原因及修复方案

1. 核心报错的直接诱因

你调用sendmail的方式错误:sendmail是SMTP类的实例方法,不能直接用类名SMTP调用,要么通过已经建立连接的实例对象conn调用,要么手动传入实例作为第一个参数。你当前的写法相当于少传了第一个实例参数,参数位错位后系统识别不到符合要求的msg参数,就抛出了缺少必填参数的错误。

2. 其他需要修复的隐性错误

  • signin函数内变量名不匹配:你定义的账号密码变量是email、password,调用login方法时却用了不存在的变量adresa、lozinka,运行时会触发变量未定义报错。
  • write_send_message函数内遍历字典的变量名错误:你遍历message的键时,使用了未定义的unos、poruka变量,同样会触发变量未定义报错。
  • 邮件格式不规范:你当前传入的msg仅包含正文,From、To、Subject等邮件头没有拼入邮件内容字符串,会导致收件端无法识别主题、发件人等信息,甚至被判定为垃圾邮件。

3. 修复后的完整代码

from smtplib import SMTP

# 全局配置统一管理
host = 'smtpserver.smtp.com'
port = 587
email = 'example@example.com'
password = 'password'
target_email = 'example2@example.com'

# 初始化连接
conn = SMTP(host, port)

def signin():
    conn.ehlo_or_helo_if_needed()
    conn.starttls()
    # 修正变量名,用已定义的账号密码登录
    conn.login(email, password)

def write_send_message():
    # 拼接符合规范的邮件内容
    msg_lines = [
        f'From: {email}',
        f'To: {target_email}',
        'Subject: Test message',
        '',  # 邮件头和正文之间必须保留空行分隔
        'Test message from Python interpeter'
    ]
    msg = '\r\n'.join(msg_lines)
    
    print('Sending the message...:')
    print(msg)
    # 用已经完成连接鉴权的conn实例调用sendmail,参数位对应正确
    conn.sendmail(email, target_email, msg)
    # 发送完成后关闭连接
    conn.quit()

signin()
write_send_message()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:01