Delphi2007でUTF-8のメールを送信するには

解決


Quest  2011-01-18 07:22:42  No: 39850

Questです。

Delphi2007+Indy10でUTF-8のメールを送信するにはどうしたらいいんでしょうか。
SubjectはAnsiToUtf8関数で変換してMimeエンコードしてやったらそれらしくなったのですが
本文の方はCharsetにUTF-8をセットしても、届いたメールのヘッダーには
Charsetの指定が含まれていません。
NoEncodeというプロパティをFalseにしてみると、本文は生のUTF-8で
送れるようになりましたが、件名が出なくなってしまいます。
何とかUTF-8のメールを送れないでしょうか。

なぜUTF-8なのかというと、通常はISO-2022-JPで問題ないのですが
iPhoneで受信したメールを転送すると化けてしまう問題を何とかしなければ
ならなくなり、文字コードがUTF-8である事を前提にしている事が問題らしいので
じゃあUTF-8で送ってやれば良いんじゃないかと姑息なことを考えた次第で。
まぁ、本来iPhone側の問題のようなんですが。


DEKO  2011-01-18 09:37:24  No: 39851

こんにちは。
ちょっと気になったので、自分でもやってみました。

112.Indy 10 を使って GMail を送受信するには? (Delphi 2007 以前)     
http://ht-deko.minim.ne.jp/tech057.html#tech112

113.Indy 10 を使ってメール(ISO-2022-JP)を送受信するには? (Delphi 2007 以前)     
http://ht-deko.minim.ne.jp/tech057.html#tech113


Quest  2011-01-18 22:07:54  No: 39852

DEKOさん、ありがとうございます。
おかげさまで、うまくいきました。

TIdMessageのOnInitializeISOイベントを自前で記述するというのがミソですね。
その後、Indyのソースを追っていたのですが、日本語環境だとデフォルトで
ISO-2022-JPになってしまうのでどうしようかと思っていたのですが単純なことでした。
こちらのIndyのバージョン(TIdSMTPコンポのプロパティで確認)10.1.5では
OnInitializeISOの第1引数に"VTransferHeader: TTransfer"が追加されていたので宣言を変更しました。
どうやらヘッダーのエンコードに関するようで、デフォルトが"bit8"だったので
とりあえず何も触らないようにしてうまくいきました。

ただ、Thunderbirdで受信して確認したところ、ヘッダーのContent-Typeには
Charset=UTF-8;の記述がありませんでしたが、表示メニューの文字エンコーディングでは
きちんと"Unicode(UTF-8)"になっていましたし、別のものに替えると表示が化けましたので
問題ないと思います。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加