详解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处理图片之PIL模块简单使用方法
May 11 Python
python中PIL安装简单教程
Apr 21 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
Python面向对象类继承和组合实例分析
May 28 Python
python3安装speech语音模块的方法
Dec 24 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
解决paramiko执行命令超时的问题
Apr 16 Python
keras实现多种分类网络的方式
Jun 11 Python
python破解同事的压缩包密码
Oct 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
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
vue如何引用其他组件(css和js)
2017/04/13 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
python实现发送和获取手机短信验证码
2016/01/15 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
详解python3中zipfile模块用法
2018/06/18 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python set内置函数的具体使用
2019/07/02 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
自我评价的写作规则
2014/01/06 职场文书
干部培训自我鉴定
2014/01/22 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
2015高考寄语集锦
2015/02/27 职场文书
应聘教师自荐信
2015/03/26 职场文书
信访维稳承诺书
2015/05/04 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
高一化学教学反思
2016/02/22 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
JavaScript组合继承详解
2021/11/07 Javascript
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
什么是SOLID
2022/03/24 Javascript