#動機
いまだにExcelで作成した週報を毎週メールで提出していて、めんどくさい。
#やること
- Excelで作成した週報のファイル名末尾に日付を付加する
- サブジェクトにも日付を付けExcelファイルを添付する
- 定型文を書いて特定の宛先にメール送信する
これを、
ruby send_weekly_report.rb yyyymmdd
こんな感じで実行したい。
#メール送信の方法
Mailというgemがあり、こことかここの説明がわかりやすかった。
UTF-8でなくISO-2022-JPで送信したい場合は、mail-iso-2022-jpというgemを使う。
#コード
send_weekly_report.rb
# encoding: utf-8
require 'mail-iso-2022-jp'
require 'fileutils'
if ARGV.length != 1 then
abort "引数の数が正しくありません。\nruby send_weekly_report.rb yyyymmdd"
end
yyyymmdd = ARGV[0]
title = '週報'
# 週報ファイル名に日付を付加してコピーする
attachment_file = "#{title}_#{yyyymmdd}.xlsx"
FileUtils.cp("#{title}.xlsx", attachment_file)
@mail = Mail.new(:charset => 'ISO-2022-JP') do
to 'manager@example.com'
cc 'ceo@example.com'
from 'your_name@example.com'
add_file attachment_file
subject "#{title}#{yyyymmdd}"
body <<-EOS
○○様
お疲れ様です。××です。
週報を添付ファイルにて送付いたします。
ご確認のほどよろしくお願いいたします。
EOS
end
@mail.delivery_method :smtp, {
address: 'smtp.gmail.com',
port: 587,
domain: 'example.com',
authentication: :plain,
enable_starttls_auto: true,
user_name: 'your_name@example.com',
password: 'p455w0rd'
}
@mail.deliver!
#補足
- パスワードをハードコードしたくない場合は、ここを参考にして、標準入力から取得する。
- 提出日が金曜日固定ならコマンドライン引数に渡さずコード上で取得してもいいけど、だいたい金曜当日は忘れてたりするので、月曜にも送信できるように、、、。