- HTML から引っ張ってきたtitle内の文字列をメールのSubjectにして
- メール本文にはtitleとURL(とフッタ)を入れて
- SMTPで送信する
とか言うのをRubyでやろうとした。
すぐにできるかと思ったら、
せいで酷い文字化けメールを何件も食らい、妙に時間がかかった。
つーかそもそもRubyなんか for 文の書き方すら良く分かってない。なんてことだ。
結局表題程度のことをやるのに2時間半かかったようだ
…貴重な週末が(涙
-
-
- -
-
以下の実装が「間違ってる」「非効率的」「バカ」という場合には是非つっこんでください
require 'iconv' require 'net/smtp' require 'open-uri' require 'optparse' ... def parse_uri(uri) open(uri) {|f| content = f.read # TODO(mowa): Is this ok when the title contains "\n"? if %r{<title>(.+)</title>} =~ content title = Iconv.tou8("#{$+}") else title = "(no title)" end # TODO(mowa): MIME B encoding? ...I don't know about it well! :( # subject = Iconv.conv("iso-2022-jp", "utf-8", title) # escaped_title = subject.to_a.pack('m').gsub(/\n/, '') # subject = "=?iso-2022-jp?B?#{escaped_title}?=" escaped_title = title.to_a.pack('m').gsub(/\n/, '') subject = "=?utf-8?B?#{escaped_title}?=" content = "#{title}\n#{uri}" return subject, content } end ...
ちなみに Iconv.tou8() これ: Ruby: 日本語の文字列を UTF-8 に変換する - bkブログ
utf-8への自動変換も標準ライブラリにないのかしらん…。Python 2.4 で iconv-codec とかいうのが要らなくなったように。
追記:
コメントより
title = Iconv.tou8("#{$+}")
↓
title = Iconv.tou8($+)
そうですね(^^;