はじめに
参加している勉強会でプログラムを書く練習課題として、rubyでメールを送るというお題があり、実施した内容を以下に記載します。
ちなみに自分が普段使っているgmailから送るプログラムになります。
制限時間がある中での課題だったので、焦りながら実施しましたが、思った以上に参考文献、ライブラリが揃っており、助けられました。
実施環境、必要なもの
- OS :mac
- ruby 2.6.6
- Googleアカウント
実施手順
Googleアプリパスワードの取得
アプリからメール送信する際の認証には、googleアカウントのパスワードをそのまま使うのではなく、googleのアカウント設定で発行するアプリパスワードを使って認証を行います。
(パスワードをそのまま使うより、セキュリティ的におすすめな方法)
上記画面から、「セキュリティ」→「アプリパスワード」を選択後、アプリ:メール、デバイス(自分の場合はmac)を選択後に、生成ボタンを押すと、アプリパスワードが表示されます。
※なお、前提としてgoogleアカウントの二段階認証が有効になっている必要があります。
ruby-gmail gemのインストール
大変ありがたいことに、rubyにはgmailを送信するためのgemがあるので、こちらを利用します。
gem install ruby-gmail
ruby-gmail gemには単にメール送信の他に、受信メールを読んだり、編集したりといろいろ機能があって面白そう。
環境変数の設定(gmailアドレス、アプリパスワード)
セキュリティ観点からgmailアドレスと先に取得したアプリパスワードは、プログラムにベタ書きではなく、環境変数に設定し、プログラムで取得することにします。
export GMAIL_ID="送信したいgmailアドレス"
export GMAIL_PASS="gmailのアプリパスワード"
設定した環境変数を反映させます。
source ~/.bash_profile
メール送信プログラムの作成
今回は、コマンド上で、任意の送信先アドレス、件名、本文を入力できるようにしています。
require "gmail"
USERNAME = ENV[ "GMAIL_ID" ]
PASSWORD = ENV[ "GMAIL_PASS"]
gmail = Gmail.new(USERNAME, PASSWORD)
puts "送信先のアドレスを入力してください"
address_to = gets.chomp
puts "件名を入力してください"
title = gets.chomp
puts "本文を入力してください"
text = gets
message =
gmail.generate_message do
to address_to
subject title
html_part do
content_type "text/html; charset=UTF-8"
body "<p>" + text + "</p>"
end
end
gmail.deliver(message)
gmail.logout
参考記事
プログラムの大部分はこちらを参考にさせていただきました。大変感謝です。