【Ubuntu】RubyでSMTP over SSLメールを送る

スポンサーリンク

以前の記事で、Ubuntu Serverで「ClamAV」によるウイルスチェック結果を、ローカルユーザ宛てにメール通知するようにした。今回、インターネットメールを送信できるように、Rubyスクリプトを使ってメール送信するようにしたので備忘録を残す。

【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する
前記事でUbuntu Serverをインストールしたが、念の為、アンチウイルスソフトウェア ClamAV をインストールし、定期的にチェックするようにする。 追記(2020/9/6) Ubuntu 20.04 LTS Serverでも動作す...

Ruby関連のインストール

Ruby本体のインストール

$ sudo apt install ruby

Ruby用mailライブラリーのインストール

$ sudo gem install mail

SSLメール送信するスクリプト

私の通信環境は@nifty。そのメール設定でRubyスクリプトのファイル mail_send.rb を作成。(参考.1記事を参考)

#! /usr/bin/ruby
# coding: utf-8

require 'mail'

if ARGV.size != 3
    puts "usage : \n "
    puts "     $ "+  __FILE__ + "  hogeto@exmaple.com  'test mail'  '<text file>'  "
    puts " \n\n "
    exit
end

options = { :address              => "smtp.v6.nifty.com",
            :port                 => 465,
            :user_name            => '<アカウント>@nifty.com',
            :password             => '<アカウントパスワード>',
            :authentication       => 'plain',
            :ssl => true,
              }

Mail.defaults do
  delivery_method :smtp, options
end
mail = Mail.new do
  from     'hogeuser@nifty.com'
  to       ARGV.shift
  subject  ARGV.shift
  body     File.read(ARGV.shift)
end

mail.deliver!

実行できるように権限を設定

$ sudo chmod +x mail_send.rb

試しに送信してみる

メール本文の適当なテキストファイル「body.txt」を作成しておき、下記コマンドを実行してメール送信する。

$ ./mail_send.rb hogeto@sample.co.jp 'test mail' body.txt

無事に届けばOK。

ウイルスチェック結果をメール送信する

以前の記事でのスクリプトを下記のように修正して、ウイルスチェックの結果をメール送信するようにする。尚、上記で作成したRubyスクリプトは、/opt/script/ フォルダにコピーしておく。

if [ $? = 0 ]; then
    echo "ウイルス未検出."
    /opt/script/mail_send.rb hogeto@sample.co.jp "Clamav scan OK." "/var/log/clamav/clamscan.log"
else
    echo "ウイルス検出!!"
    /opt/script/mail_send.rb hogeto@sample.co.jp "Clamav scan NG!" "/var/log/clamav/clamscan.log"
fi

補足

  • Rubyスクリプトなので、スクリプトを工夫する事でメールタイトルや本文などカスタマイズは自由。

require mail でエラーになる場合(2023/10/24追記)

下記コマンドで、ライブラリがあるか確認する。

$ gem list mail

*** LOCAL GEMS ***

mail (2.7.1)

上記のように「mail」が表示されればよいが、なければ下記コマンドでインストール。

$ sudo gem install mail

関連記事

【GitLab】メール送信機能を使う
前回の記事で、GitLabサーバを構築したが、メール送信機能を使えるように設定する。 私は、プロバイダーは@niftyを使っているので @niftyのsmtpサーバ経由でメール送信するように設定。 /etc/gitlab/gitlab.rb...

参考

  1. ruby mail でSMTP over SSL でメールを送る
  2. 第7回 RubyでのメールはMailライブラリにおまかせ! (松永紘)
  3. https://github.com/mikel/mail
  4. Ruby > テキストファイル全行一括読み込みする
  5. Mail@nifty > メールソフトの設定方法(IPv6をご利用の方へ) : @nifty
  6. Mail@nifty > メールソフトの設定方法(POP/SMTP over SSLをご利用の方へ) : @nifty

コメント

タイトルとURLをコピーしました