0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyプログラムでメールが送れないときの対処法

Last updated at Posted at 2021-07-17

#はじめに
授業で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運営からこんなメールが来ると思います。

image.png

Googleが勝手にログインされるのを防いでしまい、このままではメールが送れないので、「安全性の低いアプリのアクセスの許可」をオンにしなければなりません。

まず、ここ にアクセスしましょう。

image.png

「アカウントで安全性の低いアプリの許可がオンになっている場合」をクリックし、「安全性の低いアプリの許可をオフにする」というセクションの指示に従って無効にしましょう。

##動作テスト

これで動く条件は整いました。
早速動かしてみましょう。

# 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

image.png

メールが送れてました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?