1
0

More than 1 year has passed since last update.

クリップボードの内容をそのままGmail送信するRubyスクリプト

Last updated at Posted at 2023-05-31

サンプルソース

clip2mail.rb
require 'mail'

# 以下にgmailのアプリパスワードを設定 https://accounts.google.com/IssuedAuthSubTokens?hide_authsub=1
mail_passwd = ENV['GMAIL_PASS']
mail_from   = ENV['GMAIL_ADDR'] # fromのアカウントとアプリパスワードを作ったアカウントは揃える必要がある
mail_to     = ENV['GMAIL_ADDR']

# クリップボードからテキストを取得(Macならpbpaste)
clip = `powershell.exe -command "[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8');Get-Clipboard"`

lines = clip.split(/\n|\r\n/)
mail_subject = lines.shift # クリップボードの一行目がタイトル
mail_body    = lines.join("\n")  # 二行目以降が本文

if mail_body.nil?
  puts '本文が空です。クリップボードにテキストがありません'
  exit
end

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     mail_body
end
m.charset = 'UTF-8'
m.content_transfer_encoding = '8bit'
m.deliver

解説

  • gmail送信はアプリパスワードを発行して使う
  • クリップボードから値を取得するにはPowerShell経由で取得する
    • powershell.exe -command "[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8');Get-Clipboard" とめちゃ長い
    • Macならpbpaste一発でいい
  • メール送信にはmailというgemを使う
  • gmailのアプリパスワードを使った送信はSMTP AUTHで認証するSMTPサーバーとして接続する
  • メールアドレスとパスワードは.bashrcみたいなところで環境変数としてexport しておく

用途・シナリオ

  • エディタで新規ファイル上でメモをがーっと書いてる
  • 保存するほどのことではないが捨てるのも忍びないメモもある(議事録というほどではない記録)
  • だいたい一行目に大事なことが書かれてる
  • これをファイル保存することなくgmailで自分自身に送信しておきたい
  • エディタで全選択&コピー → ruby clip2mail.rb で自分自身にメールできちゃう
  • gmailならタイトルに重みを付けて高速に検索してくれるので後で見返す時に便利
  • 世のメモツールはうっかり前回の議事メモを更新しちゃうのがイヤなところだったのです
1
0
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
1
0