千家信息网

Python中怎么使用SMTP发送邮件

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"Python中怎么使用SMTP发送邮件"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看
千家信息网最后更新 2026年11月02日Python中怎么使用SMTP发送邮件

这篇"Python中怎么使用SMTP发送邮件"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Python中怎么使用SMTP发送邮件"文章吧。

Python创建 SMTP 对象语法

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

参数说明:

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

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协议中定义的格式。

实例

以下是一个使用Python发送邮件简单的实例

#!/usr/bin/pythonimport smtplibsender = 'from@fromdomain.com'receivers = ['to@todomain.com']message = """From: From PersonTo: To PersonSubject: SMTP e-mail testThis is a test e-mail message."""try:  smtpObj = smtplib.SMTP('localhost')  smtpObj.sendmail(sender, receivers, message)          print "Successfully sent email"except SMTPException:  print "Error: unable to send email"

使用Python发送HTML格式的邮件

Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:

import smtplib  from email.mime.text import MIMEText  mailto_list=["YYY@YYY.com"]mail_host="smtp.XXX.com"  #设置服务器mail_user="XXX"    #用户名mail_pass="XXXX"   #口令mail_postfix="XXX.com"  #发件箱的后缀 def send_mail(to_list,sub,content):  #to_list:收件人;sub:主题;content:邮件内容   me="hello"+"+mail_user+"@"+mail_postfix+">"   #这里的hello可以任意设置,收到信后,将按照设置显示   msg = MIMEText(content,_subtype='html',_charset='gb2312')    #创建一个实例,这里设置为html格式邮件   msg['Subject'] = sub    #设置主题   msg['From'] = me     msg['To'] = ";".join(to_list)     try:         s = smtplib.SMTP()         s.connect(mail_host)  #连接smtp服务器       s.login(mail_user,mail_pass)  #登陆服务器       s.sendmail(me, to_list, msg.as_string())  #发送邮件       s.close()         return True     except Exception, e:         print str(e)         return False  if __name__ == '__main__':     if send_mail(mailto_list,"hello","小五义"):         print "发送成功"     else:         print "发送失败"

或者你也可以在消息体中指定Content-type为text/html,如下实例:

#!/usr/bin/pythonimport smtplibmessage = """From: From PersonTo: To PersonMIME-Version: 1.0Content-type: text/htmlSubject: SMTP HTML e-mail testThis is an e-mail message to be sent in HTML formatThis is HTML message.This is headline."""try:  smtpObj = smtplib.SMTP('localhost')  smtpObj.sendmail(sender, receivers, message)          print "Successfully sent email"except SMTPException:  print "Error: unable to send email"

Python发送带附件的邮件

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

from email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport smtplib#创建一个带附件的实例msg = MIMEMultipart()#构造附件1att1 = MIMEText(open('d:123.rar', 'rb').read(), 'base64', 'gb2312')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)#构造附件2att2 = MIMEText(open('d:123.txt', 'rb').read(), 'base64', 'gb2312')att2["Content-Type"] = 'application/octet-stream'att2["Content-Disposition"] = 'attachment; filename="123.txt"'msg.attach(att2)#加邮件头msg['to'] = 'YYY@YYY.com'msg['from'] = 'XXX@XXX.com'msg['subject'] = 'hello world'#发送邮件try:   server = smtplib.SMTP()   server.connect('smtp.XXX.com')   server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码   server.sendmail(msg['from'], msg['to'],msg.as_string())   server.quit()   print '发送成功'except Exception, e:     print str(e)

以下实例指定了Content-type header 为 multipart/mixed,并发送/tmp/test.txt 文本文件:

#!/usr/bin/pythonimport smtplibimport base64filename = "/tmp/test.txt"# 读取文件内容并使用 base64 编码fo = open(filename, "rb")filecontent = fo.read()encodedcontent = base64.b64encode(filecontent)  # base64sender = 'webmaster@tutorialpoint.com'reciever = 'amrood.admin@gmail.com'marker = "AUNIQUEMARKER"body ="""This is a test email to send an attachement."""# 定义头部信息part1 = """From: From PersonTo: To PersonSubject: Sending AttachementMIME-Version: 1.0Content-Type: multipart/mixed; boundary=%s--%s""" % (marker, marker)# 定义消息动作part2 = """Content-Type: text/plainContent-Transfer-Encoding:8bit%s--%s""" % (body,marker)# 定义附近部分part3 = """Content-Type: multipart/mixed; name="%s"Content-Transfer-Encoding:base64Content-Disposition: attachment; filename=%s%s--%s--""" %(filename, filename, encodedcontent, marker)message = part1 + part2 + part3try:  smtpObj = smtplib.SMTP('localhost')  smtpObj.sendmail(sender, reciever, message)  print "Successfully sent email"except Exception:  print "Error: unable to send email"

以上就是关于"Python中怎么使用SMTP发送邮件"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

邮件 内容 附件 实例 格式 服务 参数 服务器 地址 消息 就是 成功 主机 主题 口号 名字 字符 字符串 对象 收件人 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 期待互联网科技 礼当家互联网科技 碳银互联网科技 壕鑫互联网络科技 时间互联网络科技 深圳期待互联网科技 汉立互联网科技有限公司联系电话 互联网科技产品 北京大学互联网科技怎么样 重庆互联网医院沙龙医盟信息科技 乌鲁木齐新华智原互联网科技学校 互联网科技的全部知识 保险科技服务互联网营销体系 中和天地互联网科技有限公司 互联网方面的科技前沿 山东子淼互联网科技有限公司 互联网金融科技元年 互联网科技股为什么大涨 上海旺乐尼互联网科技有限公司 广州全民伙伴互联网科技有限公司 广东猪兼强互联网科技有限公司 互联网核心科技是什么 互联网科技公司怎么样 互联网 的科技创新 互联网金融 科技创新 互联网金融科技名词解释 互联网金融科技元年 悟空问答互联网科技 互联网科技对化妆品行业 科技互联网专业工作会议发言稿
0