概要
Ruby から Gmail を使ってメール送信する方法を紹介します
認証時にポイントがあるのでそこ注意が必要です
環境
- macOS 10.14.3
- Ruby 2.5.1p57
アプリケーションパスワードを使って送信する
vim Gemfile
gem "gmail"
bundle install --path vendor
vim app.rb
require 'gmail'
gmail = Gmail.new('your-account@gmail.com', 'application_password')
ret = gmail.deliver do
to "your-account@gmail.com"
from "Your Name <your-account@gmail.com>"
subject "subject"
text_part do
body "Hello"
end
end
gmail.logout
bundle exec ruby app.rb
これだけで送信できます
ポイントは認証にアプリケーションパスワードを使う点です
アプリケーションパスワードは普通にログインする際のパスワードとは違い Ruby や自作のスクリプトなどから認証する際に発行する専用のパスワードです
このパスワードを使えば Ruby から Gmail に認証することができます
またアプリケーションパスワードは Google の二段階認証を有効にしていないと使えません
なのでまずは二段階認証を有効にするところから始めなければなりません
ちなみに普通に Google アカウントの ID/PW でログインしようとすると「重大なセキュリティ通知」というメール通知が届きます
「ログインをブロックしました」という旨のメールで結局ログインすることができません
が、Google アカウントの設定で「安全性の低いアプリからのアカウントへのアクセスを許可する」という設定がありこれを有効にすることで普通の ID/PW でログインすることができるようになります
が、これはアンセキュアな方法なのでおすすめできません
IFTTT 経由で送信する
他に IFTTT を使って Ruby から Gmail を送信する方法を紹介します
事前に IFTTT で webhook 経由で Gmail を送信するレシピを作成しておきます
また Gmail 側の設定で Webhook で送信される VALUE
を以下のように設定しておきましょう
この VLAUE1
と VALUE2
を Ruby から設定して IFTTT に送ることでメール本文とタイトルを設定することができます
vim ifttt.rb
require 'net/http'
require 'json'
class IFTTT
def initialize
@url = "https://maker.ifttt.com/trigger/event_name/with/key/xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx"
end
def call_maker(value1, value2)
uri = URI.parse(@url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
req["Content-Type"] = "application/json"
maker_body = {
"value1" => value1,
"value2" => value2
}
payload = maker_body.to_json
req.body = payload
res = https.request(req)
return res.code
end
end
vim app.rb
value1 = "title"
value2 = "subject<br>"
cli = IFTTT.new
cli.call_maker(value1, value2)
bundle exec ruby app.rb
これでメール送信できるはずです
IFTTT の Webhook 経由の Gmail 送信は Content-Type
が multipart/alternative
になるっぽいです
添付ファイルや HTML の埋め込みができるので本文となる文字列に HTML を記載することができます
IFTTT の Gmail サービスは OAuth で認証/許可しているので、この方法のほうがセキュアです
最後に
Ruby から Gmail を送信する方法を 2 通り紹介しました
他にもやり方はいろいろあると思いますがてっとり早そうな方法かなと思います
IFTTT で Gmail サービスをすでに追加している人は IFTTT で Applet を作るのが簡単だと思います
もしそっちのほうが面倒だという場合はアプリケーションパスワードを使う方式にし、それも嫌な場合はセキュリティリスクを覚悟で安全性の低いアプリを信頼する設定をする感じかなと思います
0 件のコメント:
コメントを投稿