Log4r使ってみた。gemで入るし便利。 が、メール送って見ると日本語が送れない。オクレ。

で、EmailOutputterのソース見てみる。んーーー、これじゃ送れるわけない。

というわけで見よう見まねで拡張。でもあんまし拡張しやすく作られてない気がします。>EmailOutputter

base64等はくまくまーさん辺りから拝借。

後、to に","で複数指定すると、何か変なことなるのでそれも直してます。(これは俺の使い方がおかしいのかな・・・?)

以下を log4r/outputter/ の下に保存して、"EmailOutputter"の代わりに "EmailJPOutputter"とすれば一応それっぽく動く。

rubyは全然初心者なので、あんまし文句言わないでください。

# log4r/outpuuter/emailjpoutputter.rb
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)
        
        ### build a mail header for RFC 822
        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}"
        
        ### send email
        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

親御さんによろしく。

選択肢 投票
はい 12  
いいえ 12  

作成日 2007-10-23 (火) 20:46:28

投稿者メソ | パーマリンク | トラックバック(34) | コメント(0)

Tag: ruby



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White