详解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实现的简单猜数字游戏
Apr 04 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python批量按比例缩小图片脚本分享
May 21 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 29 Python
通过实例解析python and和or使用方法
Nov 14 Python
用Python生成会跳舞的美女
Jan 18 Python
Elasticsearch 批量操作
Apr 19 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
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
JavaScript 私有成员分析
2009/01/13 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
财务出纳员岗位职责
2013/11/26 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
十佳党员事迹材料
2014/08/28 职场文书
安全生产感想
2015/08/07 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang