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协议中定义的格式。
标准邮件需要三个头部信息: From, To, 和 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")