Railsでアプリケーションの開発をしていると、メールの設定が必要となるケースは多いです。
データベースの設定情報は、config/database.ymlに設定すれば良いですが、メールサーバーの設定はどこに設定すれば良いか悩むこともあるかと思います。
そこで今回、環境変数にメールサーバー情報を設定する情報を紹介します。
メールサーバ情報の設定
メールを送信するためには、メールサーバーの情報を設定をする必要があります。
config/environments/xxx.rbに設定する方法もありますが、config/initializers配下に設定ファイルmailer.rbを作成して、メールサーバー情報の設定を管理すると便利です。
以下のように設定ファイルを作成して、各環境変数を設定してRails サーバーを再起動すれば完了です。
Rails.application.configure do
config.action_mailer.default_url_options = { host: ENV['MAIL_HOST'],
port: ENV['MAIL_PORT'] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_caching = false
config.action_mailer.smtp_settings = { address: ENV['SMTP_ADDRESS'],
port: ENV['SMTP_PORT'],
user_name: ENV['SMTP_USER_NAME'],
password: ENV['SMTP_PASSWORD'],
}
end
開発環境のメール環境にはMailCatcherが便利
本番環境ではGmailを使用するケースが多いかと思いますが、各開発環境ではMailCatcherを使用すると送信メールを確認することができます。
Dockerfileの例は以下のようになります。
FROM ruby:2.6.1-alpine3.9
ENV TZ=Asia/Tokyo
RUN set -xe \
&& apk add --no-cache \
libstdc++ \
sqlite-libs \
&& apk add --no-cache --virtual .build-deps \
build-base \
sqlite-dev \
&& gem install mailcatcher -v 0.6.5 -N \
&& apk del .build-deps
# smtp port
EXPOSE 1025
# webserver port
EXPOSE 1080
CMD ["mailcatcher", "--no-quit", "--foreground", "--ip=0.0.0.0"]
以下のようなコマンドで、MailCatcherを起動させることができます。(SMTPのポート番号は1025を設定)
送信メールは、ブラウザでhttp://localhost:1080にアクセスすることで確認することができます。
$ docker build -t mailcatcher:0.6.5-ruby2.6.1-alpine3.9 .
$ docker run -d --restart=always --name mailcatcher -p 1025:1025 -p 1080:1080 mailcatcher:0.6.5-ruby2.6.1-alpine3.9