mailer作成 その4

メール保持テーブルの改造

現状のメールを保持するテーブルは、以下の通り:

create table mails (
  id        int not null auto_increment,
  unique_id text not null,
  mail_from text not null,
  mail_to   text not null,
  mail_date int not null,
  subject   text not null,
  content   longblob not null,
  primary key (id)
);

未読/既読/リプライ済/転送済などをしめすフラグを追加したほうがよさそう。それぞれのフラグをカラムにするより、まとめてビットフィールドにしたほうがあとでフラグを追加しやすいかな?

メール表示の改造

app/controllers/list_controller.rb
class ListController < ApplicationController
# 中略
  def show
    content = Mail.find(params[:id])['content']
    MailParser.output_charset = "utf-8"
    StringIO.open(content, "r+b") {|f|
      message = MailParser.parse_message f
      @from = (message[:from])
      @to = (message[:to])
      @date = message[:date]
      @date_s = @date.strftime("%y/%m/%d %H:%M:%S")
      @subject = (message[:subject])
      @type = message[:type]
      @subtype = message[:subtype]
      @parts = message[:parts]
      @body = message[:body]
    }
  end
# 後略

app/views/list.rhtmlでは、@typeが"multipart"のとき、partsの各要素がファイル名を持っているかどうかを判定し、ファイル名がなければbodyを表示し、あれば、ファイル名を表示している。
ListController.showで、ファイル名があるpartsの要素は、その内容をそのファイル名でどこかの(publicディレクトリ?)ファイルに出力して、ダウンロードできるようにならないか?