hakeの日記

Windows環境でプログラミングの勉強をしています。

net/smtp - メールの送信

Rubyの勉強
とりあえずマニュアルのサンプルを殆どそのまんま実行。ヘッダ部の日本語のエンコードは無視。いきなり送信はできないみたいなのでPOPbeforeSMTPを行って送信しています。
ヘッダ部のTo:やらFrom:のアドレスには送信にあたって意味がないことがわかった。to_addrにあるアドレスに送信されるんですね、Bcc:なんかがどうやって送信されるのか理解できました。ちなみに送信者の本当のアドレスはX-Apparently-From:にありました。送信自体にはパスワードも使用しないので違う送信アドレスを偽装してできるかとおもったら、さすがにサーバー側で拒否されました(^^ゞ
昨日の受信で文字がjisだったので、送信時の本文も日本語はjisにして送信。


マニュアル:http://www.ruby-lang.org/ja/man/?cmd=view;name=net%2Fsmtp

require 'net/smtp'
require 'net/pop'
require 'nkf'

SMTPSERVER = 'smtp.mail.yahoo.co.jp'
SMTP_PORT  = 25
FROM_ADDR  = 'from_addr'
HELO       = 'HELO domain'

to_addr    = ['to_addr1', 'to_addr2', …]


POPSERVER = 'pop.mail.yahoo.co.jp'
POP_PORT  = 110
ACCOUNT   = 'user_name'
PASSWARD  = 'password'
is_apop            = false   # APOPならばtrueにする
is_pop_before_smtp = true    # POP before SMTPを行う

# POP before SMTP
if is_pop_before_smtp
  pop = Net::POP3::APOP(is_apop).auth_only( POPSERVER, POP_PORT, ACCOUNT, PASSWARD )
end
# SMTP
Net::SMTP.start( SMTPSERVER, SMTP_PORT, HELO ) {|smtp|
    smtp.ready( FROM_ADDR, *to_addr ) {|f|
        f.puts 'From: aamine@loveruby.net'
        f.puts 'To: someone@somedomain.org'
        f.puts 'Subject: test mail'
        f.puts 'Message-Id: <20060913124018.1234567890@smtp.loveruby.jp>'
        f.puts
        f.puts 'This is test mail.'
        f.puts NKF.nkf('-Sj', '日本語の本文')
    }
}