Log4r使ってみた。gemで入るし便利。
が、メール送って見ると日本語が送れない。オクレ。
で、EmailOutputterのソース見てみる。んーーー、これじゃ送れるわけない。
というわけで見よう見まねで拡張。でもあんまし拡張しやすく作られてない気がします。>EmailOutputter
base64等はくまくまーさん辺りから拝借。
後、to に","で複数指定すると、何か変なことなるのでそれも直してます。(これは俺の使い方がおかしいのかな・・・?)
以下を log4r/outputter/ の下に保存して、"EmailOutputter"の代わりに
"EmailJPOutputter"とすれば一応それっぽく動く。
rubyは全然初心者なので、あんまし文句言わないでください。
| require 'log4r/outputter/emailoutputter'
require 'nkf'
require 'time'
module Log4r
class EmailJPOutputter < EmailOutputter
@@default_charset = 'iso-2022-jp'
def initialize(_name, hash={})
super(_name, hash)
if hash.has_key?(:charset) || hash.has_key?('charset')
@charset = (hash[:charset] or hash['charset'])
else
@charset = @@default_charset
end
end
def base64(text, charset="iso-2022-jp", convert=true)
if convert
if charset == "iso-2022-jp"
text = NKF.nkf('-j -m0', text)
end
end
text = [text].pack('m').delete("\r\n")
"=?#{charset}?B?#{text}?="
end
def send_mail
msg =
case @formatfirst
when true then @buff.join
else @buff.collect{|e| @formatter.format e}.join
end
msg = NKF::nkf('-j', msg)
rfc822msg =
"From: #{@from}\n" +
"To: #{@to.join(',')}\n" +
"Subject: #{base64(@subject, @charset)}\n" +
"Date: #{Time.now.rfc822}\n" +
"Message-Id: <#{"%.8f" % Time.now.to_f}@#{@domain}>\n" +
"MIME-Version: 1.0\n" +
"Content-Type: text/plain; charset=\"#{@charset}\"\n\n" +
"#{msg}"
begin @smtp.sendmail(rfc822msg, @from, @to)
rescue Exception => e
Logger.log_internal(-2) {
"EmailOutputter '#{@name}' couldn't send email!"
}
Logger.log_internal {e}
self.level = OFF
ensure @buff.clear
end
end
end
end
|
親御さんによろしく。
作成日 2007-10-23 (火) 20:46:28
Tag: ruby