トップ «前の日記(2005-02-27) 最新 次の日記(2005-03-01)» 編集

3 日坊主日記


2005-02-28 [長年日記]

_ [Rails] ActionMailer

標準では UTF-8 で quoted printable …とほほ。

ISO-2022-JP BASE64 にしてみる:

 ActionMailer::Base.server_settings = {
   :address => "mail.example.com",
   :port => 25,
   :domain => 'mail.example.com',
   :user_name => nil,
   :password => nil,
   :authentication => nil,
 }
 ActionMailer::Base.default_charset = "iso-2022-jp"
 ActionMailer::Base.encode_subject = false

 class ExampleMailer < ActionMailer::Base
   def base64(text, charset)
     text = [text].pack('m').delete("\r\n")
     "=?#{charset}?B?#{text}?="
   end
   private :base64

   require 'nkf'

   def topic_copy(topic, recipients)
     @recipients = recipients
     @from = 'info@example.com'
     @subject = base64(NKF.nkf('-j', topic.subject), 'iso-2022-jp')
     @body = topic.content
     # app/views/example_mailer/topic_copy.rhtml: @topic
     # @body = {
     #   "topic" => topic,
     # }
     @sent_on = nil
   end
 end

 class DebateController < ApplicationController
   service :example_mailer
   model :topic
 #...
   def post_topic
     @topic = Topic.find(@params["topic"]["id"])
     unless @params["post_confirm"]
       flash["notice"] = "配信しませんでした。配信するときはチェックを付けてください。"
       redirect_to :action=>"show_topic", :id=>@topic.id
       return
     end
     @topic.sent_on = Date.today
     if @topic.save
       recipients = ["rcpt@example.com"]

       mail = ExampleMailer.create_topic_copy(@topic, recipients)
       mail.mime_version = '1.0'
       mail.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'}
       require 'nkf'
       mail.body = NKF.nkf('-j', mail.body)

       ExampleMailer.deliver(mail)

       flash["notice"] = "配信を完了しました。"
     else
       flash["notice"] = "配信しませんでした。配信日を記録できませんでした。"
     end
     redirect_to :action=>"show_topic", :id=>@topic.id
   end
 end

だめだめ。

ひょっとすると Subject は TMail が面倒を見てくれるのかもだけど、test が通らないので明示的に変換する。

_ [Rails] activerecord-1.7.0

has_and_belong_to_many の unsaved の挙動が直っているみたい。

例えば person.new_record? -> true のときに person.groups << Group.find(1) とかすると groups_people に記録されてしまって Duplicate entry... などと厄介なエラーが起きていた。

試してみたら id column がなくても動くね。primary key (group_id, person_id) でいいみたい。

本日のツッコミ(全1件) [ツッコミを入れる]
# jhklh (2010-10-25 23:17)

hjkljh

[]