python使用电子邮件模块smtplib的方法
admin
2023-08-02 15:39:43
0

Smptp类定义:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登陆,校验,发送,退出等。host参数为远程smtp主机地址,比如stmp.163.com;port为连接端口,默认为25;local_hostname的作用是在本地的FQDN(完整的域名)发送HELO/EHLO指令,timeout为连接或尝试在多数秒超时,SMTP类具有如下方法:
SMTP.connect([host[,port]])方法,连接远程smtp主机方法,host为远程主机地址,port为远程主机smtp端口,默认25,也可以直接使用host:port形式表示,例如:SMTP.connect(\”smtp.163.com\”,\”25\’).
SMTP.login(user,password)方法,远程smtp主机的校验方法,参数为用户名与密码,如SMTP.login(\”18801457794@139.com\”,\’123456\’).
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,实现邮件的发送功能,参数依次为发件人,收件人,邮件内容,例如:SMTP.sendmail(\”python@163.com\”,\’404408853@qq.com\’,body),其中body内容定义如下:
\”\”\”From:python@163.com
To:404408853@qq.com
Subject:test mail
test mail body\”\”\”
SMTP.starttls([keyfile[,certfile]])方法,启用TLS(安全传输)模式,所有SMTP指令都讲加密传输,例如使用gmail的stmp服务器时需要启动此项才能正常发送邮件
SMTP.quit()方法,端口smtp服务器的连接

下面通过实例列子来了解python是怎么发送邮件

[root@localhost smtplib]# cat simple1.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
import string
HOST = \"smtp.139.com\" #定义smtp主机
SUBJECT = \"test\" #定义邮件主题
TO = \"404408853@qq.com\" #定义邮件收件人
FROM = \"18801457794@139.com\" #定义邮件发件人
text = \"python test mail\" #邮件的内容
BODY=string.join(( #组装sendmail方法的邮件主体内容,各段以\"\\r\\n\"进行分隔
  \"From:%s\" %FROM,
  \"To:%s\" %TO,
  \"Subject:%s\"%SUBJECT,
  \"\",
  text
),\"\\r\\n\")
   
server = smtplib.SMTP() #创建一个SMTP对象
server.connect(HOST,\"25\") #通过connect方法连接smtp主机
server.starttls() #启动安全传输模式
server.login(\"18801457794@139.com\",\"123456\") #邮件账户登录校验
server.sendmail(FROM,TO,BODY) #邮件发送
server.quit() #断开smtp连接

执行这段代码,我们将受到一封邮件

实现HTML格式的数据报表邮件
纯文本的邮件内容已经不能满足我们多样化的需求,本示例通过引入email.mime的MIMETex类来实现支持HTML格式的邮件,支持所有HTML元素,包含表格,图片,动画,CSS样式,表单等。本示例使用HTML的表格定制完美的业务流量报表,实现代码如下:

#!/usr/bin/env python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText #导入MIMEText类
HOST = \"smtp.139.com\"
SUBJECT = u\"官网流量数据报表\"
TO = \"404408853@qq.com\"
FROM = \"18801457794@139.com\"
msg = MIMEText(\"\"\"
  
*官网数据更多
1)日访问量:152433访问次数:23651 页面浏览量:45123 点击数:545122 数据流量:504Mb
2)状态码消息
  500:105 404;3264 503;214
3)访客浏览器信息
  IE:50% firefox:10% chrome:30% other:10%
4)页面信息
  /index.php 42153
  /view.php 21451
\"\"\",\"html\",\"utf-8\") msg[\'Subject\'] = SUBJECT msg[\'FROM\'] = FROM msg[\'To\'] = TO try: server = smtplib.SMTP() server.connect(HOST,\'25\') server.starttls() server.login(\'18801457794@139.com\',\'123456\') server.sendmail(FROM,TO,msg.as_string()) server.quit() print \"邮件发送成功\" except Exception,e: print \"失败:\" + str(e)

运行代码结果如图,

示例2:实现图文格式的服务器性能报表邮件
当要求包含图片数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME对象组成,则同时需要引用MIMEMultipart类来进行封装。本示例通过MIMEText与MIMEImage类的组合来实现图文格式的服务器性能报表邮件的定制,实现代码如下

#!/usr/bin/env python
#coding: utf-8
import smtplib,string
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
HOST =\"smtp.139.com\" #定义smtp主机
SUBJECT = \"金美美平台系统状态报表\" #定义邮件主题
TO = \"404408853@qq.com,302803690@qq.com\" #定义邮件收件人
FROM = \"18801457794@139.com\" #定义邮件发件人
TO_list = TO.split(TO)
def addimg(src,imgid): #添加图片函数,参数1:图片路径,参数2:图片ID
  fp = open(src,\'rb\') #打开文件
  msgImage = MIMEImage(fp.read()) #创建MIMEImage对象,读取图片内容并作为参数
  fp.close() #关闭文件
  msgImage.add_header(\'Content-ID\',imgid) #指定图片文件的Content-ID,标签src用到
  return msgImage #返回msgImage对象
 
msg = MIMEMultipart(\'related\') #创建MIMEMultipart对象,采用related定义内嵌资源的邮件体
msgtext = MIMEText(\"\"\"
以下是211.157.111.41系统状态图
\"\"\",\"html\",\"utf-8\") #标签的src属性是通过Content-ID来引用的 msg.attach(msgtext) #MIMEMultipart对象附加MIMEText的内容 msg.attach(addimg(\"img/bytes_io.png\",\"io\")) #使用MIMEMultipart对象附加MIMEImage的内容 msg.attach(addimg(\"img/os_load.png\",\"load\")) msg.attach(addimg(\"img/os_mem.png\",\"mem\")) msg.attach(addimg(\"img/os_disk.png\",\"disk\")) msg[\'Subject\'] = SUBJECT msg[\'FROM\']=FROM msg[\'To\'] = TO try: server = smtplib.SMTP() server.connect(HOST,\"25\") server.starttls() server.login(\'18801457794@139.com\',\'123456\') server.sendmail(FROM,TO_list,msg.as_string()) server.quit() print \"邮件发送成功!\" except Exception,e: print \"失败:\"+ str(e)

代码运行效果如图

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...