#はじめに
授業でRubyを扱ってメールを送るという課題があったのですが、うまく動作しなかったので動作させる方法をまとめました。
今回はGmailでの利用のみ想定しているため@yahoo.ne.jpなどで動くかは未確認 です。
#前提条件
- Postfixをインストールしていること
- Ruby環境が構築済みであること
- CentOS8であること
#やってみる
まず、CentOSからメールを送信するために、外部のSMTPサーバーを経由する必要があります。今回の場合はGmailのSMTPサーバーを利用します。
####必要なパッケージのインストール
$su
#yum install cyrus-sasl cyrus-sasl-plain mailx
必ずrootに切り替えてからSASLをインストールするようにしましょう。
####postfixの設定ファイルに追加で書き込む
/etc/postfix/authinfo
へ認証情報を設定するために、authinfo.dbを作成、権限を与えます。
# postmap /etc/postfix/authinfo
# chmod 600 /etc/postfix/authinfo
下記のうち自分がよく使うテキストエディタで /etc/postfix/main.cf
を編集しましょう。
# nano /etc/postfix/main.cf
# emacs /etc/postfix/main.cf
# vi /etc/postfix/main.cf
追加内容は以下の通り
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
ここで、内容が重複するとwarningが発生すると思うので、かぶってるところがないように確認しながら追加してください。
メールを送信するために、送信元がはっきりしていないとダメなので、googleアカウントのメールアドレスとパスワードを以下に使います。
# echo "[smtp.gmail.com]:587 ここがメアド:ここがパスワード" >/etc/postfix/authinfo
Postfixを再読み込みさせて、設定を反映させる。
# systemctl reload postfix
##ここでgmailをみてみよう
大体の人は、Google運営からこんなメールが来ると思います。
Googleが勝手にログインされるのを防いでしまい、このままではメールが送れないので、「安全性の低いアプリのアクセスの許可」をオンにしなければなりません。
まず、ここ にアクセスしましょう。
「アカウントで安全性の低いアプリの許可がオンになっている場合」をクリックし、「安全性の低いアプリの許可をオフにする」というセクションの指示に従って無効にしましょう。
##動作テスト
これで動く条件は整いました。
早速動かしてみましょう。
# systemctl reload postfix
以下のmailtest.rbファイルを実行します(GemFileなどは各自で入れて必ずセットすること)
require 'mail'
require "openssl"
options={ :address =>"localhost",
:port =>25,
:authentication => :nil,
:openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,
:enable_starttls_auto => true }
body=""
body=body+"本文です。\n"
body=body+"2行目\n"
body=body+"3行目\n"
mail=Mail.new
mail.from="送信元(googleアカウントのやつ)のメアド"
mail.to="送信したいメアド"
mail.cc=""
mail.bcc=""
mail.subject="適当"
mail.body=body
mail.date=Time.now
mail.charset="utf-8"
mail.delivery_method(:smtp,options)
mail.deliver
実行してみます。
$ bundle exec ruby mailtest.rb
メールが送れてました。