如何修复搭建SMTP服务时secure_smtplib.SMTPS.connect()缺少self参数的报错
错误原因
你遇到的报错核心是类方法和实例方法的调用逻辑错误:
TypeError: connect() missing 1 required positional argument: 'self'
connect()是secure_smtplib.SMTPS类的实例方法,必须先创建该类的实例对象才能调用,你直接通过类名调用实例方法,才会提示缺少self参数。
你后续手动加self的修改方案不可行,是因为self仅在类内部的方法定义中作为默认第一个参数存在,你在类外部的业务代码中从来没有定义过self变量,自然会触发未定义报错。
修复方案
把原代码中创建server的行替换为以下任意一种写法即可:
写法1:实例化时直接传连接参数(推荐)
该写法会在创建SMTPS实例时自动调用connect方法完成连接,不需要手动调用
# Gmail SMTP正确地址为smtp.gmail.com,STARTTLS模式端口统一用587 server = secure_smtplib.SMTPS(host='smtp.gmail.com', port=587)
写法2:先创建实例再手动调用connect
server = secure_smtplib.SMTPS() server.connect(host='smtp.gmail.com', port=587)
其他注意事项
- 原代码中填写的
smtps.gmail.com是错误的服务器地址,Gmail官方SMTP地址为smtp.gmail.com - 端口不要填0,0是系统预留的随机端口标识,SMTP服务无法正常使用该端口
- 目前Gmail默认禁止第三方客户端直接使用账号密码登录,你需要先为账号开启两步验证,再生成专属的应用密码用于SMTP登录,否则会触发登录失败报错
内容的提问来源于stack exchange,提问作者Christopher Tan
相关产品推荐
相关产品推荐

