Rubyでサイトの死活管理を行いGmailのSMTPサーバ経由で通知メールを送る方法
2024/02/22
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
参考
関連記事
-
Rubyで日時とファイルの取扱い
Rubyで日時を取得して整形した上で、指定したファイルに追記していきたかった。以 ...
-
RubyでCookieを指定した上でスクレイピングする方法
Rubyで通販サイトの特定ページから価格部分のみを抽出したかった。そのサイトでは ...
-
Rubyで基本的な構文のメモ
Railsを勉強する前にRubyの基本的な構文だけは抑えておこうと思ったのでメモ ...
-
ServersManのVPSにRuby on Railsを導入する方法
Ruby on Railsを導入した際のメモ。Cens OSのバージョンは6.3 ...