こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ruby-cgi メールは受信できるのですが文字化けしてしまいます。

下記のように記載しましたが、日本語のメール本文が文字化けしてしまいます。
nkfあたりが怪しいと思うのですが、お手上げです。
よろしくお願いします。

#!/usr/bin/ruby -Ke
require 'nkf'
require 'cgi'
require 'net/smtp'

def sendmail(server, subject, body, sender, recipient)
mail = ''

# メールヘッダを作る
mail << 'To: ' + recipient + "\n"
mail << 'From: ' + sender + "\n"
mail << 'Subject: ' + subject + "\n"
mail << 'Date: ' + Time.now.strftime('%a, %d %b %Y %H:%M:%S %z') + "\n"
mail << "\n"

# メールの本文
mail << body

# 送信!
Net::SMTP.start(server, 25) {|smtp|
smtp.send_mail(mail, sender, recipient)
}
end

cgi = CGI.new

output = ''
output << "ああ" + ":\n"
output << ' ' + "いいい".gsub(/\n/, "\n ") + "\n"

NKF.nkf('-j -m0', output)

sendmail('mailserver@**.co.jp', 'cgi sendmail', output,
'from@mail.co.jp', 'to@mail.co.jp'){|body|
NKF.nkf('-e -m0', body)
}

cgi.out('type' => 'text/plain') {
output
}

投稿日時 - 2006-12-19 17:28:12

QNo.2612702

困ってます

質問者が選んだベストアンサー

> NKF.nkf('-j -m0', output)

NKF.nkf は与えられた文字列を変換し、その結果を戻り値として返すメソッドなので、
これでは変換結果をただ捨てるだけになってしまいます。

output = NKF.nkf('-j -m0', output)

とするか、別の変数に受けて、sendmailという関数に渡すのはそれにする
などする必要があります。

投稿日時 - 2006-12-19 18:43:47

お礼

output = NKF.nkf('-j -m0', output)
と訂正すると難なく日本語メールが表示されました。
ありがとうございました。助かりました。

投稿日時 - 2006-12-20 10:58:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問