3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyでgmailからメールを送信する

Posted at

はじめに

参加している勉強会でプログラムを書く練習課題として、rubyでメールを送るというお題があり、実施した内容を以下に記載します。

ちなみに自分が普段使っているgmailから送るプログラムになります。

制限時間がある中での課題だったので、焦りながら実施しましたが、思った以上に参考文献、ライブラリが揃っており、助けられました。

実施環境、必要なもの

  • OS :mac
  • ruby 2.6.6
  • Googleアカウント

実施手順

Googleアプリパスワードの取得

アプリからメール送信する際の認証には、googleアカウントのパスワードをそのまま使うのではなく、googleのアカウント設定で発行するアプリパスワードを使って認証を行います。
(パスワードをそのまま使うより、セキュリティ的におすすめな方法)

Account settings

上記画面から、「セキュリティ」→「アプリパスワード」を選択後、アプリ:メール、デバイス(自分の場合はmac)を選択後に、生成ボタンを押すと、アプリパスワードが表示されます。

※なお、前提としてgoogleアカウントの二段階認証が有効になっている必要があります。

ruby-gmail gemのインストール

大変ありがたいことに、rubyにはgmailを送信するためのgemがあるので、こちらを利用します。

dcparker/ruby-gmail

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

参考記事

プログラムの大部分はこちらを参考にさせていただきました。大変感謝です。

【Ruby】Gmailアカウントでメール送信 - TakBoy's Programing Note

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?