Python3 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 即可。

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

标准邮件需要三个头部信息: FromTo, 和 Subject ,每个信息直接使用空行分割。

文本实例

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服务
mailHost = "smtp.qq.com"
mailUser = "576****[email protected]"
mailPass = "**************"

sender = "576****[email protected]"       # qq邮箱代发邮箱需要和登陆邮箱一致
receivers = ['292***[email protected]']

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText("Geng的邮箱测试", "plain", "utf-8") # 邮件内容


message['From'] = Header("geng", 'utf-8')
message['To'] = Header('Eappo', 'utf-8')
message['Subject'] = Header('测试内容,脚本小子技术宅!', 'utf-8')

try:
    smtpObj = smtplib.SMTP() # 创建对象
    smtpObj.connect(mailHost, 25) #连接服务器与端口
    smtpObj.login(mailUser, mailPass) # 登陆
    smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
    print("sucess")
except:
    print("failure")

HTML邮件实例

将MIMEText()函数内的内容进行修改即可:

mailmsg = """
<p>这是百度链接</p>
<p><a href = 'www.baidu.com'>百度一下</a></p>
"""
# message = MIMEText("Geng的邮箱测试", "plain", "utf-8")
message = MIMEText(mailmsg, "html", "utf-8")

带附件的邮件实例

import smtplib
from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

# 第三方 SMTP 服务
mailHost = "smtp.qq.com"
mailUser = "576****[email protected]"
mailPass = "**************"

sender = "576****[email protected]"       # qq邮箱代发邮箱需要和登陆邮箱一致
receivers = ['292***[email protected]']



#邮件正文内容
message = MIMEMultipart() # 多内容
message.attach(MIMEText('Geng的邮箱测试', 'plain', 'utf-8'))

# 构造附件,传送当前目录下的 text.txt 文件
att = MIMEText(open('text.txt','rb').read(), 'base64', 'utf-8')
att['Content-Type'] = "application/octet-stream"
att['Content-Disposition'] = "attachment; filename = 'text.txt'"
message.attach(att)


message['From'] = Header("geng", 'utf-8')
message['To'] = Header('Eappo', 'utf-8')
message['Subject'] = Header('测试内容,脚本小子技术宅!', 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mailHost, 25)
    smtpObj.login(mailUser, mailPass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("sucess")
except:
    print("failure")

图片插入内容邮件实例

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

from email.header import Header

# 第三方 SMTP 服务
mailHost = "smtp.qq.com"
mailUser = "576****[email protected]"
mailPass = "**************"

sender = "576****[email protected]"       # qq邮箱代发邮箱需要和登陆邮箱一致
receivers = ['292***[email protected]']


message = MIMEMultipart('related')

message['From'] = Header("geng", 'utf-8')
message['To'] = Header('Eappo', 'utf-8')
message['Subject'] = Header('测试内容,脚本小子技术宅!', 'utf-8')


msgAlternative = MIMEMultipart('alternative')
message.attach(msgAlternative)

mail_msg = """
<p>Python 邮件发送测试...</p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

msgImage = MIMEImage(open('download.jpg', 'rb').read())
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header("Content-ID","<image1>")
message.attach(msgImage)


try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mailHost, 25)
    smtpObj.login(mailUser, mailPass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("sucess")
except:
    print("failure")

猜你喜欢

转载自my.oschina.net/gain/blog/1794054