python网络编程之smtp和pop3的应用

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

首先,我们来构造一个最简单的纯文本邮件:

from email.mime.text import MIMEText
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

注意到构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入’plain’,最终的MIME就是’text/plain’,最后一定要用utf-8编码保证多语言兼容性。[1]

收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3。

Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件。

注意到POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本。

要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象。

所以,收取邮件分两步:

第一步:用poplib把邮件的原始文本下载到本地;

第二部:用email解析原始文本,还原为邮件对象。[2]

综合应用实例:

import smtplib
from email.mime.text import MIMEText
from email.mime.message import MIMEMessage
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import poplib
#生成带有html格式的邮件内容
username=‘215658134@qq.com’
password=‘qvcbgvqyiqzzbies’

def makeHtmlMail():
email=MIMEMultipart(‘alternative’)
text=MIMEText('第一封邮件\n ',‘plain’)
html=MIMEText(‘

hello!

’,‘html’)
email.attach(html)
email.attach(text)
return email
def makeImgMail(fn):
f=open(fn,‘rb’)
data=f.read()
f.close()
image=MIMEImage(data,name=fn)
image.add_header(‘Connect-Dispostion’,‘attachment;filename="%s"’%fn)
return image
def sendmail(user,passwd,touser,msg):
server=smtplib.SMTP(‘smtp.qq.com’)
print(“正在登录”)
server.login(user,passwd)
print(“登录成功”)
server.sendmail(user,touser,msg.as_string())
print(“发送成功”)

def pop3Obtain(user,passwd):
pop3server=poplib.POP3(‘pop.qq.com’)
pop3server.set_debuglevel(1)
pop3server.user(user)
pop3server.pass_(passwd)
print(“已登录pop3服务器”)
resp,mails,octets=pop3server.list()
index=len(mails)
rsp,lines,size=pop3server.retr(index)
msg_content=b’\r\n’.join(lines).decode(‘utf-8’)
print(msg_content)

if name==‘main’:
print(“等待发送邮件”)
‘’’
user=input(“发送人:”)
passwd=input(“发送人密码:”)
touser=input(“收件人密码:”)
‘’’
user=‘215658134@qq.com’
touser=‘2463822717@qq.com’
passwd=‘qvcbgvqyiqzzbiea’
i=int(input(‘发送html格式邮件(0) or 发送图片附件(1)?’))
if i == 0:
msg = makeHtmlMail()
print(“geshi1:”, type(msg))
msg[‘From’] = user
msg[‘To’] = touser
msg[‘Subject’] = ‘测试邮件’ # 邮件的主题
elif i ==1:
fn=input(“附件图片地址:”)
if not fn:
fn=‘C:\Users\21565\Desktop\垃圾代码\ceshi.png’
msg = makeImgMail(fn)
msg[‘From’]=user
msg[‘To’]=passwd
msg[‘Subject’]=‘图片测试’
sendmail(user,passwd,touser,msg)
pop3Obtain(user,passwd)

[1]文本来源:https://www.liaoxuefeng.com/wiki/897692888725344/923057144964288
[2]文本来源:
https://www.liaoxuefeng.com/wiki/897692888725344/967961517614816

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值