短视频学习运营(Flask扩展系列(二):Mail)mail扩展客户,mailbag是什么意思,

2022-11-27 / 行业干货 / 23 阅读

1.mail carrier

文 | 思诚之道来源:http://www.bjhee.com/flask-ext2.html继续介绍 Flask 常用的扩展,很多站点都需要发送邮件功能,比如用户注册成功邮件,用户重置密码邮件你可以使用 Python 的 smtplib来发邮件,不过 Flask 有个第三方扩展 Flask-Mail,可以更方便的实现此功能。

2.mail merge

这里我们就来介绍下这个 Flask-Mail系列文章Flask 扩展系列(一)–Restful安装和启用建议通过 pip 安装,简单方便:$ pip install Flask-Mail我们可以采用下面的方法初始化一个 Mail 的实例:

3.mail order

from flask import Flaskfrom flask_mail import Mailapp = Flask(__name__)mail = Mail(app)同其他扩展一样,最后一行实例化代码也可以写成下面的方式:

4.mail back

...mail = Mailmail.init_app(app)这样的写法在应用工厂模式下经常会用到发送邮件我们来看一段发送 Hello World 邮件的代码:from flask import Flask。

5.mail plugin

from flask_mail import Mail, Messageapp = Flask(__name__)app.config.update(MAIL_SERVER=smtp.example.com,

6.mail.163邮箱登陆

MAIL_USERNAME=bjhee,MAIL_PASSWORD=example)mail = Mail(app)@app.route(/mail)def send_mail:msg = Message(Hello,

7.mail out

sender=(Billy.J.Hee, bjhee@example.com),recipients=[you@example.com])msg.html =

Hello World

mail.send(msg)

8.mail delivery

return Successfulif __name__ == __main__:app.run(host=0.0.0.0, debug=True)访问"http://localhost:5000/mail",邮件就会被发送出去。

9.mail 什么意思

不用过多解释相信大家都看懂了,因为确实很简单我们在 Flask 的配置项中配上邮件 SMTP 服务器,用户名和密码;在请求中创建一个 Message 消息实例,传入邮件标题,发件人(元组,包括显示名和地址),收件人(列表)和邮件体;然后调用"Mail.send"方法发送该消息即可。

10.mail transfer

Message 对象的属性,可以在初始化时当作参数(key=value) 传入,也可以在初始化后赋值比如我们可以这样定义收件人:msg.recipients=[you@example.com]由于收件人可以多个,我们也可以通过"add_recipient"方法添加收件人:。

msg.add_recipient(he@example.com)发件人可以没有显示名,只要一个地址字符串即可:msg.sender=bjhee@example.com另外,上例中的邮件体是 HTML 格式,如果是 Plain Text 格式的话,你可以这样写:

msg.body = Hello World配置参数Flask-Mail 扩展可以在 Flask 应用配置项中配置其参数,上例中我们已经看到了 SMTP 服务器,用户名和密码的配置项,这里列举一些常用的:

配置项功能MAIL_SERVERSMTP邮件服务器地址,默认为localhostMAIL_PORTSMTP邮件服务器端口,默认为25MAIL_USERNAME邮件服务器用户名MAIL_PASSWORD邮件服务器密码

MAIL_DEFAULT_SENDER默认发件人,如果Message对象里没指定发件人,就采用默认发件人MAIL_USE_TLS是否启用TLS,默认为FalseMAIL_USE_SSL是否启用SSL,默认为False

MAIL_MAX_EMAILS邮件批量发送个数上限,默认为没有上限MAIL_ASCII_ATTACHMENTS将附件的文件名强制转换为ASCII字符,避免在某些情况下出现乱码,默认为FalseMAIL_SUPPRESS_SEND

调用”Mail.send”方法后,邮件不会真的被发送,在测试环境中使用,默认为False批量发送如果一次需要发送大量邮件,建议采用下面的方式:@app.route(/batch)def send_batch:

with mail.connect as conn:for user in users:msg = Message(subject=Hello, %s % user[name],body=Welcome, %s % user[name],

recipients=[user[email]])conn.send(msg)return Successful这样应用同邮件服务器的连接"mail.connect"会一直保持到所有邮件发送完毕,也就是退出 with 语句后再关闭,避免多次创建关闭连接的开销。

批量发送邮件个数上限由配置项"MAILMAXEMAILS"决定邮件带附件回到第一个发送邮件的例子,让我们在 Hello World 邮件中加上附件:@app.route(/mail)def send_mail:。

msg = Message(Hello,sender=(Billy.J.Hee, bjhee@example.com),recipients=[you@example.com])msg.html =

Hello World

# Add Attachmentwith app.open_resource(blank.docx) as fp:msg.attach(blank.docx, application/msword, fp.read)

mail.send(msg)return Successful上面的代码中,我们通过"app.open_resource"方法打开了本地当前目录下的"blank.docx"文件,然后通过"Message.attach"方法将其附到消息对象中即可。

"Message.attach"方法的第一个参数指定了附件上的文件名,第二个参数指定了文件内容的 MIME 类型,第三个参数就是文件内容如果大家不知道要附上的文件 MIME 类型是什么,可以查下 MIME 参考手册。

email_dispatched 信号Flask-Mail 扩展还提供了一个信号"email_dispatched",当邮件被调度时,该信号就会被发出如果大家忘了什么是信号,可以参考 进阶系列的第二篇开发者可以通过这个信号来确定邮件是否被发送成功。

当然,发送成功不代表被接收成功from flask_mail import email_dispatcheddef log_mail_sent(message, app):print Message "%s" is sent successfully % (message.subject)

email_dispatched.connect(log_mail_sent)另外,在跑测试时我们不希望邮件真的被发出去,此时可以将 Flask 应用的配置项"TESTING"设成 True,或者将 Flask-Mail 扩展的配置项"MAIL

SUPPRESSSEND"设成 True这样,调用"Mail.send"方法后,邮件不会被发出,但是你依然可以接收到"email_dispatched"信号本篇中的示例参考了 Flask-Mail 的官方文档和 Flask-Mail 的源码。

本篇的示例代码可以在这里下载题图:pexels,CC0 授权。

#免责声明#

本站提供的一切资源、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。