公司每天要发送日报,最近没事搞了一下如何自动发邮件,用的是腾讯企业邮箱,跟大家分享一下我的研究过程吧。

以前弄的发邮件的是用qq邮箱发的,当时在网上查资料最后达到了能发图片,网页,自定义收件人展示,主题等比较简

单的,但没想到说发送个word附件,后来才发现原来email里的MIMEText就可以,先上代码吧

# coding:utf8
"""
日报
"""
import smtplib
import os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart class MyEmail:
def __init__(self):
self.user = None
self.passwd = None
self.to_list = []
self.cc_list = []
self.tag = None
self.doc = None def send(self):
"""
发送邮件
"""
try:
server = smtplib.SMTP_SSL("smtp.exmail.qq.com", port=465)
server.login(self.user, self.passwd)
server.sendmail("<%s>" % self.user, self.to_list, self.get_attach())
server.close()
print("send email successful")
except Exception as e:
print("send email failed %s" % e) def get_attach(self):
"""
构造邮件内容
"""
attach = MIMEMultipart()
if self.tag is not None:
# 主题,最上面的一行
attach["Subject"] = self.tag
if self.user is not None:
# 显示在发件人
attach["From"] = "发件人姓名,可以自定义<%s>" % self.user
if self.to_list:
# 收件人列表
attach["To"] = ";".join(self.to_list)
if self.cc_list:
# 抄送列表
attach["Cc"] = ";".join(self.cc_list)
if self.doc:
# 估计任何文件都可以用base64,比如rar等
# 文件名汉字用gbk编码代替
name = os.path.basename(self.doc).encode("gbk")
f = open(self.doc, "rb")
doc = MIMEText(f.read(), "base64", "gb2312")
doc["Content-Type"] = 'application/octet-stream'
doc["Content-Disposition"] = 'attachment; filename="' + name + '"'
attach.attach(doc)
f.close()
return attach.as_string() if __name__ == "__main__":
my = MyEmail() my.user = "name@name.com"
my.passwd = "password"
my.to_list = ["", ]
my.cc_list = ["", ]
my.tag = "日报"
my.doc = u"C:\Documents and Settings\Administrator\Desktop\日报.doc"
my.send()

首先使用腾讯企业邮箱需要使用ssl,不过在smtplib中有这个功能,一般使用SMTP,需要ssl的时候使用SMTP_SSL,在明白这个之前
我费了好大的力气去找怎么用ssl,后来才发现原来除了换个模块外别的根本不用变化,
在登录的时候我用的是@前面的帐号名,一直上不去,一直不知道为什么,第二天心里突然闪过一个想法:把完整邮箱地址当做帐号,一
试,哈哈,登录成功了
然后就是发送附件了,首先是需要发送一个word文档,找了半天才发现用
(from email.mime.text import MIMEText)
MIMEText就可以,本来我以为他只能处理文本的txt,原来他不仅可以处理文本,doc,rar都可以用它添加到附件里,只要在初始化的
时候使用base64就可以,后面的参数是doc使用的字符集吧,这个没研究过,不确定
doc["Content-Type"] = 'application/octet-stream'
doc["Content-Disposition"] = 'attachment; filename=123.doc' 这个指定类型和描述,在描述里可以自定义文件名貌似这个文件名是gbk编码的,
我的附件名字是中文,先使用u""把文件名声明为unicode,再转为gbk,如果使用unicode的话好像不行,文件名会变成系统定义的文件
名,不过文件仍然可以用,下载下来改个名字没什么区别,使用utf8会出现乱码
好吧,发现一个漏洞,抄送的邮件没发出去

在
server.sendmail("<%s>"%self.user, self.to_list, self.get_attach())
中第二个参数表示的是想要发送到的地址,需要把抄送的地址也放在这个列表里,如下
server.sendmail("<%s>"%self.user, self.to_list + self.cc_list, self.get_attach())
至于在构造邮件时设置的不用变,那个只起到显示的作用,和发给谁没关系,只是在邮件内容中说明了一下发给谁,抄送给谁而已,实际
上谁真正收到需要在sendmail里添加

python使用smtplib和email发送腾讯企业邮箱邮件的更多相关文章

  1. C#发送腾讯企业邮箱

    腾讯企业邮箱客户端配置介绍 http://email-qq.cn/tengxun/201610303793.html?akvezc=smt0n2 POP3/SMTP协议 POP3/SMTP协议: 接收 ...

  2. php通过imap获取腾讯企业邮箱信息后的解码处理

    最近需要在项目开发的oa中集成一个收发腾讯企业邮箱邮件的功能,今天做到了获取收件箱内容部分,imap如何获取就不写了,百度一堆,主要是关于内容的解码 主要以邮件主题解码为主,腾讯企业邮返回的数据主要有 ...

  3. 解决使用Foxmail客户端软件不能收取腾讯企业邮箱的全部邮件

    一般说来,使用Foxmail客户端软件收取邮箱时,需要作如下几步: 1.进入邮箱web界面授权开启POP3/SMTP服务.IMAP/SMTP等服务 2.在邮箱web界面配置收取选项,可选择收取全部邮件 ...

  4. python 发送邮件 <QQ+腾讯企业邮箱>

    一.使用QQ邮箱或者腾讯企业邮箱 python 发送邮件属于网络编程方向的,在工作中,我需要经常用邮件来检测我的程序运行状况.使用起来十分方便,这里我就用腾讯企业邮箱作为我的收发邮箱来使用. 使用py ...

  5. 腾讯企业邮箱SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ¿ªÆôÕʺÅÉý¼¶ÉèÖã¬ÇëµÇ¼e

    这里我们在报警发送邮件用的是腾讯的企业邮箱,突然这两天没有报警邮件,很是奇怪 发送邮件报错 SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ ...

  6. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件

    说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...

  7. zabbix 3.4 ubuntu 16 用腾讯企业邮箱作为告警邮箱

    最近一直在研究zabbix监控系统,今天调试了腾讯企业邮箱作为告警邮箱的设置,本次方式是用内置email组件. 第一步: 选择Administration-->Media Types--> ...

  8. 解析腾讯企业邮箱到自己域名,设置mail的cname

    之前注册了腾讯企业邮的免费邮箱,后来想把企业邮箱和域名绑定起来,发现了一些问题. 先来看正常的部分,假设你已经注册过了腾讯企业邮箱免费版,并且已经绑定好了域名. 然后在域名提供商那里设置域名解析的MX ...

  9. GitLab11.3.9 使用 Crowd3.3.2 的帐号实现 SSO 单点登录,以及GitLab配置腾讯企业邮箱

    GitLab11.3.9 的安装方法: 点击查看.   Crowd3.3.2 的安装方法:点击查看.   需要先在 Crowd 创建应用程序,参考 <Docker 创建 Crowd3.3.2 以 ...

随机推荐

  1. 【python】python实例集<一>

    #打开一个记事本 import os os.startfile('notepad.exe') #当前文件的根目录 import os print os.path.join(os.path.dirnam ...

  2. spring 源码如何导入到eclipse

    spring 源码如何导入到eclipse spring源码解析——spring源码导入eclipse spring framework源码下载并导入eclipse

  3. mysql-8 alter命令

    当我们需要修改数据表名或者修改数据表字段时,就需要用到Mysql alter命令. 查看表结构: -- 以下2个命令是通用的 show columns from test_alter_tbl; des ...

  4. tcpdump查看某个端口数据

    tcpdump -i eth0 -nn -A port tcpdump src

  5. SpringBoot入门篇--对于JSON数据的返回以及处理一

    在后台的开发过程中不可避免的就是一系列对JSON数据的返回,需要我们进行的就是提供各种各样的数据.一般情况下数据类型最常用的就是JSON以及XML,在这里我们就讲讲在SpringBoot里面我们怎样进 ...

  6. Selenium Webdriver——Xpath轴定位(preceding)

     1.preceding-sibling 选取当前节点之前的所有同级节点 text=出发之前的同级节点: 2.preceding 选取当前节点开始标签之前的所有节点 text=出发节点标签之前的所有i ...

  7. 有单例模式 Singleton 涉及的一些防止类被继承的东西

    c#中 : ------------------------------- 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. java中: ------------------ ...

  8. 【常见CPU架构对比】维基百科

    Comparison of instruction set architectures https://en.wikipedia.org/wiki/Comparison_of_instruction_ ...

  9. docker国内registry

    cat /etc/docker/daemon.json {"registry-mirrors": ["http://4d6b2eb7.m.daocloud.io" ...

  10. Django基础学习一

    Django需要安装Django和jinja2,所以在开始学习之前,要先按照Django模块和jinja2模块,Django默认的数据库是SQLite,所以建议大家在学习之前需要先安装SQLite 一 ...