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側の問題のようなんですが。
こんにちは。
ちょっと気になったので、自分でもやってみました。
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
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)"になっていましたし、別のものに替えると表示が化けましたので
問題ないと思います。
ありがとうございました。
ツイート | ![]() |