如何用Python的smtplib从常规Outlook账户发送邮件
使用Python的smtplib发送Outlook邮件的完整解决方案
核心配置信息(Outlook/Office 365)
先明确Outlook官方SMTP服务器的关键参数,这是多数教程遗漏的核心:
- SMTP服务器:
smtp.office365.com - 端口:
587(必须搭配TLS加密使用) - 认证规则:使用你的Outlook邮箱账号+密码登录;若账户开启两步验证,需用应用密码替代原密码
完整可运行代码示例
import smtplib from email.mime.text import MIMEText from email.header import Header # 基础配置 sender = "your_outlook@outlook.com" password = "your_password_or_app_code" # 两步验证用户填应用密码 receiver = "target_email@example.com" # 构建邮件内容 mail_content = MIMEText('这是测试邮件的正文内容', 'plain', 'utf-8') mail_content['From'] = Header('自定义发件人名称', 'utf-8') mail_content['To'] = Header('自定义收件人名称', 'utf-8') mail_content['Subject'] = Header('测试邮件主题', 'utf-8') try: # 连接服务器并发送 smtp_server = smtplib.SMTP('smtp.office365.com', 587) smtp_server.starttls() # 启用TLS加密,必须在login前执行 smtp_server.login(sender, password) smtp_server.sendmail(sender, receiver, mail_content.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败: {str(e)}") finally: smtp_server.quit()
常见问题排查
- 认证失败:开启两步验证的用户,必须登录微软账户后台创建「应用密码」;未开启两步验证的用户,检查密码是否正确,同时确认账户未限制第三方应用登录权限。
- 连接被拒绝/超时:排查本地防火墙或网络是否屏蔽了587端口;公司内网等受限环境可能禁止外部SMTP连接,需联系管理员放行。
- 邮件被归为垃圾邮件:优化邮件主题和内容,避免敏感词汇;若使用自定义域名邮箱,可在域名后台配置DKIM/SPF规则提升邮件可信度。
其他邮件服务器适配示例(以QQ邮箱为例)
切换到其他服务商只需替换对应参数:
- QQ邮箱:SMTP服务器
smtp.qq.com,端口587,需先在邮箱设置中开启POP3/SMTP服务,使用生成的授权码登录
内容的提问来源于stack exchange,提问作者yoni halbe
相关产品推荐
相关产品推荐

