一,利用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 settings mail_host = settings.EMAIL_HOST
mail_user = settings.EMAIL_HOST_USER
mail_pass = settings.EMAIL_HOST_PASSWORD
subject = subject
sender = settings.EMAIL_FROM
receiver = settings.TEST_EMAIL_TO msg = 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()

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

 import os
import datetime
import smtplib
import logging
import traceback
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header def send_img_mail(data, subject, recivers, attach_file=None):
base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
mail_host = settings.EMAIL_HOST
mail_user = settings.EMAIL_HOST_USER
mail_pass = settings.EMAIL_HOST_PASSWORD
subject = subject
sender = settings.EMAIL_FROM
receiver = recivers msg = MIMEMultipart()
msg.attach(MIMEText(str(data), 'html')) with open(os.path.join(base_dir, 'dist/static/img/zk_header.png'), 'rb') as f:
msgImage = MIMEImage(f.read())
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage) with open(os.path.join(base_dir, 'dist/static/img/zk_footer.jpg'), 'rb') as f:
msgImage = MIMEImage(f.read())
msgImage.add_header('Content-ID', '<image2>')
msg.attach(msgImage) if attach_file:
last_month = datetime.datetime.today() - relativedelta(months=1)
attachment = MIMEText(open(attach_file, 'rb').read(), 'base64', 'gb2312')
attachment["Content-Type"] = 'application/octet-stream'
attachment["Content-Disposition"] = 'attachment; filename="XXX产品{0}月新增XX问题.xls"'. \
format(last_month.month)
msg.attach(attachment) msg['from'] = Header('XXXXXX', '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())

html文件格式:

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

python 发送邮件的两种方式【终极篇】的更多相关文章

  1. 最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  2. Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式

    1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...

  3. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    2018年3月19日 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5 ...

  4. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  5. 执行python解释器的两种方式

    执行python解释器的两种方式 1.交互式 python是高级语言,是解释型语言,逐行翻译,写一句翻译一句 print ('hello world') 2.命令行式 python和python解释器 ...

  6. 操作系统+编程语言的分类+执行python程序的两种方式+变量

    1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...

  7. day05-1 执行Python程序的两种方式

    目录 执行Python程序的两种方式 第一种:交互式 第二种:命令行式 三个步骤 两种方式的区别 执行Python程序的两种方式 第一种:交互式 在cmd中运行 优点:直接给出结果,执行效率高,及时报 ...

  8. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. 使用Python和AWK两种方式实现文本处理的长拼接案例

    最近由于业务系统新需求的需要,我们平台需要将供应商G提供一类数据转换格式后提供给客户K.比较头疼是供应商G提供的数据都是在Windows下使用Excel存储的,而客户K先前与我们相关对接人员商定的数据 ...

随机推荐

  1. 【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?

    问题描述 同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求. Action4.c(12): Warning -27796: Failed ...

  2. 安卓---JNI使用

    交叉编译 系统平台:Windows.Mac OS.Linux CPU平台:ARM.X86.MIPS 概念:在一个平台下打包编译出还有一个平台能够运行的程序#交叉编译原理 源代码->预编译-> ...

  3. ios 缩放图片(平铺)

    //缩放图片(平铺) - (UIImage *)resizeImage:(NSString *)imgName { UIImage *bgImage =  [UIImage imageNamed:im ...

  4. windows快捷启动命令

    gpedit.msc-----组策略 sndrec32-----录音机 nslookup----- ip地址侦测器 explorer------ 打开资源管理器 logoff-------注销命令 t ...

  5. 高抛低吸T+0操作要领(目前行情短线炒作的必备技能)

    最近的行情只能用操蛋来形容,但是危机中不乏机会.现在已经不是之前行情的思路,那着一个股票长线抱着,即使是好的牛股,也经不起目前行情的这 么折腾.所以,现在最适合的操作方式就是高抛低吸.今天低吸保不准明 ...

  6. elasticsearch报错syncedb_path

    一般默认syncdb_path在$HOME目录下隐藏文件,也可以自己指定一个文件,记住,这里只能指定文件,不能只写目录input { file { path => "/home/tom ...

  7. 使用React的static方法实现同构以及同构的常见问题

    代码地址请在github查看,假设有新内容.我会定时更新.也欢迎您star,issue,共同进步 1.我们服务端渲染数据从何而来 1.1 怎样写出同构的组件 服务端生成HTML结构有时候并不完好.有时 ...

  8. 用第三方下载工具下载官方XCode独立安装包的方法

    用第三方下载工具下载官方XCode独立安装包的方法 下载步骤 下载 aria2 工具配置好并启动 (利用其支持配置Cookie并多线程下载的功能.而迅雷则不支持设置Cookie,所以不支持这种需要登录 ...

  9. SO_KEEPALIVE

    if tcp_keepalive: # 启用KeepAlive选项 sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # TCP_K ...

  10. Linux中openmpi配置

    到 http://www.open-mpi.org/ 下载openmpi并解压,事先安装gcc或g++. 我是openmpi-1.6.5,进入解压文件夹,执行 ./configure 这一步执行时间会 ...