Python如何实现邮件功能


Posted in Python onMay 27, 2020

用Python的smtplib就可以简单的实现邮件功能。什么是SMTP?邮件功能怎么实现?

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:

host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。

port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。

local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

参数说明:

from_addr: 邮件发送者地址。

to_addrs: 字符串列表,邮件发送地址。

msg: 发送消息

这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。

分享给大家供大家参考。具体实现方法如下:

import smtplib, socket
fromaddr = a@b.com
toaddrs = ["c@d.com",   "e@f.com"]
msg = open("multimsg.eml", "r").read()
try:
 server = smtplib.SMTP('10.0.0.1')
 result = server.sendmail(fromaddr, toaddrs, msg)
 server.quit()
 if result:
  for r in result.keys():
   print "Error sending to", r
   rt = result[r]
   print "Code", rt[0], ":", rt[1]
except (smtplib.SMTPException, socket.error), arg:
 print "SMTP Server could not send mail", arg

实例补充:

python实现发送邮件功能

'''套接字是为特定的网络协议(例如TCP/IP,ICMP/IP,UDP/IP等),允许程序和接受并进行连接,要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块,利用该模块包含的函数和类定义,可生成通过网络通信的程序,分为六步服务端的一些方法:
1.  何为套接字
内核中套接字是一层一层进行抽象展示的,把共性的东西抽取出来,这样对外提供的接口可以尽量的统一,Socket函数中的三个参数其实就是把抽象的socket具体化的条件,famil参数决定了图中所示的第二层通信域,type决定了第三层的通信模式,protocol
决定了第四层真正的通信协议。
首先了解这个内容是是在哪个层?是如何通信的
http://www.cnblogs.com/wangcq/p/3520400.html,看了以方法,大体服务器和客户端就分为这几步
1.创建对象
2.将socket绑定在指定地址上,socket.bing(地址)
3.第3步,绑定后,必须准备好套接字,对端口进行监听 socket.listen(backlog)
4.socket的accept方法等待客户请求一个连接
5.处理阶段
6.传输结束,服务器调用socket的close方法以关闭连接
客户端就为4个步骤:
1.创建socket连接服务器
2.使用socket的connect方法连接服务器 socket.connect((host,port))
3.客户和服务器通过send和recv方法通信
4.调用socket的close方法通信
'''
#encoding=utf-8
import socket
t = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
'''创建socket对象,格式socket.socket(family,type),family格式是AF_INET(对于IPV4协议的TCP和 UDP),type参数,SOCK_STREAM(流套接字,提供面向连接,可靠的数据服务,用于TCP)或者 SOCK_DGRAM(数据报文套接字提供无无面向连接,不可靠的数据服务,用于UDP),SOCK_RAW(raw套接字,较低层的协议)'''
t.connect(('smtp.126.com', 25)) #建立连接
print "start", t.recv(1024) #使用recv方法通信,传输数据 
t.send("helo 126.com\r\n") #发送内容
print "111", t.recv(1024) 
t.send("auth login\r\n") #进行邮箱的登录
print "222", t.recv(1024) #打印在控制台
t.send("dGVzdG1hbjE5ODA=\r\n") #base64位方式编码,解码为:testman1980
print "333", t.recv(1024) #打印在控制台
t.send("Zm9zdGVyd3UxOTc4\r\n")#base64位方式编码,解码为:fosterwu1978
print "444", t.recv(1024) #打印在控制台
t.send("mail from:<xxx1980@126.com>\r\n") #发件人 这里不是很清楚同样在下方的邮件内容中,为何还要在一次
print "555", t.recv(1024) #打印在控制台
t.send("rcpt to:<xxx@qq.com>\r\n") #改变了收件人,但是不明白下方也有一个收件人,下方是否会收到消息,并且优先级是怎样的,明天实验来看
print "666", t.recv(1024) #打印在控制台
t.send("data\r\n")  #data的作用目前还没有发现,明天实践
print "777", t.recv(1024)  #打印在控制台
#发送邮件内容
t.send("from:xxx@126.com\r\n") #optional,可伪造别人的发件记录
t.send("to:xxx@qq.com\r\n")  #optional,可发给任何人
t.send("subject:hello!\r\n")
t.send("\r\n") #按照smtp协议要求,在标题后要发个空行
t.send("mail test1111!\r\n") #发送邮件内容
t.send(".\r\n")
print "888", t.recv(1024)

到此这篇关于Python如何实现邮件功能的文章就介绍到这了,更多相关Python实现邮件功能的方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python之os操作方法(详解)
Jun 15 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
python提取xml里面的链接源码详解
Oct 15 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
Python描述符descriptor使用原理解析
Mar 21 Python
python语言中有算法吗
Jun 16 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
在Python 中将类对象序列化为JSON
Apr 06 Python
Python中内建模块collections如何使用
May 27 #Python
Python OpenCV实现测量图片物体宽度
May 27 #Python
Python中socket网络通信是干嘛的
May 27 #Python
Python中SQLite如何使用
May 27 #Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 #Python
Python中如何引入第三方模块
May 27 #Python
Python中的wordcloud库安装问题及解决方法
May 27 #Python
You might like
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
python进程与线程小结实例分析
2018/11/11 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python的一些用法分享
2012/10/07 Python
Python构造函数及解构函数介绍
2015/02/26 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
在python中安装basemap的教程
2018/09/20 Python
python 字符串追加实例
2019/07/20 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
python创建文本文件的简单方法
2020/08/30 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
几道PHP的面试题
2012/05/19 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
科学发展观标语
2014/10/08 职场文书
2014年审计工作总结
2014/11/17 职场文书
支教个人总结
2015/03/04 职场文书
电工实训心得体会
2016/01/14 职场文书
高中班主任寄语
2019/06/21 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis