@kyanny's blog

My life. Opinions are my own.

TMail でメールに添付された画像ファイルを取り出す

いまなら mail 使ったほうがいいんだろうけども。

https://gist.github.com/848966

raw_message = STDIN.read
email = TMail::Mail.parse(raw_message)
if email.has_attachments?
  email.attachments.each do |attachment|
    image = attachment.read
    filename = attachment.original_filename
  end
elsif email.content_type == 'image/jpeg'
  image = email.body
  filename = email.header['content-disposition'].params['filename']
end

マルチパートメッセージというか MIME というか(なんて呼ぶのが正しいのかわからない)それの理解が浅くて本文のテキストがなくて画像だけ添付したメールから取り出す方法がわからなかったけどふつうに email.body を読むだけでよかった (else 節)

これを書くにあたって tmail の rdoc とソースを読んだのだけど、ソースがとても綺麗で美しくて(大事なことなので二度言いました)読んでいて幸せな気持ちになれたので読んだことないひとには一度読んでみることをおすすめします。特に Attachment < StringIO なので attachment.read で読めるところに惹かれた。