python发送邮件

python发送邮件

准备

python中发送邮件主要用的是smtplib和email两个模块,下面主要对这两个模块进行讲解

在讲解之前需要准备至少两个测试的邮箱,其中要在邮箱的设置中开启smtplib协议才可以进行发送和接受

smtplib

smtplib.SMTP( [host [, port [, local_hostname[,timeout]]]]) host是SMTP主机的服务器,其中163邮箱的是smtp.163.com,其他的可以在网上找到,port是端口号,这里默认的是25,local_hostname是你主机的SMTP,如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。timeout是设置的连接的限制时间,如果超过这个时间还没有连接上那么就会出现错误

SMTP.set_debuglevel(level):设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。如果设置为1就表示输出调试信息

SMTP.connect([host[, port]]):连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.yeah.net:25),这样就没必要给出port参数。

SMTP.login(user, password) 登录服务器,这里的user是邮箱的用户名,但是这里的password并不是你邮箱的密码,当你开启SMTP的时候会提示你设置一个密码,这里的密码就是对应的密码

立即学习“Python免费学习笔记(深入)”;

SMTP.sendmail(from_addr, [to_addrs,], msg[, mail_options, rcpt_options]) 发送邮件,from_addr是发送方也就是你的邮箱地址,to_addr是接受方的地址,当然这里的可以填上多个邮箱账号发送给多个账号,如果有多个账号需要使用列表传递参数

SMTP.quit()断开连接

email

emial模块用来处理邮件消息,包括MIME和其他基于RFC 2822的消息文档。使用这些模块来定义邮件的内容,是非常简单的。其包括的类有(更加详细的介绍可见:http://docs.python.org/library/email.mime.html):

class email.mime.base.MIMEBase(_maintype, _subtype, **_params):这是MIME的一个基类。一般不需要在使用时创建实例。其中_maintype是内容类型,如text或者image。_subtype是内容的minor type类型,如plain或者gif。 **_params是一个字典,直接传递给Message.add_header()。

class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]:MIMEBase的一个子类,多个MIME对象的集合,_subtype默认值为mixed。boundary是MIMEMultipart的边界,默认边界是可数的。当需要发送附件的时候使用的就是这个类

class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]):MIMEMultipart的一个子类。

class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]): MIME音频对象

class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]):MIME二进制文件对象。主要用来发送图片

普通文本邮件

class email.mime.text.MIMEText(_text[, _subtype[, _charset]]):MIME文本对象,其中_text是邮件内容,_subtype邮件类型,可以是text/plain(普通文本邮件),html/plain(html邮件), _charset编码,可以是gb2312等等。

普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain。首先导入smtplib和mimetext。创建smtplib.smtp实例,connect邮件smtp服务器,login后发送,具体代码如下*

# 一个格式化邮件的函数,可以用来使用def _format_addr(s):    name, addr = parseaddr(s)    return formataddr((        Header(name, 'utf-8').encode(),        addr.encode('utf-8') if isinstance(addr, unicode) else addr))from_addr='××××××××'   #你的邮箱地址from_password='×××××××'   #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××'    #要发送的邮箱地址msg=MIMEText('乔装打扮,不择手段','plain','utf-8')  #这里text=乔装打扮,不择手段msg['From'] = _format_addr(u'Python爱好者 ' % from_addr)  #格式化发件人msg['To'] = _format_addr(u'管理员 ' % to_email)    #格式化收件人msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()    #格式化主题stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password)    #登录server.set_debuglevel(1)        #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string())   #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表

登录后复制

发送html邮件

还是用MIMEText来发送,不过其中的_subType设置成html即可,详细代码如下:

def _format_addr(s):    name, addr = parseaddr(s)    return formataddr((        Header(name, 'utf-8').encode(),        addr.encode('utf-8') if isinstance(addr, unicode) else addr))from_addr='××××××××'   #你的邮箱地址from_password='×××××××'   #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××'    #要发送的邮箱地址html="""

大家好

"""msg=MIMEText(html,'html','utf-8')  #这里text=html,设置成html格式的msg['From'] = _format_addr(u'Python爱好者 ' % from_addr)  #格式化发件人msg['To'] = _format_addr(u'管理员 ' % to_email)    #格式化收件人msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()    #格式化主题stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password)    #登录server.set_debuglevel(1)        #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string())   #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表

登录后复制

附件的发送

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送,具体实力如下:

from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerdef _format_addr(s):    name, addr = parseaddr(s)    return formataddr((        Header(name, 'utf-8').encode(),        addr.encode('utf-8') if isinstance(addr, unicode) else addr))from_addr='××××××××'   #你的邮箱地址from_password='×××××××'   #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××'    #要发送的邮箱地址msg=MIMEMultipart()   #创建实例text=MIMEText('

陈加兵


大家好

','html','utf-8')msg.attach(text)   #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open('/home/chenjiabing/文档/MeiZi_img/full/file.txt','rb').read(),'plain','utf-8')att1["Content-Type"] = 'application/octet-stream'  #指定类型att1["Content-Disposition"] = 'attachment; filename="123.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)     #向其中添加附件img_path='/home/chenjiabing/文档/MeiZi_img/full/file.jpg'  #图片路径image=MIMEImage(open(img_path,'rb').read())     #创建一个图片附件image.add_header('Content-ID','')   #指定图片的编号,这个会在后面用到image.add_header('Content-Disposition', 'attachment', filename='test.jpg')        image.add_header('X-Attachment-Id', '0')msg.attach(image)    #添加附件stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password)    #登录server.set_debuglevel(1)        #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string())   #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表

登录后复制

将图片嵌入到正文信息中

from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerdef _format_addr(s):    name, addr = parseaddr(s)    return formataddr((        Header(name, 'utf-8').encode(),        addr.encode('utf-8') if isinstance(addr, unicode) else addr))from_addr='××××××××'   #你的邮箱地址from_password='×××××××'   #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××'    #要发送的邮箱地址msg=MIMEMultipart()   #创建实例html="""

下面演示嵌入图片

@@##@@@@##@@"""text=MIMEText('

陈加兵


大家好

','html','utf-8')msg.attach(text)   #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open('/home/chenjiabing/文档/MeiZi_img/full/file.txt','rb').read(),'plain','utf-8')att1["Content-Type"] = 'application/octet-stream'  #指定类型att1["Content-Disposition"] = 'attachment; filename="123.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)     #向其中添加附件## 创建一个图片附件img_path='/home/chenjiabing/文档/MeiZi_img/full/file.jpg'  #图片路径image=MIMEImage(open(img_path,'rb').read())     #创建一个图片附件image.add_header('Content-ID','')   #指定图片的编号,image.add_header('Content-Disposition', 'attachment', filename='test.jpg')        image.add_header('X-Attachment-Id', '0')msg.attach(image)    #添加附件#创建第二个图片附件img_path_1='/home/chenjiabing/文档/MeiZi_img/full/test.jpg'  #图片路径image1=MIMEImage(open(img_path,'rb').read())     #创建一个图片附件image1.add_header('Content-ID','')   #指定图片的编号,这个就是在上面对应的cid:1的那张图片,因此这里的编号一定要对应image1.add_header('Content-Disposition', 'attachment', filename='img.jpg')        image1.add_header('X-Attachment-Id', '0')msg1.attach(image)    #添加附件stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password)    #登录server.set_debuglevel(1)        #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string())   #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表

登录后复制python发送邮件python发送邮件

以上就是python发送邮件的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2272151.html

(0)
上一篇 2025年2月27日 12:42:11
下一篇 2025年2月18日 02:57:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python客户端与服务端的简单网络编程示例

    这篇文章主要介绍了python简单网络编程,详细介绍了客户端与服务端的具体实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了Python简单网络编程。分享给大家供大家参考,具体如下: 内容目录 1. 客户端(client.py)2…

    编程技术 2025年2月27日
    200
  • 如何利用Python在运算后得到浮点数值的方法详解

    在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值,而在需要进行对除所得的结果进行精确地求值时,想在运算后即得到浮点值,那么如何进行处理呢? 1、修改被除数的值为带小数点的形式即可得到浮点值,这种方法在被除数事先知道…

    编程技术 2025年2月27日
    200
  • python多进程快还是多线程快?

    下面小编就为大家带来一篇python多进程和多线程究竟谁更快(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 python3.6 threading和multiprocessing 四核+三星250G-…

    2025年2月27日
    200
  • 关于Python安装官方whl包和tar.gz包的方法详解(收藏)

    下面小编就为大家带来一篇python安装官方whl包和tar.gz包的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Windows环境:   安装whl包:pip install wheel  …

    编程技术 2025年2月27日
    200
  • Python递归函数的定义与用法的实例分析

    这篇文章主要介绍了python递归函数定义与用法,结合具体实例形式分析了python递归函数的原理、实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下: 递归函数 在函…

    编程技术 2025年2月27日
    200
  • 基于http请求与响应实现的网页源码读取的相关操作技巧

    这篇文章主要介绍了python实现的下载网页源码功能,涉及python基于http请求与响应实现的网页源码读取功能相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的下载网页源码功能。分享给大家供大家参考,具体如下: #!/…

    2025年2月27日
    200
  • 分享python中鸭子类和多态实例

    下面小编就为大家带来一篇老生常谈python之鸭子类和多态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 一、 什么是多态 一种类型具有多种类型的能力允许不同的对象对同一消息做出灵活的反应以一种通用的方式对待…

    编程技术 2025年2月27日
    200
  • Python模拟登陆实例详解

    本篇文章主要介绍了python模拟登陆实现代码,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 下面分享一个使用Python进行网站模拟登陆的小例子。 原理 使用Cookie技术,绕开网站登录验证。要使用到cooki…

    2025年2月27日
    200
  • Python字符串处理实例详解

    这篇文章主要为大家详细介绍了python字符串处理实现单词反转的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python字符串处理学习中,有一道简单但很经典的题目,按照单词对字符串进行反转,并对原始空格进行保留: 如:‘ I l…

    编程技术 2025年2月27日
    200
  • 详解Python中的字符编码

    下面小编就为大家带来一篇老生常谈python基础之字符编码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前言 字符编码非常容易出问题,我们要牢记几句话: 1.用什么编码保存的,就要用什么编码打开 2.程序的…

    2025年2月27日
    200

发表回复

登录后才能评论