一,利用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. Objective-C中的关联(objc_setAssociatedObject,objc_getAssociatedObject,objc_removeAssociatedObjects)

    关联的概念 所谓的关联,字面意思是把两个相关的对象放在一起,实际也是如此.把两个对象相互关联起来,使得其中的一个对象成为另外一个对象的一部分,这就是关联. 关联的作用 使用Category,我们可以给 ...

  2. NSMutableAttributedString 的使用方法,设置格式

    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:title]; NS ...

  3. IIS7应用程序池集成和经典的区别 对IIS7经典模式和集成模式的理解 程序池经典和集成的区别

    IIS7应用程序池集成和经典的区别   IIS7应用程序池集成和经典的区别 IIS7应用程序池有集成和经典两种模式,根据微软官方的介绍, 集成模式,如果托管应用程序在采用集成模式的应用程序池中运行,服 ...

  4. 匿名函数 invoke

    delegate string MyDele(string str); string MyFun(string str) { return str; } private void Form1_Load ...

  5. asp.net core mvc视频A:笔记3-3.Model与强类型视图

    创建项目,添加TestController 定义一个类(Model),并赋值 建立视图页面 注意:Model是一个特定的对象,取决于传递过来的参数 运行结果 到现在为止,依然没有改变动态类型,需要转换 ...

  6. HDU 1014 Uniform Generator 题解

    找到规律之后本题就是水题了.只是找规律也不太easy的.证明这个规律成立更加不easy. 本题就是求step和mod假设GCD(最大公约数位1)那么就是Good Choice,否则为Bad Choic ...

  7. 【0】按照Django官网:实现第一个django app 安装必要的工具/模块

    1.环境配置: (1)Install Setuptools¶ To install Python packages on your computer, Setuptools is needed. Do ...

  8. 零基础学python-1.5 第一个程序

    这一个章节我们来说说怎么建立一个python程序 1.打开idle 2.点击File->new file,然后会弹出一个编辑窗体 3.在编辑窗体里面输入命令代码 程序代码: print(&quo ...

  9. tomcat安装配置规范

    tomcat用户设置 1 2 [root@host-1 ~]# useradd -u 501 tomcat [root@host-1 ~]# passwd tomcat   安装JDK 1 2 3 4 ...

  10. Arcgis:什么是栅格数据类型

    栅格数据单元大小 栅格所表示的内容的详细程度(要素现象)通常取决于栅格的单元(像素)大小或空间分辨率. 单元必须足够小,这样才可以捕获到所需的详细信息: 而单元又必须足够大,这样才可以提高计算机存储和 ...