Ruby を使って Gmail 経由でメール送信
プログラムができる人は誰でもやっていると思うけど、自分のメールアドレス(Gmail)を使い、定刻にメールを送ることで、時間にルーズで約束もよく忘れる俺でもマメな男を演出できる
自分の誕生日に設定しておけば、誕生日に誰からもメールがこないなんて寂しい夜はなくなる!
Google アカウントを 2 段階認証にして、セキュリティも上げて一石三鳥!ヤッタネ!
Contents
環境
- ruby 2.3.0p0
- CentOS Linux release 7.2.1511
- Google アカウント(2 段階認証にする)
Google アカウント側の設定
2 段階認証を設定していない時は設定しましょう
2 段階認証プロセスを有効にする(SMS での認証)
-
アカウント設定画面 に遷移する
-
[開始]をクリックする
PIN コードでの認証を追加する
スマホに Authy を入れていて、それで多要素認証を管理しているので、Google アカウントも同様に設定することにする(やらなくてもいい)
前項の続きから始める
アプリケーションパスワードの取得
今回作るアプリケーション用のパスワードを取得する
-
アカウント設定画面 に遷移する
-
[端末を設定] をクリックする
-
[その他(名前を入力)] を選択する
-
※再度パスワードを求められたらログインして続ける
プログラム
ここでハマったのは、パスワードに利用するのが前項で取得した「アプリケーションパスワード」を利用するというところ
4 行目~ 7 行目, 9 行目あたりを適宜読み替える
# -*- coding: utf-8 -*-
require 'mail'
mail_from = '自分の Gmail アドレス'
mail_passwd = '取得した16桁のアプリケーションパスワード'
mail_to = '送信先メールアドレス'
mail_subject= 'メールタイトル'
mail_body = <<EOS
メール本文
EOS
Mail.defaults do
delivery_method :smtp, {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'example.com',
:user_name => "#{mail_from}",
:password => "#{mail_passwd}",
:authentication => :login,
:enable_starttls_auto => true
}
end
m = Mail.new do
from "#{mail_from}"
to "#{mail_to}"
subject "#{mail_subject}"
body <<EOS
#{mail_body}
EOS
end
m.charset = "UTF-8"
m.content_transfer_encoding = "8bit"
m.deliver
テストと実行
Gemfile を作る
source 'https://rubygems.org'
gem 'mail'
ライブラリインストール
コマンドラインで実行
bundle install
コマンドラインから実行して動作確認をする
ruby mail.rb
cron に設定する
あとは
と叩いて cron の設定を行うcrontab -e
俺だと rbenv で Ruby 入れてるのでこんな感じ(ホームディレクトリ以下はてきとー)
0 0 10 12 * /home/miyamiya/.rbenv/shims/ruby /home/miyamiya/bin/happy_birthday_to_me.rb
考察
- 本文をテキストで作っておいて、起動時に適宜読みこむようにすれば数年分はいける
- 本文をある程度自動生成すれば半永久的にいけるかもしれない
- ruby-gmail って gem があったみたい!気づかなかった!
ディスカッション
ピンバック & トラックバック一覧
[…] 以前 Ruby を使って Gmail 経由でメール送信 というブログを書きましたが、今度は Windows で定期実行される処理(PowerShell)からレポートメールを送る必要があったのでメモ。 […]
[…] 以前 Ruby を使って Gmail 経由でメール送信 というブログを書きましたが、今度は Windows で定期実行される処理(PowerShell)からレポートメールを送る必要があったのでメモ。 […]