详解Python发送email的三种方式


Posted in Python onOctober 18, 2018

Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法

Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较容易实现。本米扑博客先介绍几个最简单的发送邮件方式记录下,像html邮件,附件等也是支持的,需要时查文档即可。

一、登录邮件服务器

通过smtp登录第三方smtp邮箱发送邮件,支持 25 和 465端口

vim python_email_1.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
 
 
import smtplib 
from email.mime.text import MIMEText 
  
smtpHost = 'smtp.exmail.qq.com' 
sender = 'robot@mimvp.com' 
password = "mimvp-password" 
receiver = 'yanggang@mimvp.com'
  
content = 'hello mimvp.com' 
msg = MIMEText(content) 
  
msg['Subject'] = 'email-subject' 
msg['From'] = sender 
msg['To'] = receiver 
  
## smtp port 25
smtpServer = smtplib.SMTP(smtpHost, 25)     # SMTP
smtpServer.login(sender, password) 
smtpServer.sendmail(sender, receiver, msg.as_string()) 
smtpServer.quit() 
print 'send success by port 25' 
 
## smtp ssl port 465
smtpServer = smtplib.SMTP_SSL(smtpHost, 465)  # SMTP_SSL
smtpServer.login(sender, password) 
smtpServer.sendmail(sender, receiver, msg.as_string()) 
smtpServer.quit() 
print 'send success by port 465'

执行命令:

$ python python_email_1.py 
send success by port 25
send success by port 465

发送结果,会收到两封邮件,截图其中一份邮件如下图:

详解Python发送email的三种方式

二、使用smtp服务

测试失败,略过或留言指正

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
 
 
import smtplib 
from email.mime.text import MIMEText 
import subprocess
  
smtpHost = 'smtp.exmail.qq.com' 
sender = 'robot@mimvp.com' 
password = "mimvp-password" 
receiver = 'yanggang@mimvp.com'
  
content = 'hello mimvp.com' 
msg = MIMEText(content)  
  
  
 
if __name__ == "__main__":  
  p = subprocess.Popen(['/usr/sbin/sendmail', '-t'], stdout=subprocess.PIPE) 
  print(str(p.communicate()))
  p_res = str(p.communicate()[0])
  msg = MIMEText(p_res)
 
  msg["From"] = sender 
  msg["To"] = receiver 
  msg["Subject"] = "hello mimvp.com" 
  s = smtplib.SMTP(smtpHost) 
  s.login(sender, password)
  s.sendmail(sender, receiver, msg.as_string()) 
  s.quit() 
  print 'send success'

三、调用sendmail命令

调用本机linux自身sendmail服务发送邮件,不需要启动sendmail后台进程,不需要发送者登录,邮件发送者可以是任意名字,没有限制。

特别注意:sendmail 命令发送邮件,默认用25端口号,由于阿里云、腾讯云等封禁了25端口号,因此本示例需在开通25端口机器上测试

vim python_email_3.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
 
 
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
import commands
 
import sys 
reload(sys)
sys.setdefaultencoding('utf-8')
 
def send_mail(sender, recevier, subject, html_content):
    msg = MIMEText(html_content, 'html', 'utf-8')
    msg["From"] = sender
    msg["To"] = recevier
    msg["Subject"] = subject
    p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
    p.communicate(msg.as_string())
 
 
sender = 'robot@mimvp.com'
recevier = 'yanggang@mimvp.com'
subject = 'sendmail-subject'
html_content = 'hello mimvp.com'
send_mail(sender, recevier, subject, html_content)

执行命令:

python python_email_3.py

收件结果:

详解Python发送email的三种方式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 类详解及简单实例
Mar 24 Python
Python中字典和集合学习小结
Jul 07 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
Python连接Redis的基本配置方法
Sep 13 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
python实现图像拼接功能
Mar 23 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
Python 爬虫的原理
Jul 30 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
python try except 捕获所有异常的实例
Oct 18 #Python
对Python中Iterator和Iterable的区别详解
Oct 18 #Python
对python中的iter()函数与next()函数详解
Oct 18 #Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 #Python
对python中的高效迭代器函数详解
Oct 18 #Python
对Python中内置异常层次结构详解
Oct 18 #Python
Python运维开发之psutil库的使用详解
Oct 18 #Python
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
php 过滤器实现代码
2010/08/09 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
python文件和目录操作函数小结
2014/07/11 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
python的range和linspace使用详解
2019/11/27 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
入股协议书
2014/04/14 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
2014年班务工作总结
2014/12/02 职场文书
先进党组织事迹材料
2014/12/26 职场文书
业务员岗位职责
2015/02/03 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书