详解Python发送邮件实例
Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单。今天,就来好好学习一下使用Python发送邮件吧。
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
1.邮件正文是文本的格式
#-*-coding:UTF-8-*-
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
importsmtplib
importsys
importcsv
importxlrd
frompyExceleratorimport*
importos
importxlwt
fromxlutils.copyimportcopy
importpyExcelerator
importdatetime
importtime
reload(sys)
sys.setdefaultencoding("utf-8")
mailto_list=[""]#邮件接收方的邮件地址
mail_host="smtp.exmail.qq.com"#邮件传送协议服务器
mail_user=""#邮件发送方的邮箱账号
mail_pass=""#邮件发送方的邮箱密码
defsend_mail(to_list,sub,content):
me="天才白痴梦"+"<"+mail_user+">"
msg=MIMEText(content,_subtype='plain',_charset='utf-8')
msg['Subject']=sub#邮件主题
msg['From']=me
msg['To']=";".join(to_list)
try:
server=smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me,to_list,msg.as_string())
server.close()
returnTrue
exceptException,e:
printstr(e)
returnFalse
if__name__=='__main__':
sub="天才白痴梦"
content='...'
ifsend_mail(mailto_list,sub,content):
print"发送成功"
else:
print"发送失败"
2.邮件正文是表格的格式:由于是表格,所以我们选择HTML来实现表格的功能,邮件上面显示的就是HTML实现的内容了。
#-*-coding:UTF-8-*-
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
importsmtplib
importsys
importcsv
importxlrd
frompyExceleratorimport*
importos
importxlwt
fromxlutils.copyimportcopy
importpyExcelerator
importdatetime
importtime
reload(sys)
sys.setdefaultencoding("utf-8")
mailto_list=[""]#邮件接收方的邮件地址
mail_host="smtp.exmail.qq.com"#邮件传送协议服务器
mail_user=""#邮件发送方的邮箱账号
mail_pass=""#邮件发送方的邮箱密码
defsend_mail(to_list,sub,content):
me="天才白痴梦"+"<"+mail_user+">"
#和上面的代码不同的就是,这里我们选择的是html的格式
msg=MIMEText(content,_subtype='html',_charset='utf-8')
msg['Subject']=sub#邮件主题
msg['From']=me
msg['To']=";".join(to_list)
try:
server=smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me,to_list,msg.as_string())
server.close()
returnTrue
exceptException,e:
printstr(e)
returnFalse
if__name__=='__main__':
sub="天才白痴梦"
html='<html></html>'
ifsend_mail(mailto_list,sub,html):
print"发送成功"
else:
print"发送失败"
3.邮件正文是图片的格式:要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。
defsend_mail(to_list,sub,content):
me="天才白痴梦"+"<"+mail_user+">"
msg=MIMEMultipart()
msg['Subject']=sub#邮件主题
msg['From']=me
msg['To']=";".join(to_list)
txt=MIMEText("天才白痴梦",_subtype='plain',_charset='utf8')
msg.attach(txt)
#<b>:黑体<i>:斜体
msgText=MIMEText('<b>Some<i>HTML</i>text</b>andanimage.<imgalt=""src="cid:image1"/>good!','html','utf-8')
msg.attach(msgText)
file1="F:\\1.jpg"
image=MIMEImage(open(file1,'rb').read())
image.add_header('Content-ID','<image1>')
msg.attach(image)
try:
server=smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me,to_list,msg.as_string())
server.close()
returnTrue
exceptException,e:
printstr(e)
returnFalse
if__name__=='__main__':
sub="天才白痴梦"
html='<html></html>'
ifsend_mail(mailto_list,sub,html):
print"发送成功"
else:
print"发送失败"
4.发送邮件附件:邮件附件是图片
defsend_mail(to_list,sub,content):
me="天才白痴梦"+"<"+mail_user+">"
msg=MIMEMultipart()
msg['Subject']=sub#邮件主题
msg['From']=me
msg['To']=";".join(to_list)
txt=MIMEText("天才白痴梦",_subtype='plain',_charset='utf8')
msg.attach(txt)
##<b>:黑体<i>:斜体
#msgText=MIMEText('<b>Some<i>HTML</i>text</b>andanimage.<imgalt=""src="cid:image1"/>good!','html','utf-8')
#msg.attach(msgText)
#
#file1="F:\\1.jpg"
#image=MIMEImage(open(file1,'rb').read())
#image.add_header('Content-ID','<image1>')
#msg.attach(image)
att=MIMEText(open('F:\\1.jpg','rb').read(),'base64','utf-8')
att["Content-Type"]='application/octet-stream'
att["Content-Disposition"]='attachment;filename="1.jpg"'
msg.attach(att)
try:
server=smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me,to_list,msg.as_string())
server.close()
returnTrue
exceptException,e:
printstr(e)
returnFalse
5.发送群邮件:同时发送给多人
mailto_list=[""] #邮件接收方的邮件地址
上面这一行代码是邮件接收方的邮件地址,如果我们需要给多人发送邮件的话,就只需要把对方的邮件帐号绑在这一个列表里就ok了。
加密SMTP
使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。
方法:只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。
smtp_server='smtp.qq.com' smtp_port=25#默认端口号为25 server=smtplib.SMTP(smtp_server,smtp_port) server.starttls() #剩下的代码和前面的一模一样: server.set_debuglevel(1)#打印出和SMTP服务器交互的所有信息
以上就是关于Python发送邮件详细解析,希望对大家的学习有所帮助。