详解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的lambda匿名函数的简单介绍
Apr 25 Python
简单文件操作python 修改文件指定行的方法
May 15 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
python监控键盘输入实例代码
Feb 09 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
第五节--克隆
2006/11/16 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php防止用户重复提交表单
2015/11/02 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP 裁剪图片
2021/03/09 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
jquery获取节点名称
2015/04/26 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
python构建深度神经网络(DNN)
2018/03/10 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
刚毕业大学生自荐信范文
2014/02/20 职场文书
英语教师自荐信
2014/05/26 职场文书
高中地理教学反思
2016/02/19 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android