はじめに
Pythonの軽量WEBフレームワークであるFlaskの拡張機能Flask-Mailを使用して、メールを送信してみました。メールサーバーにはさくらのレンタルサーバーのものを使用しました。
設定
config.pyを以下のように作成。
MAIL_SERVER = '[メールアドレスの@以降]'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = '[メールアドレス]'
MAIL_PASSWORD = '[パスワード]'
MAIL_DEFAULT_SENDER = '[メールアドレス]'
使用方法
from flask import Flask
from flask_mail import Mail, Message
import config
app = Flask(__name__)
app.config.from_object('config')
mail = Mail(app)
@app.route("/")
def index():
msg = Message(recipients=[送信先メールアドレス],
body=[内容],
subject=[タイトル])
mail.send(msg)
メモ
以下のようなエラーが出力された。
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 480, in wrapper
resp = resource(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask/views.py", line 88, in view
return self.dispatch_request(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "./api.py", line 74, in post
mail.send(msg)
File "/usr/local/lib/python3.7/site-packages/flask_mail.py", line 492, in send
message.send(connection)
File "/usr/local/lib/python3.7/site-packages/flask_mail.py", line 427, in send
connection.send(self)
File "/usr/local/lib/python3.7/site-packages/flask_mail.py", line 192, in send
message.rcpt_options)
File "/usr/local/lib/python3.7/smtplib.py", line 867, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (550, b'5.7.1 <[メールアドレス]>... Command rejected', '[メールアドレス]')
不正なアクセスに対するセキュリティを強化するために、日本国外IPアドレスからのアクセスを制限しているらしい。さくらインターネットサーバコントロールパネルのメニューから「国外IPアドレスフィルタ」を選択、「国外IPアドレスからのアクセス制限」を無効にすることで解決。