详解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 25 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
python获取外网ip地址的方法总结
Jul 02 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python 装饰器使用详解
Jul 29 Python
Python语言实现将图片转化为html页面
Dec 06 Python
python实现学生管理系统
Jan 11 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
Python:slice与indices的用法
Nov 25 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
Django DRF路由与扩展功能的实现
Jun 03 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
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
Sql面试题
2013/03/20 面试题
电脑教师的教学自我评价
2013/11/26 职场文书
公司活动邀请函
2014/01/24 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书