• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python 使用smtp协议发送邮件:html文本邮件、图片邮件、文件附件邮件。附:常用邮件的smtp、pop3服务器地址

python 使用smtp协议发送邮件:html文本邮件、图片邮件、文件附件邮件。附:常用邮件的smtp、pop3服务器地址

作者:全栈工程师开发手册 字体:[增加 减小] 来源:互联网

全栈工程师开发手册通过本文主要向大家介绍了python,邮件,smtp等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

全栈工程师开发手册 (作者:栾鹏)

python教程全解

python使用smtp协议发送电子邮件。包含发送html文本邮件、包含图片附件的邮件,包含其他文件附件的邮件。可设置邮件的收发人,主题,内容。并以163邮件为例,分别在python2.7和python3.6下进行试验。

python2.7代码

#coding:utf-8
print('生成三种不同类型的电子邮件')

from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
import email
from smtplib import SMTP
import smtplib
import os.path
import mimetypes


HOST="smtp.163.com"            #使用的邮箱的smtp服务器地址,这里是163的smtp地址,经过测试网易和搜狐的邮箱可用
SENDER="aaaaaaa@163.com"                           #用户名,这里更改为自己的
PASSWORD="11111111"                             #密码,这个更改为自己的
POSTFIX="163.com"                     #邮箱的后缀,网易就是163.com

RECIPS=[SENDER]   #这里接收人也设置为自己

# 一个包含文本和html的多部分邮件。多部分消息通常包含纯文本和html格式,客户端自行选择显示哪个。(web客户端显示html,命令行客户端显示纯文本)
def make_mpa_msg():
    myemail = MIMEMultipart('alternative')
    text = MIMEText('Hello World!\r\n', 'plain',_charset="utf-8")  #纯文本的邮件消息正文
    myemail.attach(text)  #消息正文绑定到邮件对象
    html = MIMEText(   #html邮件消息正文
        '<html><body><h4>Hello World!</h4>'
        '</body></html>', 'html')
    myemail.attach(html)  #消息正文绑定到邮件对象
    return myemail

# 创建一个文本和图片的邮件
def make_img_msg(imgfile):
    f = open(imgfile, 'rb')  #创建文件指针,这里要以rb的模式取读
    data = f.read()  #读取图片成字节流
    f.close()  #文件关闭
    ctype, encoding = mimetypes.guess_type(imgfile)   #ctype为根据文件获取的数据传输类型image/jpeg,encoding应该为None
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)   #maintype为文件所属类image,subtype为具体文件类型jpeg
    myemail = MIMEImage(data, name=subtype)  #生成图片邮件,name=文件类型jpeg
    basename = os.path.basename(imgfile)  #basename为文件名,不包含路径
    myemail.add_header('Content-Disposition','attachment; filename="%s"' % basename)  #添加邮件头
    return myemail

# 创建一个文本和文件的邮件
def make_file_msg(file_name):
    # 构造MIMEBase对象做为文件附件内容并附加到根容器
    ctype, encoding = mimetypes.guess_type(file_name)  # ctype为根据文件获取的数据传输类型image/jpeg,encoding应该为None
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)  # maintype为文件所属类image,subtype为具体文件类型jpeg
    print(maintype,subtype)
    ## 读入文件内容并格式化
    f = open(file_name, 'rb')  # 创建文件指针,这里要以rb的模式取读
    myemail = MIMEBase(maintype, subtype)
    myemail.set_payload(f.read())  #设置负载数据
    f.close()
    email.Encoders.encode_base64(myemail)  #将邮件编码
    #设置附件头
    basename = os.path.basename(file_name) #basename为文件名,不包含路径
    myemail.add_header('Content-Disposition','attachment; filename="%s"' % basename)  #添加邮件头
    return myemail

def sendMsg(fr, to, message):
    sendSvr = smtplib.SMTP()
    sendSvr.connect(HOST)  # 连接服务器
    sendSvr.login(SENDER, PASSWORD)  # 登录操作
    errs = sendSvr.sendmail(fr, to, message)  #参数:发件人,收件人,消息正文
    sendSvr.quit()


if __name__ == '__main__':
    print('发送多部分消息')
    msg = make_mpa_msg()
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = '多部分消息邮件标题'
    sendMsg(SENDER, RECIPS, msg.as_string())

    print('发送图片消息体')
    msg = make_img_msg(r'D:/test.jpg')
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = '图片消息邮件'
    sendMsg(SENDER, RECIPS, msg.as_string())

    print('发送文件消息体')
    msg = make_file_msg(r'D:/test.mp4')
    msg['From'] = SENDER
    msg['To'] = ', '.join(RECIPS)
    msg['Subject'] = '文件消息邮件'
    sendMsg(SENDER, RECIPS, msg.as_string())

python3.6下将email.Encoders改成了email.encoders,其他没有变化。

python3.6下代码如下

#coding:utf-8
print('生成三种不同类型的电子邮件')

from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
import email
from smtplib import SMTP
import smtplib
import os.path
import mimetypes


HOST="smtp.163.com"            #使用的邮箱的smtp服务器地址,这里是163的smtp地址,经过测试网易和搜狐的邮箱可用
SENDER="cdllp626626@163.com"                           #用户名
PASSWORD="19910101a"                             #密码
POSTFIX="163.com"                     #邮箱的后缀,网易就是163.com

RECIPS=["cdllp626626@163.com"]   #这里接收人也设置为自己

# 一个包含文本和html的多部分邮件。多部分消息通常包含纯文本和html格式,客户端自行选择显示哪个。(web客户端显示html,命令行客户端显示纯文本)
def make_mpa_msg():
    myemail = MIMEMultipart('alternative')
    text = MIMEText('Hello World!\r\n', 'plain',_charset="utf-8")  #纯文本的邮件消息正文
    myemail.attach(text)  #消息正文绑定到邮件对象
    html = MIMEText(   #html邮件消息正文
        '<html><body><h4>Hello World!</h4>'
        '</body></html>', 'html')
    myemail.attach(html)  #消息正文绑定到邮件对象
    return myemail

# 创建一个文本和图片的邮件
def make_img_msg(imgfile):
    f = open(imgfile, 'rb')  #创建文件指针,这里要以rb的模式取读
    data = f.read()  #读取图片成字节流
    f.close()  #文件关闭
    ctype, encoding = mimetypes.guess_type(imgfile)   #ctype为根据文件获取的数据传输类型image/jpeg,encoding应该为None
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)   #maintype为文件所属类image,subtype为具体文件类型jpeg
    myemail = MIMEImage(data, name=subtype)  #生成图片邮件,name=文件类型jpeg
    basename = os.path.basename(imgfile)  #basename为文件名,不包含路径
    myemail.add_header('Content-Disposition','attachment; filename="%s"' % basename)  #添加邮件头
    return myemail

# 创建一个文本和文件的邮件
def make_file_msg(file_name):
    # 构造MIMEBase对象做为文件附件内容并附加到根容器
    ctype, encoding = mimetypes.guess_type(file_name)  # ctype为根据文件获取的数据传输类型image/jpeg,encoding应该为None
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)  # maintype为文件所属类image,subtype为具体文件类型jpeg
    print(maintype,subtype)
    ## 读入文件内容并格式化
    f = open(file_name, 'rb')  # 创建文件指针,这里要以rb的模式取读
    myemail = MIMEBase(maintype, subtype)
    myemail.set_payload(f.read())  #设置负载数据
    f.close()
    email.encoders.encode_base64(myemail)  #将邮件编码
    #设置附件头
    basename = os.path.basename(file_name) #basename为文件名,不包含路径
    myemail.add_header('Content-Disposition','attachment; filename="%s"' % basename)  #添加邮件头
    return myemail

def sendMsg(fr, to, message):
    sendSvr = smtplib.SMTP()
    sendSvr.connect(HOST)  # 连接服务器
   
  


 

您可能想查找下面的文章:

  • Python底层封装实现方法详解
  • Python实现随机生成任意数量车牌号
  • 使用Python实现Wake On Lan远程开机功能
  • python动态文本进度条的实例代码
  • python基于property()函数定义属性
  • Python 常用的安装Module方式汇总
  • python中OrderedDict的使用方法详解
  • Python编程生成随机用户名及密码的方法示例
  • Python实现统计文本文件字数的方法
  • Python部署web开发程序的几种方法

相关文章

  • Python切片用法实例教程
  • Python处理文本文件中控制字符的方法
  • Python中绑定与未绑定的类方法用法分析
  • Python3.x版本中新的字符串格式化方法
  • Python连接DB2数据库
  • python模拟Django框架实例
  • Python删除空文件和空文件夹的方法
  • Python实现二叉搜索树
  • python的else子句使用指南
  • python基础教程之五种数据类型详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 举例讲解Python中的死锁、可重入锁和互斥锁
    • Python中使用socket发送HTTP请求数据接收不完整问题解决方法
    • python实现解数独程序代码
    • python 时间戳与格式化时间的转化实现代码
    • 用python记录运行pid,并在需要时kill掉它们的实例
    • Python_解析xml
    • wxpython 最小化到托盘与欢迎图片的实现方法
    • 在Python的Django框架中使用通用视图的方法
    • Python中分数的相关使用教程
    • python编程-将Python程序转化为可执行程序[整理]

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有