勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Rubyでサイトの死活管理を行いGmailのSMTPサーバ経由で通知メールを送る方法

   2024/02/22  Ruby

Rubyの勉強で何かツールを作ろうと考えた。また、Railsとかは使わず素のRubyで、尚且つWebページとかは用意せずにコマンドラインからのみ使用ツールを作ってみたかった。サイトの死活管理ツールとか良さげだと思ったのでメモ。

 

環境と作成する機能

Rubyのバージョンは2.3.1を使用。

作成する機能としては特定のURLに接続を試しみてステータスコードが200以外の場合はメールを送信するというもの。またそのプログラムはCronで自動実行すると想定。

 

ソース

require 'open-uri'
require 'mail'

def notification
    mail = Mail.new

    options = {
        :address => "smtp.gmail.com",
        :port => 587,
        :domain => "smtp.gmail.com",
        :user_name => 'ここにGmailアドレス',
        :password => 'ここにパスワード',
        :authentication => :plain,
        :enable_starttls_auto => true
    }
    mail.charset = 'utf-8'
    mail.from "送り元メールアドレス" 
    mail.to "送り先メールアドレス" 
    mail.subject "メールタイトル"
    mail.body "メール本文"
    mail.delivery_method(:smtp, options)
    mail.deliver

end

uri = "チェックしたいページのURL"
begin
    status = open(uri).status
    if status[0].to_i != 200
        notification
    end
rescue
    notification
end

1行目はRubyのライブラリ「open-uri」というものを読み込んでいる。file_get_contents的なものみたい。リファレンスは以下。

https://docs.ruby-lang.org/ja/latest/library/open=2duri.html

2行目は「mail」というライブラリになる。そのままだけどメール送信に関するライブラリになる。こちらのリファレンスは見つからず。

あとはURLをチェックしてステータスコードが200じゃない、もしくはエラー発生時は「notification関数」を呼んでメール送信するという内容。

関数については実行前に記述しておかないといけない。作成時は実行後に書いていたのでエラーが発生した。

 

環境によってはメールが受信できない

これはRubyは関係なくメールサーバの問題だと思われるが、メールが受信できたり出来なかったりした。環境としてはsendmailで何も設定を行わずに起動しただけ。メールサーバ設定は未だによく分からないので、GmailのSMTPサーバを使ってメール送信する方法を用いた。以下がソース。

require 'open-uri'
require 'mail'

def notification
    mail = Mail.new

    options = {
        :address => "smtp.gmail.com",
        :port => 587,
        :domain => "smtp.gmail.com",
        :user_name => 'ここにGmailアドレス',
        :password => 'ここにパスワード',
        :authentication => :plain,
        :enable_starttls_auto => true
    }
    mail.charset = 'utf-8'
    mail.from "送り元メールアドレス" 
    mail.to "送り先メールアドレス" 
    mail.subject "メールタイトル"
    mail.body "メール本文"
    mail.delivery_method(:smtp, options)
    mail.deliver

end

uri = "チェックしたいページのURL"
begin
    status = open(uri).status
    if status[0].to_i != 200
        notification
    end
rescue
    notification
end

 

Cronで実行する

vi /etc/crontab
*/1 * * * * root ruby /aaa/bbb/ccc/check.rb

 

参考

https://qiita.com/nyamage/items/7145159c9a610f99b5d9

 - Ruby

  関連記事

RubyでCookieを指定した上でスクレイピングする方法

Rubyで通販サイトの特定ページから価格部分のみを抽出したかった。そのサイトでは ...

Rubyで基本的な構文のメモ

Railsを勉強する前にRubyの基本的な構文だけは抑えておこうと思ったのでメモ ...

Rubyで日時とファイルの取扱い

Rubyで日時を取得して整形した上で、指定したファイルに追記していきたかった。以 ...

ServersManのVPSにRuby on Railsを導入する方法

Ruby on Railsを導入した際のメモ。Cens OSのバージョンは6.3 ...