Indyでのメール送信で件名が文字化けします。

解決


じろう  2008-09-02 04:49:30  No: 31751

Indy10のIdSMTPで
IdMessageに
宛先
送信アドレス
件名
本文(jconvertでjis変換)
BCC
と設定して、

IdSMTP1.Send(IdMessage1)

で送信自体は完了しますが、どうしても件名だけが文字化けしてしまいます。

件名をjconvertでCreateHeaderString2とすると
Yahooメールなどは正常に受信できますが、
GmailやHotmailが
=?ISO-2022-JP?B?・・・・・=?
と表示されてしまいます。

そのまま文字コード変換をせずにsubjectに代入して送信すると
Yahoo、Gmail、Hotmailで一応は表示されますが、
件名の文字列によってはYahooメールで文字化けが発生します。

どのように対応すればいいのか・・・
答えにまでたどり着けません。

どなたかご教授願います。


おかしいな  2008-09-02 23:39:01  No: 31752

>GmailやHotmailが
>=?ISO-2022-JP?B?・・・・・=?
>と表示されてしまいます。
CreateHeaderString2で件名をMIMEエンコードした場合も
上のような現象は再現されず、どちらに送信しても正常にMIMEデコードされて、文字化けなどしないけど。


じろう  2008-09-03 03:46:07  No: 31753

早速の回答有り難うございます。

そうなんですか・・
なぜでしょう・・・?

以下に現在のソースを貼り付けますので、間違いがあればよろしくお願いいたします。

件名が長い場合にはやっぱりダメなんでしょうか・・・
全角・半角が混在して、プログラム的に全角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の違いでしょうか・・・

困りました・・・


なぞ  2008-09-03 18:09:38  No: 31754

>全角・半角が混在して、プログラム的に全角30文字前後の送信が多いです。
これは問題無し、関係ないね。
ソースの手順にも問題無し。
>Indyのインストールミスとか・・
>もしくは、jconvertの違いでしょうか・・・
これも原因とは考え難いけど、ともかく送信パケットをモニタしてみないとね。


ユッケ  2008-09-03 23:28:13  No: 31755

Indyってバグだらけみたいで自分は使わないようにしました。

http://www.hi-ho.ne.jp/~babaq/bsmtp.html

↑のサイトのBSendMail.dllを使ってメールの送信をするように変えましたよw
小難しい設定とかは無く、SMTP・POPがあればとにかく送れるという代物です。
設定があるのかもだけど自分はなくても動いたので・・・


take  URL  2008-09-04 00:36:14  No: 31756

Indyは使った事がないのですが
フリーでメール送信クラスを作った事があるので試してみました。

件名がGMailで化けないようにするためには
まず件名を本文と同じくMIME変換します。
変換後の文字列をRFC2047に従いBASE64エンコードを行います。
それを一般的なメールソフトとGMailに送信したところ
文字化けせずに済みました。

なおシフトJIS扱いの「漢字表示」という文字列を上記の方式で変換すると
漢字表示

となりました。
あと
>=?ISO-2022-JP?B?・・・・・=?
とありますが語尾は「=?」ではなく「?=」ですよね?

とにかくそのソフトからPOPが使えるメールアドレスに送信し
メールソフトのヘッダ表示でその内容を解析した方が
問題点が切り分けできて良いかと思います。

あと過去に同じような質問があるみたいですよ
https://www.petitmonte.com/bbs/answers?question_id=1210


じろう  2008-09-04 03:37:30  No: 31757

皆様、ご回答有り難うございます。

>これも原因とは考え難いけど、ともかく送信パケットをモニタしてみないとね。

知識不足です。。。私ではパケットのモニタ自体どうしていいかわからないです。(^_^;

>あと
>>=?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で解決する方法をとろうかと思います。
自分には解決できそうにありません。

みなさま、有り難うございました。


じろう  2008-09-04 03:39:35  No: 31758

すみません

チェック入れるのわすれてました。


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

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






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