python学习记录四:关于SMTP发送邮件报错以及解决方案

在学习Python SMTP发送邮件时遇到'SMTPAuthenticationError',已开启邮箱的SMTP服务和授权码设置。发现163邮箱需要SSL连接,通过修改为`smtplib.SMTP_SSL`或使用`starttls()`建立安全连接,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习SMTP发送邮件相关内容时,根据示例代码写出如下代码:

from email.mime.text import MIMEText
msg = MIMEText('hello, send by python...', 'plain', 'utf-8')
# 输入Email地址和口令:
from_addr = input('From: ')
password = 
### Python 发送邮件常见错误及解决方案 当使用 Python 的 `smtplib` 库发送电子邮件时,可能会遇到各种错误。以下是针对特定错误的解释和解决方案。 #### 错误一:缺少或无效的 From 头部 如果收到类似于 `smtplib.SMTPDataError: (550, b'The "From" header is missing or invalid.')` 的错误消息,则表示邮件头部中的发件人信息不符合标准[^1]。为了修复此问题,在构建邮件对象时应确保设置有效的 `From` 字段: ```python from email.header import Header from email.mime.text import MIMEText msg = MIMEText('邮件正文', 'plain', 'utf-8') msg['From'] = Header('发件人的名字 <sender@example.com>', 'utf-8') # 设置正确的发件人邮箱地址 ``` #### 错误二:未指定收件人列表格式不正确 对于批量发送给多个接收者的情况,有时会发现收件人在客户端上无法正常显示。这是因为 `To` 字段的内容可能没有按照预期的方式处理[^2]。可以通过以下方式来修正这个问题: ```python to_receivers = ['receiver1@example.com', 'receiver2@example.com'] msg['To'] = Header(', '.join(to_receivers), 'utf-8') # 使用逗号分隔符连接所有收件人地址并编码为UTF-8字符集 ``` #### 错误三:邮件被退回 某些情况下,即使成功发送出去之后也会因为一些原因而遭到拒收或退信。这可能是由于目标域名不存在、用户不存在等原因造成的。为了避免这种情况发生,建议先验证所使用的 SMTP 配置是否正确无误,并确认所有的联系人都存在且有效[^3]。 #### 完整示例代码 下面是一个完整的例子展示了如何通过上述调整后的参数配置来进行安全可靠的邮件传输操作[^4]: ```python import smtplib from email.mime.text import MIMEText from email.header import Header def send_email(subject, content, sender, receivers, smtp_server, port=25): message = MIMEText(content, 'plain', 'utf-8') message['Subject'] = Header(subject, 'utf-8') message['From'] = Header(f'{sender["name"]} <{sender["email"]}>', 'utf-8') if isinstance(receivers, str): message['To'] = Header(receivers, 'utf-8') elif isinstance(receivers, list): message['To'] = Header(", ".join(receivers), 'utf-8') try: with smtplib.SMTP(smtp_server, port) as server: server.starttls() server.login(sender["email"], sender["password"]) server.sendmail( from_addr=sender["email"], to_addrs=receivers, msg=message.as_string()) print("邮件发送成功") except Exception as e: print(f"邮件发送失败 {e}") if __name__ == '__main__': subject = "测试主题" body_text = "这是来自Python脚本的一封测试邮件." my_sender_info = {"name": "张三", "email": "example@domain.com", "password": "your_password"} recipients = ["recipient1@domain.com", "recipient2@domain.com"] mail_host = "smtp.domain.com" send_email(subject, body_text, my_sender_info, recipients, mail_host) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值