8

私は電子メール n00b ですが、Unicode 文字を含む HTML 電子メールを送信するアプリケーションに取り組んでいます (私の友人が「エンコーディング地獄を楽しんでください」と述べたように)。

ヘッダーはSubject:ユーザー入力から取得されるため、Unicode 文字が含まれる場合があります。一部のメール クライアント (GMail や Outlook 2007 など) はこれで問題ありませんが、私の読みでは、ヘッダーにMIME Encoded-Word エンコーディングを使用するのが正しい方法のようです。

これを行うための Ruby ライブラリが見つかりません。ありますか?

また、メッセージを表示するときに UTF-8 を使用するようにメール クライアントに指示する追加するヘッダーはありますか? マルチパートメールを送信しているのでContent-Typemultipart/mixed. 特に Apple Mail.app は、個々の部分で UTF-8 として指定されているにもかかわらず、正しいエンコーディングを使用していません。

4

3 に答える 3

10

オプションで、Base64 エンコーディングを使用して同じことを行うことができます。

require "base64"

value  = Base64.encode64("Your UTF-8 string")
header = "=?UTF-8?B?" + value + "?="

「Q でエンコードされた」ペイロードをマークする「Q」とは対照的に、Base64 でエンコードされたペイロードをマークする「B」に注意してください。後者は、文字列を URL エンコードし、すべての「%」文字を「=」に置き換えることで偽装できます。

「偽造」とは、これを意味します。有効な結果が得られますが、必要以上に多くの文字がエンコードされている可能性があります。この仕様では、 に含まれるすべての文字をエンコードできますが"=" + ByteCodeAsHex、生のヘッダーの人間の可読性が損なわれるだけです。.gsub(/%/, "=")+他に何も利用できない場合、UrlEncode は悪い妥協点ではありません。

于 2008-12-04T20:00:49.893 に答える
5

ああああ!ActionMailer::Quoting方法がありquoted_printableます。

だからここに私がしたことがあります:

def my_email(foo)
  ...
  @subject = quoted_printable(foo.some_subject_with_accented_chars, 'utf-8')
  ...
end

これにより、Mail.app は残りのメールを UTF-8 で表示するようになりました。残りをテストします。

于 2008-12-04T20:17:02.777 に答える
3

純粋なRubyのメッセージ全体についての回答はありませんので、ここにあります。

Net::SMTP.start("localhost") do |smtp|
    smtp.open_message_stream opts[:sender_address], opts[:receiver_address] do |f|

        f.puts "Content-type: text/plain; charset=UTF-8"
        f.puts from
        f.puts to
        f.puts subject
        f.puts message
    end
end

ここで、localhost への接続を開きます。外部 SMTP サーバーを使用することも可能です。net/smtp のドキュメントを参照してください。

最初の行は、メッセージで使用される文字セットを設定します。残りの行は、個別に定義された変数です。

from は の形式のアドレスですFrom: Name here <address@here.fi>。名前が不要な場合は、 のようにアドレスのみを指定できますFrom: address@here.fi

to は同じ構文を使用しますが、例外From:は に変更されていTo:ます。

subject は Subject: subject の形式です。UTF-8 の場合、クライアントに正しく表示するには、Base64 でエンコードする必要があります。

subject = "Subject: =?UTF-8?B?" + Base64.strict_encode64(subject) + "?="

メッセージは UTF-8 でエンコードされたプレーン テキスト メッセージで、接頭辞はありません。net/smtp は適切なメールを作成します。

于 2011-09-14T13:03:47.933 に答える