使用Python SMTP调用AWS SES发邮件时遇'function' object has no attribute 'encode'错误
解决Python SMTP通过AWS SES发邮件时的'function' object has no attribute 'encode'错误
错误原因
- 核心问题:
msg['From'] = self.send_email错误地将类的send_email方法对象赋值给邮件的From字段,而非正确的发件人邮箱地址。后续处理邮件时,程序尝试对方法对象执行encode操作,触发报错。 - 次要问题:
except for Exception as e:存在语法错误,多余的for会导致异常捕获失效。
修复后的完整代码
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import common.config_constants as constants class Email_util: def __init__(self) -> None: self.smtp_server = 'email-smtp.us-east-1.amazonaws.com' self.smtp_port = constants.SMTP_PORT self.workmail_user = constants.SMTP_USER self.workmail_pass = constants.SMTP_PASS self.sender = constants.FORGOT_PASSWORD_EMAIL_HANDLER def send_email(self, receiver, subject, body): msg = MIMEMultipart() # 修正:使用预定义的发件人邮箱地址 msg['From'] = self.sender msg['To'] = receiver msg['Subject'] = subject # Attach the email body msg.attach(MIMEText(body, 'plain')) try: # Establish a connection to Amazon WorkMail SMTP server server = smtplib.SMTP(self.smtp_server, self.smtp_port) server.starttls() # Login to Amazon WorkMail server.login(self.workmail_user, self.workmail_pass) # Send the email server.sendmail(self.sender, receiver, msg.as_string()) print("Email sent successfully!") return True # 修正:移除多余的for关键字 except Exception as e: print(f"Error sending email: {e}") return False
关键修复点说明
- 替换
msg['From']的赋值内容:把方法对象self.send_email换成类初始化时定义的发件人邮箱self.sender,确保From字段是合法的邮箱字符串。 - 修正异常捕获语法:删除
except后的for关键字,让异常处理逻辑正常工作。
内容的提问来源于stack exchange,提问作者Biswas Sampad
相关产品推荐
相关产品推荐

