一、发送电子邮件

python标准库提供了smtplib,用于实现smtp协议发送邮件。标准库还提供email模块帮助我们构建邮件格式。smtp(simple mail transfer protocol,即简单邮件传输协议),是一组有源地址到目的地址传送邮件的规则,用来控制信件的中转方式。

  • 获取qq邮箱密码(授权码)

 

二、发送纯文本格式的邮件

import smtplib

from email.mime.text import mimetext
from email.header import header

# 邮箱用户名
sender = 'dad@qq.com'(输入你的邮箱)
# 邮箱密码(部分邮箱为授权码)
password = '123456'(输入你的密码)
# 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
# 邮件正文
text = 'hello,baby'
message = mimetext(text, 'plain', 'utf-8')
# 发件人显式的名字
message['from'] = header('拿头来坚持', 'utf-8')
# 收件人显式的名字
message['to'] = header('baby', 'utf-8')
# 邮件标题
message['subject'] = '爸爸来信,请接收!'

try:
    # 使用qq企业邮箱服务器发送
    smtp = smtplib.smtp('smtp.qq.com')
    # 登录
    smtp.login(sender, password)
    # 发送
    smtp.sendmail(sender, receiver, message.as_string())
    print('邮件发送成功!')
    # 退出服务器
    smtp.quit()
except smtplib.smtpexception as e:
    print('error!邮件发送失败!', e)

发送纯文本格式的邮件执行结果:

三、发送html格式的邮件

import smtplib

from email.mime.text import mimetext
from email.header import header

# 邮箱用户名
sender = 'dad@qq.com'(输入你的邮箱)
# 邮箱密码(部分邮箱为授权码)
password = '123456'(输入你的密码)
# 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
# 邮件正文
msg = '''
    <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
          life goes on, learning goes on
        </p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被访问量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原创文章</div></a></li> <li data-v-d1dbb6f8><a href="https://blog.csdn.net/rank/list/total" rel="external nofollow"  rel="external nofollow"  target="_blank" data-report-click="{&quot;spm&quot;:&quot;3001.5476&quot;}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉丝数量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入csdn</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>获得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
        <div>获得<span>212</span>次点赞</div>
      </li><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
        <div>内容获得<span>111</span>次评论</div>
      </li><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
        <div>获得<span>562</span>次收藏</div>
      '''
# 指定消息体使用html格式
message = mimetext(msg, 'html', 'utf-8')
# 发件人显式的名字
message['from'] = header('拿头来坚持', 'utf-8')
# 收件人显式的名字
message['to'] = header('baby', 'utf-8')
# 邮件标题
message['subject'] = '爸爸来信,请接收!'

try:
    # 使用qq企业邮箱服务器发送
    smtp = smtplib.smtp('smtp.qq.com')
    # 登录
    smtp.login(sender, password)
    # 发送
    smtp.sendmail(sender, receiver, message.as_string())
    print('邮件发送成功!')
    # 退出服务器
    smtp.quit()
except smtplib.smtpexception as e:
    print('error!邮件发送失败!', e)

发送html格式的邮件的执行结果:

四、发送带附件的邮件

import smtplib

from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.header import header

# 邮箱用户名
sender = 'dad@qq.com'(输入你的邮箱)
# 邮箱密码(部分邮箱为授权码)
password = '123456'(输入你的密码)
# 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
# 指定消息体使用复合类型
message = mimemultipart()
# 发件人显式的名字
message['from'] = header('拿头来坚持', 'utf-8')
# 收件人显式的名字
message['to'] = header('baby', 'utf-8')
# 邮件标题
message['subject'] = '爸爸来信,请接收!'
# 邮件正文
msg = '''
    <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
          life goes on, learning goes on
        </p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被访问量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原创文章</div></a></li> <li data-v-d1dbb6f8><a href="https://blog.csdn.net/rank/list/total" rel="external nofollow"  rel="external nofollow"  target="_blank" data-report-click="{&quot;spm&quot;:&quot;3001.5476&quot;}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉丝数量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入csdn</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>获得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
        <div>获得<span>212</span>次点赞</div>
      </li><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
        <div>内容获得<span>111</span>次评论</div>
      </li><li data-v-d487ed78>
        <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
        <div>获得<span>562</span>次收藏</div>
      '''
# 邮件附加html文件
message.attach(mimetext(msg, 'html', 'utf-8'))
# 添加附件
attached_file = mimetext(open(__file__, encoding='utf-8').read(), 'base64', 'utf-8')
# 指定附件的文件名和原先的文件不一样
attached_file['content-disposition'] = 'attachment;filename="mail.py"'
# 邮件附加附件
message.attach(attached_file)
try:
    # 使用qq企业邮箱服务器发送
    smtp = smtplib.smtp('smtp.qq.com')
    # 登录
    smtp.login(sender, password)
    # 发送
    smtp.sendmail(sender, receiver, message.as_string())
    print('邮件发送成功!')
    # 退出服务器
    smtp.quit()
except smtplib.smtpexception as e:
    print('error!邮件发送失败!', e)

发送带附件的邮件执行结果:

五、发送图片的邮件

import smtplib

from email.mime.text import mimetext
from email.mime.image import mimeimage
from email.mime.multipart import mimemultipart
from email.header import header

# 邮箱用户名
sender = 'dad@qq.com'(输入你的邮箱)
# 邮箱密码(部分邮箱为授权码)
password = '123456'(输入你的密码)
# 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
# 利用related定义内嵌资源的邮件体
message = mimemultipart('related')
# 发件人显式的名字
message['from'] = header('拿头来坚持', 'utf-8')
# 收件人显式的名字
message['to'] = header('baby', 'utf-8')
# 邮件标题
message['subject'] = '爸爸来信,请接收!'
# 邮件正文
content = mimemultipart('alternative')
# html内容
msg = '''
    <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
          life goes on, learning goes on
    <p>
    拿头来坚持的个人主页
    <img src='cid:img01'>
    </p>
      '''
# 邮件附加html文件
message.attach(mimetext(msg, 'html', 'utf-8'))
# 添加图片
with open('csdn.png', 'rb') as f:
    img01 = mimeimage(f.read())
# 定义资源的名字为img01
img01.add_header('content-id', 'img01')
# 邮件附加图片
message.attach(img01)
try:
    # 使用qq企业邮箱服务器发送
    smtp = smtplib.smtp('smtp.qq.com')
    # 登录
    smtp.login(sender, password)
    # 发送
    smtp.sendmail(sender, receiver, message.as_string())
    print('邮件发送成功!')
    # 退出服务器
    smtp.quit()
except smtplib.smtpexception as e:
    print('error!邮件发送失败!', e)

发送图片的邮件执行结果:

六、接收电子邮件

接受邮件有两种常用的协议:pop3和imap协议

pop3协议(post office protocol-version3,即邮局协议版本3):允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等)不会反馈到服务器上,比如通过客户端收取了邮箱的3封邮件并移动到其他文件夹,邮件服务器上的这些邮件不会被同步移动。

imap协议(internet mail access protocol,即internet邮件访问协议):提供webmail与电子邮件客户端之间的双向通信,任何在客户端做的改变都会同步到服务器上。在客户端对邮件进行了操作,服务器上的邮件也会进行相应的操作。

七、使用pop3协议下载邮件

import poplib

from email.parser import parser

# 登录邮箱的用户名
username = 'baby@qq.com'(输入你的邮箱)
# 登录邮箱的密码(部分邮箱为授权码)
password = '123456'(输入你的密码)
# 连接邮箱服务器
pop_server = poplib.pop3('pop.qq.com')
# 打印出邮箱服务器的欢迎文字
print(pop_server.getwelcome())
# 登录邮箱服务器
pop_server.user(username)
pop_server.pass_(password)
# 打印出当前账号的状态,第一个返回值为邮件数,第二个返回值为占用空间
print('server stat', pop_server.stat())
# 获取所以邮件列表
resp, mails, octets = pop_server.list()
print(mails)
# 获取最新的一封邮件(序列号最大的),邮件索引从1开始计数
index = len(mails)
resp, lines, octets = pop_server.retr(index)
content = b'\r\n'.join(lines).decode('utf-8')
# 解析出邮件
msg = parser().parsestr(content)
# 可以根据邮件索引号直接从服务器删除邮件
# pop_server.dele(index)
# 关闭连接
pop_server.quit()

执行结果:

b’+ok xmail pop3 server v1.0 service ready(xmail v1.0)’
server stat (15, 50814)
[b’1 1255′, b’2 1286′, b’3 1310′, b’4 1398′, b’5 1458′, b’6 1450′, b’7 1602′, b’8 1633′, b’9 5001′, b’10 2347′, b’11 2371′, b’12 2267′, b’13 5033′, b’14 5077′, b’15 17326′]

如果正确连接上服务器并且列出邮件数量,说明我们已经正确使用了pop3协议。

到此这篇关于python基础详解之邮件处理的文章就介绍到这了,更多相关python邮件处理内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!