python应用系列教程——python使用smtp上传邮件,使用pop3下载邮件

全栈工程师开发手册 (作者:栾鹏)
python教程全解


python使用smtp上传邮件,使用pop3下载邮件。由于上传后立刻下载了,所以有时不会再在网页邮箱中有通知。

可设置邮件的收发人,主题,内容。并以163邮件为例,使用smtp发送了一个普通文本邮件,使用pop3协议读取了邮件列表,并下载了第一个邮件,并进行了解析,分别在python2.7和python3.6下进行试验。

python2.7下代码

#coding:utf-8

from smtplib import SMTP
from poplib import POP3
from time import sleep

print("=====================SMTP发邮件和POP3收邮件=====================");

SMTPSVR = 'smtp.163.com'  #smtp服务器地址
POP3SVR = 'pop.163.com'  #pop3服务器地址
SENDER="aaaaaaa@163.com"                           #用户名,换成自己的
PASSWORD="aaaaaaa"                             #密码,换成自己的
RECIPS=["aaaaaaa@163.com"]      #这里接收人也设置为自己
origmsg = '''\
From: %(who)s
To: %(who)s
Subject: first test

Hello World!
''' % {'who': SENDER}


#使用SMTP完成邮件的发送
sendSvr = SMTP(SMTPSVR)   #创建一个smtp发送对象
sendSvr.login(SENDER, PASSWORD)  # 登录操作
errs = sendSvr.sendmail(SENDER,RECIPS,origmsg) #参数:发件人,收件人,邮件整体(消息头和消息体的字符串表示)
sendSvr.quit()
assert len(errs) == 0, errs  #,assert返回为假就会触发异常
print("smtp发送邮件完成")
sleep(10)    # 睡眠10秒钟,等待邮件被投递,让服务器完成消息的发送和接收。sleep单位秒


#使用pop3完成邮件的获取
recvSvr = POP3(POP3SVR)  #创建一个pop3接收对象
recvSvr.user(SENDER)  #设置用户名
recvSvr.pass_(PASSWORD)  #设置密码
emailist = recvSvr.stat()  #获取邮件列表
rsp, msg, siz = recvSvr.retr(emailist[0]) #下载第一个邮件
sep = msg.index('')  #邮件头和邮件正文使用空白行进行分割,这里定位空白行的位置.是不是应该是定位\n
recvBody = msg[sep+1:]  #根据空白行获取邮件正文
print(recvBody)
print("pop3接收邮件完成")

python3.6下由于默认字符串为unicode,而邮件发送参数只接收str的字符串,所以再发送前先将字符串从unicode转化为str

python3.6下代码如下

#coding:utf-8

from smtplib import SMTP
from poplib import POP3
from time import sleep

print("=====================SMTP发邮件和POP3收邮件=====================");

SMTPSVR = 'smtp.163.com'  #smtp服务器地址
POP3SVR = 'pop.163.com'  #pop3服务器地址
SENDER="aaaaaaa@163.com"                           #用户名,换成自己的
PASSWORD="aaaaaaa"                             #密码,换成自己的
RECIPS=["aaaaaaa@163.com"]      #这里接收人也设置为自己
origmsg = '''\
From: %(who)s
To: %(who)s
Subject: first test

Hello World!
''' % {'who': SENDER}

#使用SMTP完成邮件的发送
sendSvr = SMTP(SMTPSVR)   #创建一个smtp发送对象
sendSvr.login(SENDER, PASSWORD)  # 登录操作
errs = sendSvr.sendmail(SENDER,RECIPS,origmsg) #参数:发件人,收件人,邮件整体(消息头和消息体的字符串表示)
sendSvr.quit()
assert len(errs) == 0, errs  #,assert返回为假就会触发异常
print("smtp发送邮件完成")
sleep(10)    # 睡眠10秒钟,等待邮件被投递,让服务器完成消息的发送和接收。sleep单位秒


#使用pop3完成邮件的获取
recvSvr = POP3(POP3SVR)  #创建一个pop3接收对象
recvSvr.user(SENDER)  #设置用户名
recvSvr.pass_(PASSWORD)  #设置密码
emailist = recvSvr.stat()  #获取邮件列表
rsp, msg, siz = recvSvr.retr(emailist[0]) #下载第一个邮件
print(msg)
#sep = msg.index('')  #查找列表中""空白元素,空白元素后面为邮件正文
#recvBody = msg[sep+1:]  #根据空白元素定位获取邮件正文
print("pop3接收邮件完成")

本文只试验了163邮件,读者可以按下面的主机地址,试验其他邮箱。但并不是每种邮箱都能成功。

gmail(google.com)
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)

21cn.com:
POP3服务器地址:pop.21cn.com(端口:110)
SMTP服务器地址:smtp.21cn.com(端口:25)

sina.com:
POP3服务器地址:pop3.sina.com.cn(端口:110)
SMTP服务器地址:smtp.sina.com.cn(端口:25)

tom.com:
POP3服务器地址:pop.tom.com(端口:110)
SMTP服务器地址:smtp.tom.com(端口:25)

163.com:
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)

263.net:
POP3服务器地址:pop3.263.net(端口:110)
SMTP服务器地址:smtp.263.net(端口:25)

yahoo.com:
POP3服务器地址:pop.mail.yahoo.com
SMTP服务器地址:smtp.mail.yahoo.com

263.net.cn:
POP3服务器地址:pop.263.net.cn(端口:110)
SMTP服务器地址:smtp.263.net.cn(端口:25)

Foxmail:
POP3服务器地址:POP.foxmail.com(端口:110)
SMTP服务器地址:SMTP.foxmail.com(端口:25)

sinaVIP
POP3服务器:pop3.vip.sina.com (端口:110)
SMTP服务器:smtp.vip.sina.com (端口:25)

sohu.com:
POP3服务器地址:pop3.sohu.com(端口:110)
SMTP服务器地址:smtp.sohu.com(端口:25)

etang.com:
POP3服务器地址:pop.etang.com
SMTP服务器地址:smtp.etang.com

x263.net:
POP3服务器地址:pop.x263.net(端口:110)
SMTP服务器地址:smtp.x263.net(端口:25)

yahoo.com.cn:
POP3服务器地址:pop.mail.yahoo.com.cn(端口:995)
SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587)
雅虎邮箱POP3的SSL不启用端口为110,POP3的SSL启用端口995;SMTP的SSL不启用端口为25,SMTP的SSL启用端口为465

QQ邮箱 QQ企业邮箱
POP3服务器地址:pop.qq.com(端口:110) POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:smtp.qq.com (端口:25) SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)
SMTP服务器需要身份验证

126邮箱 HotMail
POP3服务器地址:pop.126.com(端口:110) POP3服务器地址:pop.live.com (端口:995)
SMTP服务器地址:smtp.126.com(端口:25) SMTP服务器地址:smtp.live.com (端口:587)

china.com: 139邮箱
POP3服务器地址:pop.china.com(端口:110) POP3服务器地址:POP.139.com(端口:110)
SMTP服务器地址:smtp.china.com(端口:25) SMTP服务器地址:SMTP.139.com(端口:25)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值