使用smtplib和MIMEText发送邮件

python使用smtplib和MIMEText发送邮件

原创
2018/10/07 10:17
阅读数 4.2W
                                                                                        </div>

                                                    <div class="article-box__content">
                                                                                            <div class="detail-box">
                                <div class="article-detail">
                                    <div class="content">
                                                                                                                                                                                    <blockquote> 

本章以qq为例,使用前先在邮箱-设置-账户-开通POP3/SMTP服务,需要发送手机验证码,返回一个授权码

 

代码

import smtplib
from email.mime.text import MIMEText
def sendmail(subject, content):
    email_host = 'smtp.qq.com'     # 发送者是qq邮箱
    email_user = '你填写授权码的qq邮箱@qq.com'  # 发送者账号
    email_pwd = '你的授权码'       # 发送者密码
    maillist ='你的接受者账号@qq.com'    # 接收者账号,本来想写成[]list的,但是报错,还没解决!
    me = email_user
msg = MIMEText(content, <span class="hljs-string">'html'</span>, <span class="hljs-string">'utf-8'</span>)    <span class="hljs-comment"># 邮件内容,三个参数:第一个为文本内容,第二个 html 设置文本格式,第三个 utf-8 设置编码</span>
msg[<span class="hljs-string">'Subject'</span>] = subject    <span class="hljs-comment"># 邮件主题</span>
msg[<span class="hljs-string">'From'</span>] = me    <span class="hljs-comment"># 发送者账号</span>
msg[<span class="hljs-string">'To'</span>] = maillist    <span class="hljs-comment"># 接收者账号列表(列表没实现)</span>

smtp = smtplib.SMTP(email_host) <span class="hljs-comment"># 如上变量定义的,是qq邮箱</span>
smtp.login(email_user, email_pwd)   <span class="hljs-comment"># 发送者的邮箱账号,密码</span>
smtp.sendmail(me, maillist, msg.as_string())    <span class="hljs-comment"># 参数分别是发送者,接收者,第三个不知道</span>
smtp.quit() <span class="hljs-comment"># 发送完毕后退出smtp</span>
<span class="hljs-keyword">print</span> (<span class="hljs-string">'email send success.'</span>)

sendmail(‘主题’, ‘内容’) # 调用发送邮箱的函数

demo1.py

# smtp =>simple mail transfer protocol  简单邮件传输协议
import smtplib
import email  # 文件名不可以和引入的库同名
from email.mime.image import MIMEImage  # 图片类型邮件
from email.mime.text import MIMEText  # MIME 多用于邮件扩充协议
from email.mime.multipart import MIMEMultipart  # 创建附件类型

HOST = ‘smtp.qq.com’ # 调用的邮箱借借口
SUBJECT = ‘发送了一封测试邮件’ # 设置邮件标题
FROM = ‘你的授权码邮箱@qq.com’ # 发件人的邮箱需先设置开启smtp协议
TO = ‘发送者qq邮箱@qq.com’ # 设置收件人的邮箱(可以一次发给多个人,用逗号分隔)
message = MIMEMultipart(‘related’) # 邮件信息,内容为空 #相当于信封##related表示使用内嵌资源的形式,将邮件发送给对方

def sendmail(HOST, SUBJECT,FROM,TO,message):
“”"
发送邮件主体到对方邮箱
:发送信息参数说明:
1.内容必须是字符串
2.内容形式,文本类型默认为plain
3.内容编码使用utf-8
:其他:
图片和excel文件需要和本脚本一个目录下
“”"

<span class="hljs-comment"># ===========发送信息内容=============</span>
<span class="hljs-comment"># message_html = MIMEText('shuai123 消灭不开行', 'plain', 'utf-8')</span>
message_html = MIMEText(<span class="hljs-string">'&lt;h1 style="color:red;font-size:100px"&gt;测试信息已收到&lt;/h1&gt;&lt;img src="cid:small"&gt;'</span>, <span class="hljs-string">'html'</span>, <span class="hljs-string">'utf-8'</span>)
message.attach(message_html)

<span class="hljs-comment"># ===========发送图片-=============</span>
<span class="hljs-comment">#发送图片-预览信息</span>
image_data = open(<span class="hljs-string">'email_demo.jpg'</span>, <span class="hljs-string">'rb'</span>)
message_image = MIMEImage(image_data.read())
image_data.close()<span class="hljs-comment"># 关闭刚才打开的文件</span>
message_image.add_header(<span class="hljs-string">'Content-ID'</span>, <span class="hljs-string">'small'</span>)
message.attach(message_image)<span class="hljs-comment"># 添加图片文件到邮件信息中去</span>
<span class="hljs-comment">#发送图片-附件</span>
message_image = MIMEText(open(<span class="hljs-string">'email_demo.jpg'</span>, <span class="hljs-string">'rb'</span>).read(), <span class="hljs-string">'base64'</span>, <span class="hljs-string">'utf-8'</span>)
message_image[<span class="hljs-string">'Content-disposition'</span>] = <span class="hljs-string">'attachment;filename="email_demo_change.jpg"'</span><span class="hljs-comment"># 设置图片在附件当中的名字</span>
message.attach(message_image)<span class="hljs-comment"># 添加图片文件到邮件-附件中去</span>
<span class="hljs-comment"># ===========发送excel-附件=============</span>
message_xlsx = MIMEText(open(<span class="hljs-string">'email_demo.xlsx'</span>, <span class="hljs-string">'rb'</span>).read(), <span class="hljs-string">'base64'</span>, <span class="hljs-string">'utf-8'</span>)<span class="hljs-comment"># 将xlsx文件作为内容发送到对方的邮箱读取excel,rb形式读取,对于MIMEText()来说默认的编码形式是base64 对于二进制文件来说没有设置base64,会出现乱码</span>
message_xlsx[<span class="hljs-string">'Content-Disposition'</span>] = <span class="hljs-string">'attachment;filename="email_demo_change.xlsx"'</span><span class="hljs-comment"># 设置文件在附件当中的名字</span>
message.attach(message_xlsx)<span class="hljs-comment"># 添加excel文件到邮件-附件中去</span>

<span class="hljs-comment"># ===========配置相关-=============</span>
message[<span class="hljs-string">'From'</span>] = FROM <span class="hljs-comment"># 设置邮件发件人</span>
message[<span class="hljs-string">'TO'</span>] = TO <span class="hljs-comment"># 设置邮件收件人</span>
message[<span class="hljs-string">'Subject'</span>] = SUBJECT <span class="hljs-comment"># 设置邮件标题</span>
email_client = smtplib.SMTP_SSL()<span class="hljs-comment"># 获取江建有奖传输协议证书</span>
email_client.connect(HOST, <span class="hljs-string">'465'</span>)<span class="hljs-comment"># 设置发送域名,端口465</span>
result = email_client.login(FROM, <span class="hljs-string">'你的QQ授权码'</span>)  <span class="hljs-comment"># qq授权码</span>
print(<span class="hljs-string">'登录结果'</span>, result)

<span class="hljs-comment"># ===========操作=============</span>
email_client.sendmail(from_addr=FROM, to_addrs=TO.split(<span class="hljs-string">','</span>), msg=message.as_string()) <span class="hljs-comment">#发送邮件指令</span>
email_client.close()<span class="hljs-comment"># 关闭邮件发送客户端</span>

if name == main:
sendmail(HOST=HOST, SUBJECT=SUBJECT,FROM=FROM,TO=TO,message=message)

demo2.py

 

参考文档

1.使用Python来操作邮箱:https://blog.csdn.net/qq_38059635/article/details/81569081

2.python3 发邮件 smtplib & email 库:https://www.cnblogs.com/vivivi/p/5952093.html

展开阅读全文
                                                                                                <div class="tags-box">
                                    <div class="tags-box__inner">
                                        <a class="tag-item" href="https://www.oschina.net/p/python">Python</a>                                        </div>
                                </div>
                            
                                                            <div class="copyright-box">
                                <div class="copyright-box__content">
                                                                                <p>© 著作权归作者所有</p>
                                                                        </div>
                                <div class="copyright-box__extra">
                                    <span class="ban clickable" ban-report="" data-id="2223354" data-obj-type="3" data-url="https://my.oschina.net/u/3018050/blog/2223354"><i class="flag icon"></i>举报</span>
                                </div>
                            </div>

                                                            <div class="action-box">
                                                                        <div class="action-item">
                                                                                    <div class="action-item__button donate" donate="" data-id="2223354" data-obj-type="16344358" data-subject="python使用smtplib和MIMEText发送邮件" data-donater="" data-author="3018050" data-return-url="https://my.oschina.net/u/3018050/blog/2223354" data-notify-url="https://my.oschina.net/action/donate/paySuccess">                                                 <i class="oicon oicon-money-bold"></i>
                                        </div>
                                        <div class="action-item__text">打赏</div>
                                    </div>
                                                                    <div class="action-item">
                                                                            <div class="action-item__button like-btn toggle-article-like " data-id="2223354">
                                        <i class="oicon oicon-thumb-up"></i>
                                    </div>
                                    <div class="action-item__text"><span data-article-like-count="">0</span> 赞</div>
                                </div>
                                <div class="action-item">
                                                                            <div class="action-item__button collect-btn " data-id="2223354" data-user-id="3018050" data-obj-type="3" data-max="99" data-tag-required="" data-current-user-id="" data-recommend-tags="Python" data-uncollected-class="oicon oicon-star" data-collected-class="oicon oicon-star">
                                        <i class="oicon oicon-star"></i>
                                    </div>
                                    <div class="action-item__text"><span data-collect-count="" data-id="2223354" data-obj-type="3">6</span> 收藏</div>
                                </div>
                                <div class="action-item">
                                                                            <div class="osc-share ui floating dropdown" data-tag="share-blog" tabindex="0">
                                        <div class="action-item__button"><i class="oicon oicon-share"></i></div>
                                        <div class="menu" tabindex="-1">
                                            <a class="item" data-platform="wechat" data-value="wechat"><i class="weixin icon"></i>微信</a>
                                            <a class="item" data-platform="qq" data-value="qq"><i class="qq icon"></i>QQ</a>
                                            <a class="item" data-platform="weibo" data-value="weibo"><i class="weibo icon"></i>微博</a>
                                        </div>
                                    </div>
                                    <div class="action-item__text">分享</div>
                                </div>
                            </div>

                                                                                                <div class="recommend-box">
                                    <div class="recommend-box__header">
                                        <h3 class="recommend-box__title">作者的其它热门文章</h3>
                                    </div>
                                    <div class="recommend-box__content">
                                        <div class="item-list">
                                                                                                                                                        <div class="item">
                                                        <a href="https://my.oschina.net/u/3018050/blog/2049912" target="_blank" title="vue开源项目">vue开源项目</a>
                                                    </div>
                                                                                                                                                                                                            <div class="item">
                                                        <a href="https://my.oschina.net/u/3018050/blog/1821742" target="_blank" title="vue的video插件vue-video-player">vue的video插件vue-video-player</a>
                                                    </div>
                                                                                                                                                                                                            <div class="item">
                                                        <a href="https://my.oschina.net/u/3018050/blog/1808448" target="_blank" title="python+opengl显示三维模型小程序">python+opengl显示三维模型小程序</a>
                                                    </div>
                                                                                                                                                                                                            <div class="item">
                                                        <a href="https://my.oschina.net/u/3018050/blog/1798117" target="_blank" title="python,django,pip一些查看版本,升级版本的命令">python,django,pip一些查看版本,升级版本的命令</a>
                                                    </div>
                                                                                                                                            </div>
                                    </div>
                                </div>
                                                        </div>
                    </div>