如何使用 Python 进行邮件发送
Posted on Wed, 25 Dec 2024 16:09:28 +0800 by LiangMingJian
需求
通过 Python 代理邮箱发送邮件。
代码实现
import smtplib
import time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
def send_email(sender:str, password:str, receivers:list[str],
subject:str, content:str, subtype:str='html',
attachments:list[str]=None ,
smtp_server:str='smtp.qq.com', port:int=465):
"""
SMTP 邮件发送
:param sender: 发件邮箱
:param password: 授权码
:param receivers: 收件人列表,支持群发
:param subject: 邮件主题
:param content: 邮件内容
:param subtype: 内容类型 html/plain
:param attachments: 附件路径列表
:param smtp_server: SMTP 服务器
:param port: 端口号 SSL 用 465,TLS 用 587
"""
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ', '.join(receivers)
msg['Subject'] = subject
# 添加正文
msg.attach(MIMEText(content, subtype, 'utf-8'))
# 添加附件
if attachments:
for file in attachments:
with open(file, 'rb') as f:
part = MIMEApplication(f.read())
part.add_header('Content-Disposition', 'attachment',
filename=os.path.basename(file))
msg.attach(part)
# SSL 加密连接
server = smtplib.SMTP_SSL(smtp_server, port)
server.set_debuglevel(0) # 1/0: 开启/关闭调试
server.ehlo(smtp_server) # 声明客户端域名
server.login(sender, password) # 登录 SMTP 服务器
# 发送邮件
server.sendmail(sender, receivers, msg.as_string())
# 关闭连接
server.quit()
if __name__ == '__main__':
# 使用
send_email(
sender='******@qq.com',
password='******',
receivers=['******@qq.com', '******@qq.com', '******@qq.com'],
subject='Python 邮件测试',
content=f'<h1>Python 邮件测试</h1><p>正文</p><p>{time.time()}</p>',
attachments=['******.txt', '******.txt']
)