python 发送邮件的两种方式【终极篇】

python 发送邮件的两种方式【终极篇】

一,利用python自带的库 smtplib简单高效

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
import smtplib
from django.conf import settingsmail_host = settings.EMAIL_HOSTmail_user = settings.EMAIL_HOST_USERmail_pass = settings.EMAIL_HOST_PASSWORDsubject = subjectsender = settings.EMAIL_FROMreceiver = settings.TEST_EMAIL_TOmsg = MIMEMultipart()part = MIMEText(str(data), 'html')msg.attach(part)msg['from'] = Header('标题,也可以写邮箱账号', 'utf-8')msg['Subject'] = Header(subject, 'utf-8')msg["Accept-Language"] = "zh-CN"msg["Accept-Charset"] = "ISO-8859-1,utf-8"try:server = smtplib.SMTP()server.connect(mail_host)server.login(mail_user, mail_pass)server.sendmail(sender, receiver, msg.as_string())server.quit()except Exception:logger.error(msg=traceback.format_exc())

二,django邮件功能的使用

#settings.py:
# qq IMAP/SMTP 配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 25  # 或者 465/587是设置了 SSL 加密方式
# 发送邮件的邮箱
EMAIL_HOST_USER = ‘你的邮箱’
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = ‘你的IMAP授权码’  # 如果重新设置了新的授权码,直接使用最新的授权码即可
EMAIL_USE_TLS = True  # 这里必须是 True,否则发送不成功
# 收件人看到的发件人, 必须是一直且有效的
EMAIL_FROM = ‘Tencent<你的邮箱>'
"""
# qq POP3/SMTP 配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 110  # 或者 995是设置了 SSL 加密方式
#发送邮件的邮箱
EMAIL_HOST_USER = '你的qq邮箱'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '你的pop3授权码'  # 如果重新设置了新的授权码,直接使用最新的授权码即可
EMAIL_USE_TLS = True  # 这里必须是 True,否则发送不成功
#收件人看到的发件人
EMAIL_FROM = ‘Tencent<xxx@qq.com>’
"""from django.core.mail import send_mail
from django.core.mail import EmailMultiAlternatives
#send mail
def send_email(file_path, total, typical, dts):html_content = loader.render_to_string('email.html',{'dts': dts,'total': total,'typical': typical})email = EmailMultiAlternatives('title', html_content, settings.EMAIL_FROM, settings.EMAIL_TO)email.attach_file(file_path)email.content_subtype = "html"email.send()

 三、发送带图片和附件的邮件

 1 import os
 2 import datetime
 3 import smtplib
 4 import logging
 5 import traceback
 6 from email.mime.multipart import MIMEMultipart
 7 from email.mime.image import MIMEImage
 8 from email.mime.text import MIMEText
 9 from email.header import Header
10 
11 def send_img_mail(data, subject, recivers, attach_file=None):
12     base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
13     mail_host = settings.EMAIL_HOST
14     mail_user = settings.EMAIL_HOST_USER
15     mail_pass = settings.EMAIL_HOST_PASSWORD
16     subject = subject
17     sender = settings.EMAIL_FROM
18     receiver = recivers
19 
20     msg = MIMEMultipart()
21     msg.attach(MIMEText(str(data), 'html'))
22 
23     with open(os.path.join(base_dir, 'dist/static/img/zk_header.png'), 'rb') as f:
24         msgImage = MIMEImage(f.read())
25     msgImage.add_header('Content-ID', '<image1>')
26     msg.attach(msgImage)
27 
28     with open(os.path.join(base_dir, 'dist/static/img/zk_footer.jpg'), 'rb') as f:
29         msgImage = MIMEImage(f.read())
30     msgImage.add_header('Content-ID', '<image2>')
31     msg.attach(msgImage)
32 
33     if attach_file:
34         last_month = datetime.datetime.today() - relativedelta(months=1)
35         attachment = MIMEText(open(attach_file, 'rb').read(), 'base64', 'gb2312')
36         attachment["Content-Type"] = 'application/octet-stream'
37         attachment["Content-Disposition"] = 'attachment; filename="XXX产品{0}月新增XX问题.xls"'. \
38             format(last_month.month)
39         msg.attach(attachment)
40 
41     msg['from'] = Header('XXXXXX', 'utf-8')
42     msg['Subject'] = Header(subject, 'utf-8')
43     msg["Accept-Language"] = "zh-CN"
44     msg["Accept-Charset"] = "ISO-8859-1,utf-8"
45 
46     try:
47         server = smtplib.SMTP()
48         server.connect(mail_host)
49         server.login(mail_user, mail_pass)
50         server.sendmail(sender, receiver, msg.as_string())
51         server.quit()
52     except Exception:
53         logger.error(msg=traceback.format_exc())

html文件格式:

<img src="cid:image1">
<img src="cid:image2">
View Code

 

posted on 2018-07-05 15:28 _潜行者 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wangwei916797941/p/9268561.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络爬虫--2.HTTP和HTTPS

文章目录一.简介二.HTTP的请求与响应三.客户端HTTP请求1.格式2.请求方法四.常用的请求报头1.Host (主机和端口号)2.Connection (链接类型)3.Upgrade-Insecure-Requests (升级为HTTPS请求)4. User-Agent (浏览器名称)5. Accept (传输文件类型)6.Referer (页面跳转处)7.Accept-En…

IBM王阳:软件是凝聚创新力的最佳平台

导读&#xff1a;在IBM全球副总裁兼IBM中国开发中心总经理王阳博士看来&#xff0c;IBM百年不衰的根本原因在于将创新力凝结成软件然后进行合适的传播&#xff0c;其间最重要的是成功打造出了一个吸引人才、培养研发人才并激发出人才创新力的环境和氛围。而保持创新领导力的关键…

Jquery 多行拖拽图片排序 jq优化

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery图片拖动排序代码</title><style type"text/css">.item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{li…

分享11款主流的开源编程工具

导读&#xff1a;有了开源编程工具&#xff0c;在基于开源许可证的情况下您可以轻松学习、修改、提高代码的质量&#xff0c;本文收集了11款最主流的且有价值的开源编程工具。或许会给您带来一丝惊喜。一起来看下吧。 NO.1 Rhomobile Rhodes Ruby或许是Github上第二大流行语言…

谁在告谁?移动专利混战图

移动领域激战正酣&#xff0c;同样是没有永远的朋友&#xff0c;只有永远的利益。 苹果刚刚起诉三星的Galaxy手机和平板电脑山寨了苹果的产品&#xff0c;而此前两家并没有过节。再比如微软和亚马逊以及HTC之间的授权协议争端。移动领域的争端如此之多&#xff0c;以至于看客无…

光棍节程序员闯关秀过关全攻略

maven/java/web/bootstrapQQ群&#xff1a;566862629。希望更多人一起帮助我学习。 光棍节程序员闯关秀过关全攻略。程序员的寂寞谁能懂?"SF光棍节程序员闯关秀"智力挑战小游戏火热上线&#xff0c;看看你能闯到第几关&#xff1f; 游戏地址: http://segmentfault…

jekins搭建

2019独角兽企业重金招聘Python工程师标准>>> 转自 https://www.cnblogs.com/hdwang/p/6081994.html &#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xf…

块级元素的margin-left和margin-right的用法注意

此时是有效果显示的因为html文档流默认是从上往下&#xff0c;从左往右进行显示的&#xff0c;所以此时是有效果的。那如果此时把#son的块元素的margin-right:20px; 是没有效果的此时是没有效果的&#xff0c;如图所示&#xff1a;如果此时想要margin-right有效果的话&#xf…

Apache Tiles的基本使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、概述 对于一个新的技术&#xff0c;了解其基本的概念和和原理是学好该技术的基础。 2、Tiles的概念 Tiles 是复合视图模式&#xff0…

网络爬虫--6.urllib库的基本使用(2)

文章目录一. urllib.parse.urlencode()和urllib.parse.unquote()二. Get方式三. 批量爬取百度贴吧数据四.POST方式五.关于CA六.处理HTTPS请求 SSL证书验证一. urllib.parse.urlencode()和urllib.parse.unquote() 编码工作使用urllib.parse的urlencode()函数&#xff0c;帮我们…

摩拜大数据杀熟?官方:老用户押金的确退款延迟

近日&#xff0c;有媒体曝出摩拜单车一些老用户出现押金难退现象。有的消费者点击退款后&#xff0c;系统不断奔溃&#xff1b;有的申请退款后&#xff0c;账户又莫名出现押金&#xff0c;就像未申请一样&#xff1b;也有人终于提交了退款&#xff0c;等候数日却迟迟不见到账。…

Junit Test使用样例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 配置&#xff1a; 调用类&#xff1a; import java.util.List;import javax.annotation.Resource;import org.apache.shiro.crypto.Rand…

day212223:线程、进程、协程

1、程序工作原理 进程的限制&#xff1a;每一个时刻只能有一个线程来工作。多进程的优点&#xff1a;同时利用多个cpu&#xff0c;能够同时进行多个操作。缺点&#xff1a;对内存消耗比较高当进程数多于cpu数量的时候会导致不能被调用&#xff0c;进程不是越多越好&#xff0c;…

php课程 8-28 php如何绘制生成显示图片

php课程 8-28 php如何绘制生成显示图片 一、总结 一句话总结&#xff1a;gd库轻松解决 1、php图片操作生成的图的两种去向是什么&#xff1f; 一种在页面直接输出&#xff0c;一种存进本地磁盘 2、php操作图片的库有哪些&#xff1f; PHP: Image Processing and Generation - M…

flavr—超级漂亮的jQuery扁平弹出对话框

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 插件描述&#xff1a;flavr是一个时尚的扁平弹出对话框为您的下一个网站。 flavr是响应设计布局&#xff0c;能够适应任何屏幕大小。 得…

经纬度之间的距离计算

来自谷歌地图的计算公式&#xff1a; 通过JAVA的Math类各种方法调用。实现上述公式 private static double EARTH_RADIUS 6378.137;// 单位千米/*** 角度弧度计算公式 rad:(). <br/>* * 360度2π πMath.PI* * x度 x*π/360 弧度* * author chiwei* param d* return* s…

在CentOS7阿里云服务器部署ThinkPHP5,并配置phpstrom实现同步开发(微信小程序及管理员后端)...

小程序和后端同步开发 1.服务器安装tp5框架&#xff1a; 方法很多比如&#xff1a;github、linux命令直接手动下、composer 都可以&#xff0c;方法很多&#xff0c;百度一下&#xff0c;不再累述 2.这时你会发现怎么都访问出现不了这个令人舒心的界面&#xff08;ok第一个坑到…

ER图( 实体联系图)

E-R图也称实体-联系图(Entity Relationship Diagram)&#xff0c;提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。 它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式&#xff0c;用矩形表示实体型&#xff0c;矩形框内写明…

网络爬虫--9.正则表达式

文章目录一. 正则表达式1.为什么要学正则表达式2.什么是正则表达式3.正则表达式匹配规则二. Python 的 re 模块1.re 模块的一般使用步骤2.compile 函数3.match 方法4.search 方法5.findall 方法6.finditer 方法7.split 方法8.sub 方法9.匹配中文10.贪婪模式与非贪婪模式1&#…

笔记本电池的正确使用方法

一、新买笔记本不需要激活&#xff0c;也不需要前三次的充电12小时深充深放&#xff0c;这主要是锂电池的原理和特性决定的。电池设计有电量保护&#xff0c;不可能将电量完全用完&#xff0c;当然也不可能过度充电。 二、笔记本电池的寿命受周围环境的影响很大&#xff0c;最好…