# 可发送任意格式的附件
from smtplib import SMTP_SSL
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email import encoders
from email.mime.base import MIMEBase
# smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
# email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
class send_mail():
def __init__(self):
self.host_server = 'smtp.qq.com' # qq邮箱smtp服务器
self.sender_qq = '850**582@qq.com' #发件人邮箱
self.pwd = 'ziflaz***sbehd' # 部分邮箱的密码是授权码,其他则为账号密码
self.receiver = ['850**582@qq.com'] # 收件人邮箱
self.mail_title = 'Python自动发送的邮件' # 邮件标题
# 初始化一个邮件主体
self.msg = MIMEMultipart()
self.msg["Subject"] = Header(self.mail_title,'utf-8')
self.msg["From"] = self.sender_qq
self.msg['To'] = ";".join(self.receiver)
def login(self):
self.smtp = SMTP_SSL(self.host_server) # ssl登录连接到邮件服务器
self.smtp.set_debuglevel(0) # 0是关闭,1是开启debug,可看控制台输入
self.smtp.ehlo(self.host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码
self.smtp.login(self.sender_qq, self.pwd)
def send_message(self,mail_content,file_path=None):
'''
发送邮件的方法
:param file_path: 输入文件路径,不填则只发送正文内容
:param mail_content 输入正文内容
'''
if file_path !=None:
add_file = MIMEBase('application', "octet-stream")
add_file.set_payload(open(file_path, "rb").read())
encoders.encode_base64(add_file)
file_name = file_path.split('/')[-1]
add_file.add_header('Content-Disposition', f'attachment; filename="{file_name}"')
self.msg.attach(add_file) # 添加附件
self.msg.attach(MIMEText(mail_content, 'plain', 'utf-8')) # 添加正文
try:
self.login()
self.smtp.sendmail(self.sender_qq, self.receiver, self.msg.as_string())
self.smtp.quit()
print("发送成功...")
except smtplib.SMTPException as e:
print("发送失败:",e)
if __name__ == '__main__':
send_mail().send_message('这是一个自动化邮件哦,带附件的','./Jpg/0002bezgzy7S9zaBrkca8&690.jpg')
send_mail().send_message('这是一个自动化邮件哦,不带附件的')
python发送邮件
于 2022-03-26 14:58:46 首次发布