用python写一段代码,实现flask 异步发送带附件的邮件
时间: 2023-04-08 16:01:36 浏览: 106
以下是使用 Flask 和 Flask-Mail 库实现异步发送带附件的邮件的 Python 代码示例:
```python
from flask import Flask
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'your_email@qq.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'
app.config['MAIL_DEFAULT_SENDER'] = 'your_email@qq.com'
mail = Mail(app)
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
def send_email(to, subject, template, attachments=None):
msg = Message(subject, recipients=[to])
msg.html = template
if attachments:
for attachment in attachments:
with app.open_resource(attachment) as f:
msg.attach(attachment, 'application/octet-stream', f.read())
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
return thr
if __name__ == '__main__':
send_email('recipient@example.com', 'Test Email', '<h1>Hello World!</h1>', ['attachment1.pdf', 'attachment2.docx'])
```
在上面的代码中,我们首先导入了 Flask 和 Flask-Mail 库。然后,我们创建了一个 Flask 应用,并配置了邮件服务器的相关信息,包括邮件服务器地址、端口、用户名、密码等。接下来,我们创建了一个 Mail 实例,并将其与 Flask 应用关联起来。
然后,我们定义了一个名为 send_async_email 的函数,用于异步发送邮件。该函数接受 Flask 应用实例和邮件消息作为参数,并在新线程中发送邮件。我们还定义了一个名为 send_email 的函数,用于发送带附件的邮件。该函数接受收件人地址、邮件主题、邮件正文和附件列表作为参数。在该函数中,我们首先创建了一个 Message 对象,并设置了收件人地址和邮件正文。然后,如果附件列表不为空,我们遍历附件列表,并将每个附件添加到邮件中。最后,我们创建了一个新线程,并在该线程中调用 send_async_email 函数发送邮件。
最后,我们在主函数中调用 send_email 函数发送带附件的邮件。在实际使用中,我们可以将该函数封装成一个独立的模块,并在需要发送邮件时调用该模块。
阅读全文