Ruby 1.9.3 でオレオレ証明書を使用しているSMTPサーバで465番ポートでメール送信する

ちょっとしたメール送信スクリプトを書きました。備忘録。

Ruby 1.9.3で書いたのですが、Ruby 1.9 系で楽にメール送る場合は、mailを使うのがいいようで。
TMailはもう動かないんですね*1

STARTTLSではなくSMTP over SSLかつ、オレオレ証明書を使っているSMTPサーバで送信する部分のコード片です。


6/12追記:コード全体はgistに公開してあります。

#! /usr/bin/env ruby
# coding: utf-8
require "mail"
require "mail-iso-2022-jp"
#送信設定をセット
Mail.defaults do
  delivery_method :smtp, {
      :address => "smtp.example.com",
      :port => 465,
      :domain => "localhost.localdomain",
      :user_name => "account name",
      :password => "password",
      :authentication => "plain",
      :openssl_verify_mode => "none",
      :ssl => true
  }
end
#メール送信
Mail.new(:charset => 'ISO-2022-JP') do
  from "from@example.com"
  to "to@example.com"
  subject "題名テスト"
  body "本文テスト"
end.deliver

もうUTF-8でいいんじゃないかと思いつつ、mail-iso-2022-jpも使いました。
あと、mailで送信する場合に、ポート25で認証なしで送信とかなら、何も考えずに出来るとおもいますが、そこから外れる場合は、mailでどんな風にnet/smtpがラップされているのか、わかってたほうがいいかもしれないです。


ちなみに何書いたかというと、オープンアワーの告知を、このブログとTDCのメーリングリストに同時投稿するスクリプトです。
MLに投稿するのをたまに忘れる、日付を間違える、それぞれに送る内容が微妙に違う似たような文面で間違えそうになる、というような問題を解決しようと半自動化しました。
コマンドラインで"open_hour_mail 6/12"とか打つと、はてなダイアリー*2と、TDCのMLに投稿する仕様です。
オープンアワーは火曜、水曜なので、引数で渡された日付の曜日を判定して、それぞれの曜日に合わせた投稿先、内容でポストしてます。


追記:あ、mail とmail-iso-2022-jpはgemなので、当然Bundlerなりrubygemsなりでインストールしてください。あと、外国の方は、mailとか、割りと大胆にネームスペースを使う印象がありますね。

*1:Ruby1.9.2あたりから?

*2:メールでの日記更新