Day 24 Flask-Mail

这个插件就如同名称一样,是专门寄信使用的(恩对,介绍就这样而已)。

准备

在开始使用之前要先做好前置准备,首先至少要有一个 SMTP Server,这边使用 Google 提供的 SMTP Server,可以申请一个测试用的帐号,也可以使用自己的帐号。

不管用哪种帐号,建议是开启两阶段验证,并且使用应用程序密码,这样可以确保帐号安全(万一哪天不小心被谁看到了这个程序,或是推上 github 之类的,被其他人看到密码,相对来说比较安全)。

那要如何设定呢?在 Google 帐户 里面的安全性 -> 登入 Google 设定好两阶段验证後,应该会看到 应用程序密码 ,像这样:

然後直接点下去後,在 选取应用程序 中选择 其他(自订名称)

随便输入一个名称後,按下产生。

然後最後会出现一组随机产生的 16 位的密码(这边我把它码掉了,虽然不码好像也不会出问题,但我还是习惯把它码掉了),将它复制下来,等一下会用到,然後就结束了。

Flask-Mail 使用

这边开一个新的专案,然後按照惯例还是要使用 pip 安装一下。

$ pipenv install Flask-Mail

安装好了之後,就来建立一下架构吧。大概长这样:

ithome_chatroom
├── templates
│   └── mail.html  # 寄信首页
├── app.py  # 主要的档案
├── config.py  # 设定档
├── Pipfile  # 不管它,建立虚拟环境时自己会出现
└── Pipfile.lock  # 不管它,安装套件时自己会出现

首先要设定一下有关寄信的设定,比较主要要增加的设定就这几个。

config.py

MAIL_SERVER = 'smtp.gmail.com'  # 预设为 localhost
MAIL_PORT = 587  # 预设为 25
MAIL_USE_TLS = True  # 预设为 False
MAIL_USERNAME = <你的 Gmail 帐号>  # 预设为 None
MAIL_PASSWORD = <刚刚的复制的应用程序密码>  # 预设为 None
MAIL_DEFAULT_SENDER = MAIL_USERNAME  # 预设为 None,这个不设也可以

再来就是比较主要的後端了。

app.py

from flask_mail import Mail, Message  # 增加这行

import config


app = Flask(__name__)
app.config.from_object(config)

# 使用 flask_mail
mail = Mail(app)


@app.route('/mail', methods=['GET', 'POST'])
def send_mail():
    if request.method == 'GET':
        ''' 浏览器送出需求要这个页面时 '''
        response = make_response(render_template('mail.html'))
    elif request.method == 'POST':
        ''' 送出寄信 '''
        # 收件人
        recipient = request.values.get('recipient', None)
        # 标题
        title = request.values.get('title', '')
        # 内容
        content = request.values.get('content', '')

        # 制作信件
        msg = Message(title, recipients=[recipient])
        msg.body = content

        # 送出信件
        mail.send(msg)

        response = make_response('Success')
    else:
        response = make_response(redirect(url_for('send_mail')))

    return response


if __name__ == "__main__":
    app.run()

最後是可以写信的前端页面。

mail.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Mail test</title>
</head>

<body>
    <h1>Hello</h1>
    <h2>Mail test</h2>
    <form action="/mail" method="POST">
        <fieldset>
            <legend>Send mail</legend>
            
            <label>收件人</label><br />
            <input type="email" name="recipient" required /><br />
            
            <label>标题</label><br />
            <input type="text" name="title" /><br />
            
            <label>内容</label><br />
            <input type="text" name="content" /><br />
            
            <input type="submit" value="送出" />
        </fieldset>
    </form>
</body>

</html>

既然都写完了,那就直接来看看结果吧,写一封信寄给自己测试一下好了。

然後等它跑一下,你就会在自己的信箱看到自己寄给自己的信了。

那麽就大概这样,寄信其实没有什麽好说的,之所以还要讲它一部分原因是因为这个功能意外的蛮常使用到的,另一部分原因後面会讲到。

大家掰~掰~


<<:  Day24 类别与物件--魔术方法3、trait

>>:  Day 24 深度学习与人工神经网路

Day 9 - 14 Must Know Dev Tools Tricks

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...

[Day 28] 关於 InAppBrowser

InAppBrowser 说在最前面的,以目前的 iOS / Android 生态来看,所谓的 In...

# Day16--ARC到底是虾饺?神秘的实体化背後的秘密

当一个类别实体被指派值(给一个属性、常数或变数)的时候,会建立一个该实体的强参考(strong re...

RxJS 工具类型 Operators (1) - tap / toArray / delay / delayWhen

今天要介绍的是「工具类型」的 Operators,也都不太困难,很好理解,继续轻松学习吧! tap ...

那些被忽略但很好用的 Web API / ImageCapture

疫情时代,视讯串流当头,用视讯镜头来做个线上摄影吧! 自从疫情爆发後,各行各业也开始进行居家办公,...