Python自动发送邮件,QQ邮箱、阿里邮箱

前言

本文讲述Python脚本自动发送邮件,如何配置QQ邮箱、阿里邮箱教程


邮箱配置步骤

1 QQ邮箱配置

1.点击设置–>账号在这里插入图片描述
2.找到POP3 点击开启服务
在这里插入图片描述
3. 需要发送短信验证,验证通过可以得到邮箱授权码(相当于登录密码)。
在这里插入图片描述


2 阿里邮箱配置

1 登录阿里邮箱企业版
2 关闭 禁止使用第三方客户端
在这里插入图片描述
3选择好账户然后开启POP3
在这里插入图片描述


Python 代码编写

阿里企业邮箱为例

## -*- coding: utf-8
import smtplib, ssl
import time
from email.mime.multipart import MIMEMultipart
from email<
<think>嗯,用户问的是Python通过网易邮箱发送邮件时,显示“正在投递中”很久,如何解决。这个问题可能有很多原因,我得一步步分析。 首先,用户可能使用的是SMTP协议发送邮件。网易邮箱常用的有163和126,他们的SMTP服务器地址是smtp.163.com或smtp.126.com,端口通常是465(SSL)或994(TLS)。用户是否正确配置了服务器和端口?如果端口不对,连接可能会超时,导致投递延迟。 然后,检查用户的代码是否有问题。比如,是否启用了SSL或TLS?Python的smtplib库需要正确的安全连接设置。例如,使用SMTP_SSL类或者.starttls()方法。如果这部分代码有误,可能导致连接失败,一直卡在投递中。 接下来,认证信息是否正确?用户的邮箱账号和密码(或授权码)是否正确。尤其是网易邮箱可能需要使用授权码而不是登录密码。如果密码错误,服务器可能不会立即拒绝,而是反复尝试,导致延迟。 另外,邮件内容是否规范?比如发件人、收件人地址格式是否正确,主题和正文是否有特殊字符导致服务器过滤。垃圾邮件策略严格的话,可能会延迟投递或者拦截邮件。 网络问题也可能导致连接超时。用户的网络是否允许访问SMTP服务器的端口?防火墙或ISP可能阻止了连接,可以尝试更换网络环境或者检查防火墙设置。 还有可能是接收方服务器的问题。比如对方邮箱已满、服务器故障等,这时候需要检查是否有退信通知,或者尝试发送到其他邮箱测试。 调试建议方面,用户可以先启用smtplib的调试模式,查看详细的日志信息,找到在哪一步卡住。另外,可以捕获异常,处理超时情况,设置合理的超时时间。或者使用telnet手动测试SMTP服务器是否可达,排除代码问题。 最后,考虑邮件大小限制。如果附件过大,可能会被服务器拒绝或延迟处理,需要检查邮件大小是否符合网易邮箱的限制。 总结下来,解决步骤可能包括检查服务器配置、验证凭据、检查邮件内容、网络测试、查看日志和调试信息。可能需要用户一步步排查,从代码到网络,再到服务器设置,逐一排除可能的原因。</think>以下是针对Python使用网易邮箱发送邮件长时间显示“正在投递中”的排查思路及解决方案: --- ### **一、检查基础配置** 1. **SMTP服务器验证** ```python # 正确配置示例(163邮箱) smtp_server = "smtp.163.com" # 网易邮箱服务器 port = 465 # SSL加密端口(或994 for TLS) sender_email = "yourname@163.com" password = "你的授权码" # 注意:需使用客户端授权码而非登录密码 ``` 2. **代码结构检查** ```python import smtplib from email.mime.text import MIMEText def send_email(): msg = MIMEText("邮件正文内容") msg["Subject"] = "邮件主题" msg["From"] = sender_email msg["To"] = "recipient@example.com" try: # 使用SMTP_SSL连接(推荐) with smtplib.SMTP_SSL(smtp_server, port, timeout=30) as server: server.login(sender_email, password) server.sendmail(sender_email, ["recipient@example.com"], msg.as_string()) print("发送成功") except Exception as e: print(f"发送失败: {str(e)}") ``` --- ### **二、常见问题排查** 1. **授权码问题** - 到网易邮箱网页端 `设置 → POP3/SMTP/IMAP` 中开启SMTP服务并获取**客户端授权码** - 确保代码中使用的密码是授权码而非邮箱登录密码 2. **网络连接限制** - 测试服务器连通性(cmd执行): ```bash telnet smtp.163.com 465 ``` - 若无法连接: - 检查防火墙是否放行465/994端口 - 尝试切换网络环境(如关闭VPN) 3. **邮件内容规范** - 避免使用敏感词(如"test"可能被过滤) - 确保收件人地址格式正确(包含@符号且无空格) - 添加邮件头部信息提升可信度: ```python msg["Message-ID"] = email.utils.make_msgid() msg["Date"] = email.utils.formatdate() ``` --- ### **三、进阶调试方法** 1. **启用SMTP调试模式** ```python server.set_debuglevel(1) # 放在server = SMTP_SSL()之后 ``` 2. **捕获详细异常** ```python except smtplib.SMTPServerDisconnected as e: print("服务器意外断开:", e) except smtplib.SMTPResponseException as e: print(f"SMTP错误代码 {e.smtp_code}: {e.smtp_error.decode()}") except socket.timeout: print("连接超时") ``` 3. **邮件投递状态验证** - 登录网易邮箱网页端 → 已发送邮件 - 若显示"已投递到对方服务器",则问题在接收方 - 若显示"投递中",网易服务器可能仍在重试(最多持续72小时) --- ### **四、特殊场景处理** 1. **附件过大问题** - 单个附件建议不超过20MB - 使用分卷压缩或云存储链接替代大附件 2. **被识别为垃圾邮件** - 在邮件头添加认证标识(SPF/DKIM需域名支持) - 避免使用HTML中的可疑链接 3. **异步发送优化** ```python import threading threading.Thread(target=send_email).start() # 防止主线程阻塞 ``` --- ### **五、替代方案建议** 若持续失败可尝试: 1. 改用其他端口(如587端口+TLS加密) 2. 更换发信服务(如QQ邮箱、阿里云邮件推送) 3. 使用第三方库(如yagmail简化操作): ```python import yagmail yag = yagmail.SMTP(sender_email, password, host='smtp.163.com', port=465) yag.send(to="recipient@example.com", subject="主题", contents="正文") ``` --- 通过以上步骤逐步排查,可解决90%以上的邮件投递延迟问题。如果仍无法解决,建议联系网易邮箱客服提供具体的错误日志(可在调试模式中获得)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值