详解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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python3.5装饰器典型案例分析
Apr 30 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 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
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
TypeScript入门-接口
2017/03/30 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python进阶教程之循环对象
2014/08/30 Python
用Python解决计数原理问题的方法
2016/08/04 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
五好关工委申报材料
2014/05/31 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python