安裝:
>>> pip3 install flask_mail
設置環境變量
>>> export MAIL_USERNAME=發件郵箱地址@163.com
>>> export MAIL_PASSWORD=發件郵箱授權碼
>>> export MAIL_SERVER=smtp.163.com
注意!發件郵箱要開啓SMTP,一般在郵箱的設置界面,並且MAIL_PASSWORD一定要填授權碼,而非密碼,以163爲例:
# -*- coding: UTF-8
# config.py
import os
DEBUG = False
MAIL_SERVER = os.environ['MAIL_SERVER']
MAIL_PORT = 25
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = os.environ['MAIL_USERNAME']
MAIL_PASSWORD = os.environ['MAIL_PASSWORD']
MAIL_SERVER = os.environ['MAIL_SERVER']
MAIL_DEFAULT_SENDER = '[email protected]'
DB_HOST = os.environ['MONGO_PORT_27017_TCP_ADDR']
DB_PORT = 27017
KEY = 'secret'
ACTIVATION_EXPIRE_DAYS = 5
TOKEN_EXPIRE_HOURS = 1
# -*- coding: UTF-8
# flaskMail.py
from flask import Flask
from flask_mail import Message, Mail
import os
app = Flask(__name__)
app.config.from_object('config')
mail = Mail(app)
# 創建郵件內容
msg = Message('email subject',sender='發件郵箱地址@163.com',
recipients=['收件郵箱地址@qq.com'])
msg.body='郵件正文內容'
# 發送郵件,沒有包含附件
with app.app_context():
mail.send(msg)
# 發送郵件,包含有附件
with app.app_context():
with app.open_resource('test.png') as f:
# msg.attach 郵件附件添加
# msg.attach("文件名", "類型", 讀取文件)
msg.attach('test.png','image/png',f.read())
mail.send(msg)
print('已發送!')
>>> python3 flaskMail.py
'已發送!'
如果sender中設置的郵箱和環境變量中設置的郵箱不一致會報錯:
smtplib.SMTPSenderRefused: (553, b'Mail from must equal authorized user', '[email protected]')
如果郵箱沒有設置開啓SMTP或發件郵箱密碼不是授權碼,會報錯:
smtplib.SMTPAuthenticationError: (550, b'User has no permission')