Ruby で正しい情報を収集するのは、他の言語に比べて骨が折れるようです。
今回かなり ISO-2022-JP の MIME 文字列で困りました。まず、NKF.nkf("-WjM", subject) で欲しい文字列は手に入るのですが、渡して実行すると UTF-8 に変換されていました。
また、本文の JIS 作成が良く解らずに調べている途中で、mail-iso-2022-jp の存在を知って余計な時間を使う事をなんとか逃れました。
ソース最後のコメントは、mail ライブラリの smtp.rb の中にあったものですが、シンボルと文字列の違いが最初解らずに納得が行かない時間がちょっとありました。
gem で mail ライブラリ をインストール
ruby 2.4.4p296 (2018-03-28 revision 63013) [x64-mingw32]
C:\Users\sworc>gem install mail
Fetching: mini_mime-1.0.0.gem (100%)
Successfully installed mini_mime-1.0.0
Fetching: mail-2.7.0.gem (100%)
Successfully installed mail-2.7.0
Parsing documentation for mini_mime-1.0.0
Installing ri documentation for mini_mime-1.0.0
Parsing documentation for mail-2.7.0
Installing ri documentation for mail-2.7.0
Done installing documentation for mini_mime, mail after 28 seconds
2 gems installed
C:\Users\sworc>gem install mail-iso-2022-jp
Successfully installed mail-iso-2022-jp-2.0.8
Parsing documentation for mail-iso-2022-jp-2.0.8
Done installing documentation for mail-iso-2022-jp after 0 seconds
1 gem installed
require 'nkf'
require 'pp'
require 'mail'
require 'mail-iso-2022-jp'
# ******************
# メール用変数
# ******************
user = "ユーザ名"
pass = "パスワード"
to = "宛先メールアドレス"
# ******************
# メール内容
# ******************
subject = "日本語の件名"
body = "日本語の\n本文\nです"
mail = Mail.new(charset: "ISO-2022-JP")
mail["from"] = "わたし <#{user}@#{user}.sakura.ne.jp>"
mail["to"] = "あなた <#{to}>"
mail["subject"] = subject
mail["body"] = body
smtp_server = {
:address => "#{user}.sakura.ne.jp",
:port => 587,
:domain => "sakura.ne.jp",
:user_name => "#{user}@#{user}.sakura.ne.jp" ,
:password => pass,
:authentication => "plain",
:enable_starttls_auto => true
}
# ******************
#Pretty Print
# ******************
pp smtp_server
# ******************
# 個別
# ******************
p smtp_server[:address]
p smtp_server[:port]
p smtp_server[:domain]
p smtp_server[:user_name]
p smtp_server[:password]
p smtp_server[:authentication]
p smtp_server[:enable_starttls_auto]
mail.delivery_method(:smtp, smtp_server )
# ******************
#メール送信
# ******************
begin
mail.deliver
rescue => e
p e.message
end
# ******************
# Subject の文字列変換のテスト
# ******************
p NKF.nkf("-WjM", subject)
# ******************
#シンボルと文字列の比較
# ******************
if :login.to_s == "login" then
p "一致"
end
if "login".to_sym == :login then
p "一致"
end
# === Sending via GMail
#
# Mail.defaults do
# delivery_method :smtp, { :address => "smtp.gmail.com",
# :port => 587,
# :domain => 'your.host.name',
# :user_name => '<username>',
# :password => '<password>',
# :authentication => 'plain',
# :enable_starttls_auto => true }
# end
#DEFAULTS = {
# :address => 'localhost',
# :port => 25,
# :domain => 'localhost.localdomain',
# :user_name => nil,
# :password => nil,
# :authentication => nil,
# :enable_starttls => nil,
# :enable_starttls_auto => true,
# :openssl_verify_mode => nil,
# :ssl => nil,
# :tls => nil,
# :open_timeout => nil,
# :read_timeout => nil
#}
関連する記事
Pleiades Eclipse 4.7 Oxygen で Ruby を使って MySQL にアクセスする
エディタのタブの設定