详解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中的内置常量
May 20 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
Python安装与基本数据类型教程详解
May 29 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
使用python实现kNN分类算法
Oct 16 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
Pycharm快捷键配置详细整理
Oct 13 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/10/09 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP进程通信基础之信号
2017/02/19 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
django 中QuerySet特性功能详解
2019/07/25 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
岗位职责范本
2013/11/23 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
婚礼主持词开场白
2014/03/13 职场文书
企业文化标语口号
2014/06/09 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL