python发邮件函数,python发电子邮件

python电子邮件系列(三)之POP接收邮件

由上篇文章我们已经得知邮件从发送到接收的过程:

公司主营业务:网站制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出建水免费做网站回馈大家。

发件人-MUA-MTA-若干MTA-MDA-MUA-收件人

本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。

收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。

回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。

因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。

所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。

所以,邮件收取的流程就是:

由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:

纯文本:

str-bytes-base64-str-bytes

二进制文件:

binary code-base64-str-bytes

我们解析邮件也是按这个思路,逆序解析出内容。

这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。

先从上一节结构化的 msg 中取出信件头,打印出来。

如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。

不是 multipart 时,之后再依据 Content-Type 作不同处理:

如果是 text :

利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。

再 guess_charset 猜出编码方式,之后将其解码为字符显示。

如果不是 Text 对象,则为附件:

打印出附件的 Content-Type 。

如何用Python发邮件

Python发送邮件简单的实例:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import smtplib

from email.mime.text import MIMEText

from email.header import Header

sender = 'from@runoob.com'

receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')

message['From'] = Header("菜鸟教程", 'utf-8')

message['To'] = Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'

message['Subject'] = Header(subject, 'utf-8')

try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, receivers, message.as_string())

print "邮件发送成功"

except smtplib.SMTPException:

print "Error: 无法发送邮件"

用Python发送邮件,可以群发,带有多个附件

''''' 

函数说明:Send_email_text() 函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,mp3等 

参数说明: 

1. subject:邮件主题 

2. content:邮件正文 

3. filepath:附件的地址, 输入格式为["","",...] 

4. receive_email:收件人地址, 输入格式为["","",...] 

'''  

def Send_email_text(subject,content,filepath,receive_email):  

import smtplib  

from email.mime.multipart import MIMEMultipart   

from email.mime.text import MIMEText   

from email.mime.application import MIMEApplication  

sender = "发送方邮箱"  

passwd = "填入发送方密码"  

receivers = receive_email   #收件人邮箱  

msgRoot = MIMEMultipart()   

msgRoot['Subject'] = subject  

msgRoot['From'] = sender  

if len(receivers)1:  

msgRoot['To'] = ','.join(receivers) #群发邮件  

else:  

msgRoot['To'] = receivers[0]  

part = MIMEText(content)   

msgRoot.attach(part)  

##添加附件部分  

for path in filepath:  

if ".jpg" in path:  

#jpg类型附件  

jpg_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=jpg_name)  

msgRoot.attach(part)  

if ".pdf" in path:  

#pdf类型附件  

pdf_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=pdf_name)   

msgRoot.attach(part)  

if ".xlsx" in path:  

#xlsx类型附件  

xlsx_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=xlsx_name)  

msgRoot.attach(part)  

if ".txt" in path:  

#txt类型附件  

txt_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())  

part.add_header('Content-Disposition', 'attachment', filename=txt_name)  

msgRoot.attach(part)  

if ".mp3" in path:  

#mp3类型附件  

mp3_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=mp3_name)   

msgRoot.attach(part)  

try:  

s = smtplib.SMTP()  

s.connect("smtp.mail.aliyun.com") #这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com  

s.login(sender, passwd)  

s.sendmail(sender, receivers, msgRoot.as_string())  

print ("邮件发送成功")  

except smtplib.SMTPException as e:  

print("Error, 发送失败")  

finally:  

s.quit()

如何在python程序中发邮件

提供以下两种方式:

利用smtplib,email库

coding:utf-8

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import sys

reload(sys)

sys.setdefaultencoding("utf8")

# 配置收发件人

recvaddress = ['receiveemail@sina.com','receiveemail@qq.com']

# 163的用户名和密码

sendaddr_name = 'your_email@163.com'

sendaddr_pswd = 'your_password'

class SendMail:

def __init__(self,recver=None):

"""接收邮件的人:list or tuple"""

if recver is None:

self.sendTo = recvaddress

else:

self.sendTo = recver

def send(self,sub,content,attachcontent):

"""发送邮件"""

self.msg = MIMEMultipart()

#设置发送邮件

self.msg['from'] = sendaddr_name

try:

#设置邮箱服务器

smtp = smtplib.SMTP('smtp.163.com',25)

#登录

smtp.login(sendaddr_name,sendaddr_pswd)

#设置发送主题

self.msg['Subject'] = sub

#设置邮件内容

self.msg.attach(MIMEText(content))

#设置邮件附件,将附件的内容attachcontent,写到filename的文件中,作为附件发送

att1 = MIMEText(attachcontent, 'base64', 'gb2312')

att1["Content-Type"] = 'application/octet-stream'

att1["Content-Disposition"] = 'attachment; filename="testattach.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字

self.msg.attach(att1)

#发送邮件

smtp.sendmail(self.msg['from'], self.sendTo, self.msg.as_string())

smtp.close()

print(u"发送邮件成功")

except Exception,e:

print(u'发送邮件失败:'+str(e))

raise

#调用

s = SendMail()

subject = "主题"

content = "这里是邮件内容"

attachcontent = "这里是附件哦"

s.send(subject,content,attachcontent)

2.利用webpy自带的email模块

首先要安装web.py的依赖库

pip install web.py

#coding:utf-8

import web

##### email服务器配置 #####

web.config.smtp_server = 'smtp.sina.com'

web.config.smtp_port = 25

web.config.smtp_username = '你的email前缀,@前的字符串'

web.config.smtp_password = '你的密码'

web.config.smtp_starttls = True

send_from="youremail@sina.com"

receiveemailaddr = ["receiveemail@qq.com","receiveemail@163.com"]

subject=u'这里是主题'

message=u'这里是邮件的内容' 

def sendemail(sendfrom,sendto,subject,message,cc=None, bcc=None,headers=({'User-Agent': 'webpy.sendmail', 'X-Mailer': 'webpy.sendmail',})):

try:

 web.sendmail(send_from,sendto,subject,message,cc=cc,bcc=bcc)

 print "邮件发送成功"

except Exception,e:

print(str(e))

#调用

sendemail(send_from,receiveemailaddr,subject,message)


当前题目:python发邮件函数,python发电子邮件
链接URL:http://hbruida.cn/article/hoeeid.html