python 实现使用163邮箱发送有图片的邮件

周末温习下python,正好最近在做监控,想着 给163邮箱发邮件,记录下来,方便备查。

邮件发送必须要知道邮件的 传输协议 SMTP
SMTP (Simple Mail Transfer Proctol)即简单邮件传输协议,它是一组用于从源地址到目的地址传输邮件的协议,控制信件的中转方式。其默认端口是25。

在这里插入图片描述
本次使用的是163邮箱发送消息,需要获取 163 客户端的授权码,登录163邮箱执行以下操作。
在这里插入图片描述
用绑定的手机号,发送 9988 到指定的平台 验证消息。验证成功会生成 授权码 ,在下面的程序中会使用。
在这里插入图片描述

在 python 语言中支持 SMPT 的有 smtplibemail 两个模块
smtplib 负责发送邮件
email 负责构造邮件

发送邮件的完整代码如下所示

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

mail_text = 'hello,终于等到你,欢迎来到我的博客' # 邮件内容
mail_host = 'smtp.163.com' # 邮件服务器
mail_user = 'vip_***@163.com' # 发送邮件的用户
mail_pass = 'CBDVAAYHBKVTRRBC' # 客户端密码,注意不是登录密码
sender = 'vip_***@163.com' # 发送地址
receivers = ['9619*****@qq.com'] # 接收地址,可以是多个
# 拼接
textApart = MIMEText(mail_text, 'plain', 'utf-8')

# 构建邮件
msg = MIMEMultipart()
msg.attach(textApart)
msg['From'] = sender  #发送人
msg['To'] = receivers[0]
msg['Subject'] = '消息提醒' #邮件主题

try:
    smtp_obj = smtplib.SMTP()
    smtp_obj.connect(mail_host, 25) # 25端口
    smtp_obj.login(mail_user, mail_pass)
    # 邮件发送
    smtp_obj.sendmail(sender, receivers, msg.as_string())
    smtp_obj.quit()
    print('当前邮件成功发送!')
except smtplib.SMTPException as e:
    print('当前邮件发送失败', e)  # 打印错误

运行程序,即可发送邮件。成功结果如下所示。
在这里插入图片描述
以上内容是没有样式的文字,字数多的话是不太好看,那怎么发送好看,并且可以带照片的邮件呢?
修改两处
第一、将邮件的内容拼接成 html 格式,发送成功后在页面能自动解析;
第二、修改 MIMEText 传输的方式为 html

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

mail_text = '''<h5> hello,终于等到你,欢迎来到我的博客</h5><p> 用心甘情愿的态度,过随遇而安的生活!<p> 欢迎关注我的个人公众号,分享北漂生活  
<a href="https://img-blog.csdnimg.cn/ab1244a267e94c65bf1aee43f0cb964d.png"> 搜一搜哦~ </a> </p></p>'''  # 邮件内容
mail_host = 'smtp.163.com' # 邮件服务器
mail_user = 'vip_***@163.com' # 发送邮件的用户
mail_pass = 'CBDVAAYHBKVTRRBC' # 客户端密码,注意不是登录密码
sender = 'vip_***@163.com' # 发送地址
receivers = ['9619******@qq.com'] # 接收地址,可以是多个
# 这里是类型使用的是 html 
textApart = MIMEText(mail_text, 'html', 'utf-8')

# 构建邮件
msg = MIMEMultipart()
msg.attach(textApart)
msg['From'] = sender  #发送人
msg['To'] = receivers[0]
msg['Subject'] = '消息提醒' #邮件主题

try:
    smtp_obj = smtplib.SMTP()
    smtp_obj.connect(mail_host, 25)
    smtp_obj.login(mail_user, mail_pass)
    # 邮件发送
    smtp_obj.sendmail(sender, receivers, msg.as_string())
    smtp_obj.quit()
    print('当前邮件成功发送!')
except smtplib.SMTPException as e:
    print('当前邮件发送失败', e)  # 打印错误

发送成功的结果如下图所示。
在这里插入图片描述
邮件正文中 换行和链接都自动解析,如下图所示。
在这里插入图片描述

总结

对于 qq 邮箱发送邮件,处理步骤都是类似的。
第一步、获取 客户端的密码,设置中开启SMTP服务,发短信验证
第二步、修改相应的参数,如 服务器地址 smtp.exemail.qq.com

下面是qq邮箱 开启SMTP服务记录
在这里插入图片描述
发送短信到指定的平台
在这里插入图片描述
接收到授权码,复制,准备在程序中使用。
在这里插入图片描述

可能遇到的错误

1、socket.gaierror:[Errno 11001] getaddrinfo failed
解决方案:查看地址前面是否有空格
2、Unexpected indent
解决方案:查看代码中 函数或者变量的缩进,可能是有空格

参考博客

【1】https://blog.csdn.net/weixin_40475396/article/details/78693408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值