環境:Delphi2010, jconvert.pas 1.4
IdSMTPを使ってメール送信しようとしています。
メール件名は日本語で表示されるのですが、
本文は文字化け(?マークばかり)してしまいます。
調べて、jconvertを使ってみましたが、
結果は残念ながら同じで文字化けでした。
どうすれば文字化けせずに送れるのでしょうか?
どなたかアドバイスをお願い致します。
以下がコードです。
IdSMTP1.AuthType := satNone;
IdSMTP1.Host := 'xxx.xxx.ne.jp';
IdSMTP1.Username := 'xxx@xxx.xxx.ne.jp';
IdSMTP1.Password := 'xxxxxxx';
IdSMTP1.Port := 587;
msg := TIdMessage.Create(IdSmtp1);
try
msg.Subject := 'メールタイトル';
msg.Recipients.EMailAddresses := 'xxx@xxx.xxx.co.jp';
msg.From.Text := 'xxx@xxx.xxx.ne.jp';
msg.Body.Text := jconvert.ConvertJCode('メール本文', JIS_OUT);
msg.ContentType := 'text/plain';
IdSmtp1.Connect;
IdSmtp1.Send(msg);
IdSmtp1.Disconnect ;
ShowMessage('送信完了しました。');
finally
msg.Free;
end;
送信したい元の文字列の文字コードがナンであるかを確認すること。
私もDelphi2010(Indy10)のメール送信で引っかかりましたが
jconvertを使わずに回避しました。
sakumaさんのコードに倣えば
msg.CharSet := 'ISO-2022-JP';
msg.Encodeing := meMIME;
を追加してみてはどうでしょう。
私はこれで、ShiftJIS文字列の文字化けを回避できました。
もっとも本文の設定方法が
msg.Body.LoadFromFile('ファイル名');
でしたけど。
>キホンは さん
そ、そうですね・・・(^^;
確認方法がわからないので、また勉強します。
ありがとうございました。
>Quest さん
ありがとうございました。
この方法であっさり成功しました。
私の場合も実際は「msg.Body.Text := Memo1.Text;」です。
ところで、この方法、どうやって見つけられましたか?
何か教本などがあると良いのですが、Delphi2010の書籍は1冊も出ていないようですし・・・
sakuraさん、こんにちは。
参考になったようで、よかったです。
見つけた方法ですが、やはり定番の「ググる」ですね。
Delphi、Indy、SMTPなどの関連キーワードで検索しまくり
CharSetとEncodingのプロパティがあることを見つけました。
(場所は確かfreemlだったと思います。すみません、肝心な部分がうろ覚えで)
で、とりあえず検索できた情報を総合して、「これでどうだ」とやってみたら
あっさり送信できたというわけで・・・。
Questさん
そうでしたか。>ググる
私の方は「jconvert」を見つけて以降、
それを絡めてググってしまっていたため、全く行き着きませんでした。(^-^;
早く、2010対応のバイブル的な本が出て欲しいものです。
あと、大全極意本など・・・。
この度は大変助かりました。
ありがとうございました。
ヘッダは次のように設定します。
msg.ContentType := 'text/plain';
msg.CharSet := 'ISO-2022-JP';
msg.ContentTransferEncoding := '7bit';
日本語の文字コードは自動的に変換されますが、波ダッシュ問題を回避するために「MECSUtils」のMecsMappingFix_UnicodeToJISX0208()関数を使用します。
msg.Subject := Mecsutils.MecsMappingFix_UnicodeToJISX0208(subject);
DelphiではなくC++Builderですが、次のページが参考になると思います。
C++Builder2010とIndy10でメールを送信する
http://www.gesource.jp/programming/bcb/97.html
ツイート | ![]() |