详解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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python内置数据类型详解
Aug 18 Python
python正则分析nginx的访问日志
Jan 17 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
Django实现celery定时任务过程解析
Apr 21 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
如何设置Java的运行环境
2013/04/05 面试题
小学生暑假感言
2014/02/06 职场文书
消防安全宣传标语
2014/06/07 职场文书
经典禁毒标语
2014/06/16 职场文书
英语课外活动总结
2014/08/27 职场文书
课程设计的心得体会
2014/09/03 职场文书
个人自荐书范文
2015/03/09 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python