popline收邮件
用poplib把邮件的原始文本下载到本地;
用email解析原始文本,还原为邮件对象。
导入模块
import poplib
设置参数
host = '写入pop3 服务器地址'# pop3 服务器地址
username = '写入登入邮箱' #用户名(邮箱地址)
password = '写入邮箱密码' #密码
连接到POP3服务器
server = poplib.POP3_SSL(host)
print(server.getwelcome())
b'+OK The Microsoft Exchange POP3 service is ready. [UwBIAEEAUABSADAAMQBDAEEAMAAyADAALgBDAEgATgBQAFIAMAAxAC4AcAByAG8AZAAuAHAAYQByAHQAbgBlAHIALgBvAHUAdABsAG8AbwBrAC4AYwBuAA==]'
传递参数进行身份认证
server.user(username)
server.pass_(password) #如果身份验证正确会显示成功登入
b'+OK User successfully logged on.'
查看邮箱的统计资料
- 使用.stat( )方法查看邮箱的统计资料,包括邮件总数和总字节数
stat_mail = server.stat()
print('Messages: %s. Size: %s' % stat_mail)
Messages: 5. Size: 179422
查看所有邮件列表
- 使用 .list( )方法查看邮件列表
resp, mails, octets = server.list() #list方法返回的是一个元组
print(resp)
print('-----------')
print(mails)
print('-----------')
print(octets)
b'+OK 4 157794'
-----------
[b'1 26042', b'2 25357', b'3 44920', b'4 61475']
-----------
36
获取最新的邮件
- 使用 .retr( )方法获取指定索引的邮件的内容
index = len(mails) #注意retr方法的索引是从1开始计算的
resp, lines, octets = server.retr(index) # lines里面一行一行的存储了邮件的原始文本的内容
删除邮件
server.dele(index) #删除指定index的邮件
b'+OK'
smtp发邮件
- SMTP:Simple Mail Transfer Protocol
- Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
纯文本邮件
参数1:邮件正文(hello,world)
参数2:MIME的subtype,传入‘plain’,最终的MIME就是’text/plain’
参数3:代表编码
导入模块
from email.mime.text import MIMEText
from email.header import Header #用来格式化邮件地址
from email.utils import parseaddr, formataddr
import smtplib #用于发邮件
编写正文
msg = MIMEText('hello,你好啊!', 'plain', 'utf-8') #编写邮件正文
输入收发件邮箱,密码和SMTP服务器地址
# 输入Email地址和口令:
from_addr = "填写发送邮件的邮箱"
#输入密码
password = "发邮件的邮箱的密码"
# 输入SMTP服务器地址:这里我们用smtp.partner.outlook.cn,可以根据使用的邮箱类型查
smtp_server = "写入SMTP服务器地址"
# 输入收件人地址:
to_addr = "收件人邮箱"
编辑邮件
#设置发件人,收件人姓名和邮件主题
msg['From'] = formataddr([u'发件人名称',from_addr])
msg['To'] = formataddr([u'收件人名称',to_addr])
msg['Subject'] = Header(u'测试邮件……', 'utf-8').encode() #主题
发送邮件
server = smtplib.SMTP(smtp_server, 587) # SMTP协议默认端口是25,我的是587
server.set_debuglevel(1)#打印出和SMTP服务器交互的所有信息
server.starttls() #更换一种认证方式(如果出错删掉这句)
server.login(from_addr, password)#登录服务器
#发送邮件,这里第二个参数是个列表,可以有多个收件人
#邮件正文是一个str,as_string()把MIMEText对象变成str
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
HTML邮件
- 只需要修改一行代码,把正文换成html格式文本,plain换成html,其他不变
msg = MIMEText('<html><body><h1>Hello</h1>' +
'<p>send by <a href="http://blog.csdn.net/csdn15698845876">csdn</a>...</p>' +
'</body></html>', 'html', 'utf-8')
带附件的邮件
- 带附件的邮件可以看做包含若*分的邮件:文本和各个附件本身,所以,可以构造一个MIMEMultipart对象代表邮件本身,然后往里面加上一个MIMEText作为邮件正文,再继续往里面加上表示附件的MIMEBase对象即可。
导入模块
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr
import smtplib
编辑有附件的邮件
# 输入Email地址和口令:
from_addr = "填写发送邮件的邮箱"
#输入密码
password = "发邮件的邮箱的密码"
# 输入SMTP服务器地址:这里我们用smtp.partner.outlook.cn,可以根据使用的邮箱类型查
smtp_server = "写入SMTP服务器地址"
# 输入收件人地址:
to_addr = "收件人邮箱"
##############----以下这段跟纯文本邮件有区别-----##############
msg = MIMEMultipart() #首先创建一个MIMEMultipart对象
#设置发件人,收件人姓名和邮件主题
msg['From'] = formataddr([u'发件人名称',from_addr])
msg['To'] = formataddr([u'收件人名称',to_addr])
msg['Subject'] = Header(u'测试邮件……', 'utf-8').encode() #主题
# 添加第一个正文部分,邮件正文是MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
filename = ['E:\\file\\1.png','E:\\file\\2.txt', #传入filename列表包含你所要传输的附件的地址
'E:\\file\\3.docx','E:\\file\\4.pdf',
'E:\\file\\5.xlsx','E:\\file\\6.rar',
'E:\\file\\7.py']
for file in filename: #遍历地址并将其添加到邮件对象的附件中
name = file.split("\\")[-1]
part = MIMEApplication(open(file,'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=name)
msg.attach(part) #添加附件
##############----以上这段跟纯文本邮件有区别-----##############
#跟发送纯文本邮件一样发送邮件
server = smtplib.SMTP(smtp_server, 587) # SMTP协议默认端口是25,我使用这个是587
server.set_debuglevel(1)
server.starttls()
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()