Delphi2005 & indy9 でのメール送信


crow  2011-07-08 19:20:17  No: 40766

Delphi2005 & indy9 でのメール送信

特定の条件メールを送信するシステムを作成しています。
いままで特に問題なくメール送信できていたのですが、
納入先の数か所のうち、1箇所だけメール送信時にフリーズする現象に悩まされています。

普段システムの画面にはIdSMTPStatusイベントで取得できる文字列をステータスバーに下記の通り表示をしているのですが、

procedure TForm_Main.IdSMTPStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
  StatusBar.Panels[1].text := 'SMTP:'+AStatusText;
  StatusBar.Update;
end;

フリーズするときは
Resolving hostname ***.co.jp
Connenting to ***.***.***.***
Connected.
Encoding Text ←で止まっています。

納入先とはLAN環境、メールアカウントも違うせいか再現はせず困っています。
本文のサイズは80kbくらいになることもありますが、他の納入先でもさほどかわりません。
添付ファイルは使用していません。
本文に特定の文字があると止まる等のことがあるのでしょうか?


HOta  2011-07-09 17:12:00  No: 40767

indy9をindy10に替えたら如何でしょう。


Statusモニタ  2011-07-10 22:00:48  No: 40768

もし、本当にIndy9のSend関数を実行中にフリーズしているのなら、
IdMessageClient.pasを自分のプロジェクトのフォルダにコピーして、
以下のように自前のStatusメッセージを出すように追加して実行すれば、
メール本文のどの行をEncode中に止まってるのかをチェックできるよ。
納入先での実行時のStatusをモニタするならStatusメッセージをファイルに
書き出す方が良いけど。

procedure TIdMessageClient.SendBody(AMsg: TIdMEssage);
var
  ...................
begin
  ...................
    else begin
      DoStatus(hsStatusText, [RSMsgClientEncodingText]);
      // Write out Body
      //TODO: Why just iso2022jp? Why not someting generic for all MBCS? Or is iso2022jp special?
      if TransferEncoding = iso2022jp then
      begin
        for i := 0 to AMsg.Body.Count - 1 do
        begin
          if Copy(AMsg.Body[i], 1, 1) = '.' then
          begin
 DoStatus(hsStatusText, [Format('Encoding %d line:%s',[i, AMsg.Body[i]])]);    // これを追加
            WriteLn('.' + Encode2022JP(AMsg.Body[i]));
          end

          else begin
 DoStatus(hsStatusText, [Format('Encoding %d line:%s',[i, AMsg.Body[i]])]);    // これを追加

            WriteLn(Encode2022JP(AMsg.Body[i]));
          end;
        end;
      end

      else begin
        WriteBodyText(AMsg);
      end;
    end;
 DoStatus(hsStatusText, ['SendBody Complete']);    // これを追加
  finally
    EndWork(wmWrite);
  end;
end;


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

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






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