#MUA(Mail User Agent用户邮件代理): SMTP(Simple Mail Transfer Protocol简单邮件传输协议)发送邮件 import os import sys #一个smtp库,一个mail库 import smtplib #MIME:(Multipurpose Internet Mail Extensions多用途互联网邮件扩展)这个模块用来发送邮件的,提供了创建不同类型邮件消息的类,如文本、HTML、图像等。 from email.mime.base import MIMEBase #MIMEbase是基于文件的工具,添加附件的类 from email.mime.text import MIMEText #MIMEtext是文本工具 from email.mime.multipart import MIMEMultipart #MIMEmultipart是多部分工具 from email.utils import parseaddr, formataddr from email.header import Header from email import encoders def get_psword(): pswd_path = 'C:/Users/ABC/Desktop/Demo/QQMail_SMTP_pswd.txt' with open(pswd_path, 'r', errors='ignore') as f: pswd = f.read().strip('\n') return pswd #获取符合邮件格式的收件人地址信息 def _format_addr(s): name, addr = parseaddr(s) name = Header(name,'utf-8').encode() #这里的utf-8是编码格式,指的是输出的编码格式,而不是name的编码格式 return formataddr((name, addr)) #获取收件人地址 def get_name(s): name, addr = parseaddr(s) name = Header(name, 'utf-8').encode() return name #s.split('<')[1][:1] #获取收件人姓名 def get_addr(s): name, addr = parseaddr(s) return addr #s.split(' <')[0] #message def main(): # 设置发件人、收件人、邮件主题 sender = '阿巴阿巴 <xxx@qq.com>' sender_addr = get_addr(sender) password = get_psword() recv_list = ['阿巴阿巴 <xxx@gmail.com>'] receiver = [get_addr(s) for s in recv_list] smtp_server = 'smtp.qq.com' smtp_port = 465 # 邮件正文是str格式 plain = 'Hello, sendby Python...' content_format1 = 'plain' #邮件正文是HTML格式 html = '<html><body><h1>Hello</h1>' + '<p><img src="cid:0"></p>'+'<p>send by <a href="http://www.python.org">Python</a>...</p>' + '</body></html>' content_format2 = 'html' #创建文本邮件 msg_content_txt = MIMEText(plain, content_format1, 'utf-8') #其中plain是邮件正文的格式,utf-8是编码格式 msg_content_html = MIMEText(html, content_format2, 'utf-8') #其中html是邮件正文的格式,utf-8是编码格式 #创建多对象邮件 msg = MIMEMultipart('mixed') alternative_part = MIMEMultipart('alternative') #传递进Header msg['From'] = _format_addr(sender) #只有From是必须的,否则会报错 msg['To'] = ', '.join([_format_addr(s) for s in recv_list]) #将元组转为字符串 msg['Subject'] = Header('Python SMTP测试', 'utf-8').encode() #添加邮件正文 #alternative_part.attach(msg_content_txt) alternative_part.attach(msg_content_html) msg.attach(alternative_part) msg.attach(msg_content_txt) #添加附件 with open(r'C:/Users/ABC/Desktop/Demo/CDemo/thumbnail.jpg', 'rb') as f: mime = MIMEBase('image', 'jpg', filename='thumbnail.jpg') mime.add_header('Content-Disposition', 'attachment', filename= 'thumbnail.jpg') #两次命名增加鲁棒性 mime.add_header('Content-ID', '<0>') #这里的content-id是附件在html引用的标识 mime.add_header('X-Attachment-Id', '0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) try: # 建立SMTP_SSL连接 server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.set_debuglevel(1) # 登录SMTP服务器 server.login(sender_addr, password) # 发送邮件 server.sendmail(sender_addr, receiver, msg.as_string()) print("邮件发送成功!") except Exception as e: print("邮件发送失败:", e) finally: # 关闭SMTP连接 server.quit() if __name__ == '__main__': main()
Sign in to make a reply
明天过后.