import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
class Semail():
def __init__(self):
#发件人邮箱
self.sender = '******@kaikeba.com'
#发件人密码
self.password = '******'
#发件人邮件传输协议服务地址
self.smtpserver = 'smtp.mxhichina.com'
# 发件人昵称
self.username = '数据组'
#收件人邮箱
self.receiver = ['licongcong@kaikeba.com']
#邮件标题
self.mail_title = '标题:这是带附件的邮件'
#邮件正文
self.mail_text='来来来,这是邮件的正文'
def semailfun(self):
#基础信息
sender = self.sender
receiver = self.receiver
smtpserver = self.smtpserver
username = self.username
password = self.password
mail_title = self.mail_title
message = MIMEMultipart()
message['From'] = formataddr([username, sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
message['To'] = ",".join(receiver)
message['Subject'] = Header(mail_title, 'utf-8')
# 邮件正文内容
message.attach(MIMEText(f'正文', 'plain', 'utf-8'))
# 构造附件1(附件为TXT格式的文本)
filename = "各学科汇总.xlsx"
att2 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2.add_header('Content-Disposition', 'attachment', filename=('gbk', '', filename))
message.attach(att2)
# att3 = MIMEText(open('test2.xlsx', 'rb').read(), 'base64', 'utf-8')
# att3["Content-Type"] = 'application/octet-stream'
# att3["Content-Disposition"] = 'attachment; filename="test3.xlsx"'
# message.attach(att3)
# # 构造附件2(附件为JPG格式的图片)
# att2 = MIMEText(open('123.jpg', 'rb').read(), 'base64', 'utf-8')
# att2["Content-Type"] = 'application/octet-stream'
# att2["Content-Disposition"] = 'attachment; filename="123.jpg"'
# message.attach(att2)
# # 构造附件3(附件为HTML格式的网页)
# att3 = MIMEText(open('report_test.html', 'rb').read(), 'base64', 'utf-8')
# att3["Content-Type"] = 'application/octet-stream'
# att3["Content-Disposition"] = 'attachment; filename="report_test.html"'
# message.attach(att3)
# 发送
try:
smtpObj = smtplib.SMTP_SSL(smtpserver,465) # 注意:如果遇到发送失败的情况(提示远程主机拒接连接),这里要使用SMTP_SSL方法
smtpObj.connect(smtpserver)
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receiver, message.as_string())
smtpObj.quit()
print("邮件发送成功!!!")
except Exception as e:
print("邮件发送失败")
print(e)
if __name__ == '__main__':
Semail().semailfun()