Indy10のIdSMTPで
IdMessageに
宛先
送信アドレス
件名
本文(jconvertでjis変換)
BCC
と設定して、
IdSMTP1.Send(IdMessage1)
で送信自体は完了しますが、どうしても件名だけが文字化けしてしまいます。
件名をjconvertでCreateHeaderString2とすると
Yahooメールなどは正常に受信できますが、
GmailやHotmailが
=?ISO-2022-JP?B?・・・・・=?
と表示されてしまいます。
そのまま文字コード変換をせずにsubjectに代入して送信すると
Yahoo、Gmail、Hotmailで一応は表示されますが、
件名の文字列によってはYahooメールで文字化けが発生します。
どのように対応すればいいのか・・・
答えにまでたどり着けません。
どなたかご教授願います。
>GmailやHotmailが
>=?ISO-2022-JP?B?・・・・・=?
>と表示されてしまいます。
CreateHeaderString2で件名をMIMEエンコードした場合も
上のような現象は再現されず、どちらに送信しても正常にMIMEデコードされて、文字化けなどしないけど。
早速の回答有り難うございます。
そうなんですか・・
なぜでしょう・・・?
以下に現在のソースを貼り付けますので、間違いがあればよろしくお願いいたします。
件名が長い場合にはやっぱりダメなんでしょうか・・・
全角・半角が混在して、プログラム的に全角30文字前後の送信が多いです。
//送信アドレス挿入
IdMessage1.From.Name := CreateHeaderString(UserName);
IdMessage1.From.Address := UserEmail;
//宛先挿入
IdMessage1.ReplyTo.EMailAddresses := IdMessage1.From.Text;
IdMessage1.Recipients.EMailAddresses := Edit1.Text;
//件名挿入
IdMessage1.Subject := CreateHeaderString2(Edit2.Text);
//本文挿入
IdMessage1.Body.Assign(Memo1.Lines);
IdMessage1.Body.Text := ConvertJCode(Memo1.Lines.Text,JIS_OUT);
//BCC挿入
IdMessage1.BccList.EMailAddresses := ListBox1.Items.CommaText;
//SMTP認証
IdSMTP1.Username := ADOQuery6.FieldValues['smtp_account'];
IdSMTP1.Password := ADOQuery6.FieldValues['smtp_pass'];
//SMTP設定
IdSMTP1.Host := ADOQuery6.FieldValues['smtp_server'];
IdSMTP1.Port := ADOQuery6.FieldValues['smtp_port'];
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
mailsend := True;
finally
IdSMTP1.Disconnect;
end;
参考までに、検証していただいた際のソースをいただければ助かります。
Indyのインストールミスとか・・私の環境に依存している場合は
見当違いのスレッドになってしまいますので
もしくは、jconvertの違いでしょうか・・・
困りました・・・
>全角・半角が混在して、プログラム的に全角30文字前後の送信が多いです。
これは問題無し、関係ないね。
ソースの手順にも問題無し。
>Indyのインストールミスとか・・
>もしくは、jconvertの違いでしょうか・・・
これも原因とは考え難いけど、ともかく送信パケットをモニタしてみないとね。
Indyってバグだらけみたいで自分は使わないようにしました。
http://www.hi-ho.ne.jp/~babaq/bsmtp.html
↑のサイトのBSendMail.dllを使ってメールの送信をするように変えましたよw
小難しい設定とかは無く、SMTP・POPがあればとにかく送れるという代物です。
設定があるのかもだけど自分はなくても動いたので・・・
Indyは使った事がないのですが
フリーでメール送信クラスを作った事があるので試してみました。
件名がGMailで化けないようにするためには
まず件名を本文と同じくMIME変換します。
変換後の文字列をRFC2047に従いBASE64エンコードを行います。
それを一般的なメールソフトとGMailに送信したところ
文字化けせずに済みました。
なおシフトJIS扱いの「漢字表示」という文字列を上記の方式で変換すると
漢字表示
となりました。
あと
>=?ISO-2022-JP?B?・・・・・=?
とありますが語尾は「=?」ではなく「?=」ですよね?
とにかくそのソフトからPOPが使えるメールアドレスに送信し
メールソフトのヘッダ表示でその内容を解析した方が
問題点が切り分けできて良いかと思います。
あと過去に同じような質問があるみたいですよ
https://www.petitmonte.com/bbs/answers?question_id=1210
皆様、ご回答有り難うございます。
>これも原因とは考え難いけど、ともかく送信パケットをモニタしてみないとね。
知識不足です。。。私ではパケットのモニタ自体どうしていいかわからないです。(^_^;
>あと
>>=?ISO-2022-JP?B?・・・・・=?
>とありますが語尾は「=?」ではなく「?=」ですよね?
間違えてましたね・・ご指摘ありがとうございます。
>とにかくそのソフトからPOPが使えるメールアドレスに送信し
>メールソフトのヘッダ表示でその内容を解析した方が
>問題点が切り分けできて良いかと思います。
ヘッダは確認しましたが、件名のみおかしいかな?といった感じです。
takeさんは自作ですか・・すごいですね!
takeさんのGmailの対処法は私の場合、jconvertに任せている部分ですね。
エンコードの知識は皆無ですので、自作は私には遠い道のりです。
jconvertのソースを拝見すると、sjis限定となってますし、
手順として、全角文字をjis変換後BASE64エンコードとなってるようなので
takaさんの手順と同じかと思いますが・・・
このあたりに大きな問題があるのでしょうか?
Hotmail→エンコード「せずに」sjisを代入すれば、問題なく表示されます。
Yahoo→エンコード「すれば」問題なく表示されます。
sjisのままだと、件名の内容によってはヘッダに改行が挿入されたり、$とかの文字が現れて・・・いわゆる文字化けが発生します。
こちらの場合は文字列によっては問題なく表示されるケースもあります。
Gmail→基本Hotmailと同様に、エンコードすれば>=?ISO-2022-JP?B?・・・・・?=となりました。
>あと過去に同じような質問があるみたいですよ
既出だったみたいですね。
申し訳ありません。
全く同じ内容のスレッドも見つけました・・(^_^;
その方は解決とはなっていませんでしたが、その後どうされたのでしょうか?
ちょっと数日Indyに振り回されましたが、ユッケさんのように他のDLLで解決する方法をとろうかと思います。
自分には解決できそうにありません。
みなさま、有り難うございました。
すみません
チェック入れるのわすれてました。
ツイート | ![]() |