flask-mail的使用

說明

來源: flask web開發第六章
  很多類型的應用程序都需要在特定事件發生時提醒用戶,而常用的通信方法是電子郵件。 雖然 Python 標準庫中的 smtplib 包可用在 Flask 程序中發送電子郵件,但包裝了 smtplib 的 Flask-Mail 擴展能更好地和 Flask 集成

1、flask-mail smtp服務器設置

    MAIL_SERVER     127.0.0.1   郵件服務器
    MAIL_PORT       25      電子郵件服務器的端口
    MAIL_USE_TLS    False   啓用傳輸層安全協議
    MAIL_USE_SSL    False   啓用安全套接層協議
    MAIL_USERNAME   None    郵件賬戶的用戶名
    MAIL_PASSWORD   None    郵件賬戶的密碼

    這一堆忘了沒關係, 直接導入 from flask-mail  按ctrl+鼠標左鍵,然後查找 init_mail 

flask-mail的使用

2、安裝

安裝 : pip install flask-mail
或者 : ide安裝
        file --> settings --> project --> project interpreter --> 點+號 直接搜flask-mail安裝

3、準備

     環境: windows 7  
     python版本: 3.6
     開發工具: pycharm

  配置文件中的密碼帳號應直接保存在環境變量中,因爲開源之後可能會暴露
    1、windows 環境變量
        set MAIL_USER="[email protected]"
        set MAIL_PASSWD="youpassword"
        查看 echo %MAIL_USER%

  2、linux環境變量
      export MAIL_USER="[email protected]"
      export MAIL_PASSWD="youpassword"
      查看 echo $MAIL_USER

3.1、先來一封簡單郵件

目錄結構:  conf.py  與 start.py 
1、conf.py配置
    from flask import Flask

    app = Flask(__name__)

    app.config['MAIL_SERVER'] = "smtp.xx.com"
    app.config['MAIL_PORT'] = 25
    app.config['MAIL_USE_TLS'] = True
    app.config["MAIL_USERNAME"] = os.environ.get('MAIL_USER')
    app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWD")

2、start.py
    from conf import app
    from flask_mail import  Mail, Message

    mail = Mail(app)

    msg = Message("test subject", sender='[email protected]',
                                recipients=["要發送的郵箱@mail.com", ])      # 這裏要注意 是列表

    msg.body = "test"
    msg.html = '<b> html </html> body'

    with app.app_context():
            mail.send(msg)

3、運行效果

  flask-mail的使用

4、各種錯誤碼 可以查看: http://www.hb-163.com/uploads/soft/port-v2.0.HZ.pdf
flask-mail的使用

3.2、web發送郵件

目錄結構:   
 mail
        conf.py   
        mail_from.py
        send_mail.py
        start.py
    templates
       base.html

3.2.#、安裝

flask , flask_wtf,  flask_mail,  flask_bootstrap,  flask_moment

3.2.1、conf.py配置

from flask import Flask

    app = Flask(__name__)

    app.config['MAIL_SERVER'] = "smtp.xx.com"
    app.config['MAIL_PORT'] = 25
    app.config['MAIL_USE_TLS'] = True
    app.config["MAIL_USERNAME"] = os.environ.get('MAIL_USER')
    app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWD")

3.2.2、mail_conf配置

    from wtforms import SubmitField, StringField
    from wtforms.validators import DataRequired
    from flask_wtf import FlaskForm

    # 需要導入 from flask_wtf import FlaskForm
    class NameForm(FlaskForm):
            mail_recpto = StringField('請輸入收件人: ', validators=[DataRequired()] )
            mail_sub = StringField('請輸入主題: ', validators=[DataRequired()] )
            mail_data = StringField('請輸入內容: ', validators=[DataRequired()] )
            submit = SubmitField('發送郵件')

3.2.3、send_mail配置

# 用於郵件發送使用
from flask_mail import Mail,Message
from conf import app

# 初始化
mail = Mail(app)

# 在界面上接收三個參數,主題,收件人,內容
def mail_form(subject,recpto,data):
    lirecp=[]
    lirecp.append(recpto)
    msg = Message(subject, sender=app.config["MAIL_USERNAME"],
                  recipients=lirecp)

    msg.body = "test"
    msg.html = '<b> %s </html>' %(data)

        # 激活上下文,然後發送郵件 
    with app.app_context():
        mail.send(msg)

3.2.4、start.py配置

  # 導入發送以及app參數
    from send_mail import mail_form, app
    # 重定向、url跳轉、模板
    from flask import render_template, redirect, url_for
    from flask_bootstrap import Bootstrap
    from flask_moment import Moment

    # 初始化bootstrap
    bootstrap = Bootstrap(app)
    moment = Moment(app)

    # 導入郵件發送的類
    from mail_from import NameForm

    # 路由函數
    @app.route('/', methods=['GET', 'POST'])
    # 視圖函數
    def index():
            mail_addr = None
            form = NameForm()
            # 當有點擊事件的時候獲取參數
            if form.validate_on_submit():
                    print("form: ",form.data)
                    # 獲取輸入的三個參數
                    mail_recpto = form.mail_recpto.data
                    mail_sub = form.mail_sub.data
                    mail_data = form.mail_data.data
                    # 這裏就回到了郵件發送的Py文件
                    mail_form(mail_sub, mail_recpto, mail_data)
                    # 發完之後強制讓它再次回到主頁上
                    return redirect(url_for('index'))
            return render_template('base.html', form = form)

    if __name__ == '__main__':
            app.run(debug=True)

3.2.5、base.html

  來源於flask web開發一書

{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}mail{% endblock %}

{% block head %}
{{ super() }}
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
<link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
{% endblock %}

{% block navbar %}
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
    </div>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}

{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}

3.2.6、最終效果

flask-mail的使用
flask-mail的使用

3.2.7、參考資料

   form表單form表單提交方式jinja2模板

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章