私のかわいいIndy坊やについてご相談します。

解決


とまどうペリカン  2011-11-20 22:05:07  No: 41228

いつも、お世話になっています。
私のかわいいIndy坊やについてご相談します。

住んでいる所
  windous XP  delphi7 PRO
  indy10  10_4702   2011/11/18  
相談内容  
  indy10を使ってGmailでメ−ル本文と添付ファイルを送るプログラムを作っています。  
  DEKO様の作られた「インディ10を使ってGMailのを送受信する」を参考にして  http://ht-deko.minim.ne.jp/tech057.html    送信プログラムをつくりました。
名前を仮に'Ten.exe'とします。
'Ten.exe'単体で実行するすると添付ファイルも含めて送信は成功しますが、
'Ten.exe'の送信部分を、他のプログラムに組み込んだり、ボタンだけの最小のプログラムから、起動する'Ten.exe' 外部プログラムにしても,  
途中までは、単体で動かしている時と同じ動きなのですが

  ①  SMTP.Connect  や  IdMessageの設定までは、うまくいく
      SMTP.Send(メッセージ)の場所で、行ったきりで、帰ってこれないみたいです。
      (このプログラムは、応答していません)
①の様になりうまく行きません。

人様からメ−ルを頼まれるとグレてメッセージを持ったままどこかにいってしまうみたいです。

  'Ten.exe'単体としては、上手く働いてくれるので、何とか人様に呼ばれても、きっちり仕事のこなせるように、育てたいのですが、アドバイスをいただけますか。


とまどうペリカン  2011-11-21 01:20:39  No: 41229

<発言削除>


リカン  2011-11-21 01:30:11  No: 41230

<発言削除 + 解決済み解除>


とまどうペリカン  2011-11-21 03:06:41  No: 41231

Indy10 のわけの解らない挙動について相談したとまどうペリカンです。
質問のタイトルが、とぼけたものだったので、掲示板あらしとして処理されたの
でしょうか、質問した本人の知らないうちに解決とされてしまいました。
残念です。
本人にとっては、とても深刻な問題で引き続き解決策を模索しています。
アドバイスか、ここを見るといいよとか教えて頂けたら助かります。


戸惑わないペリカン  2011-11-21 20:06:50  No: 41232

Indy 10 を使って GMail を送受信するには? (Delphi 2007 Before)

http://ht-deko.minim.ne.jp/tech057.html#tech112


戸惑わないペリカン  2011-11-21 20:08:49  No: 41233

ミスった〜  Miss orz


とまどうペリカン  2011-12-13 10:00:10  No: 41234

いつも、お世話になっています。
挙動不振な  Indyについてご相談しました、とまどうペリカンです。
indy10を使ってGmailでメ−ル本文と添付ファイルを送るプログラムを作っています。
2004年ころindyを使って、うまくいってたのに、新しいindy10では、うまく行きません。

indyのせいかと思い、
indy10-4702
indy10-4709
indy10-4710..4711  とためして、みましたがだめでした。

     どのバ-ジョンでも
     SMTP.Connect  は、成功し
     Msg := TIdMessage.Create(SMTP)
    セットして
    SMTP.Send(msg);  までは、いくのですが
    その後を、追跡していくと

      IdSMTP  ・StartLS  をとうり
      IdExplicitTLSClientServerBase  の  TIdExplicitTLSClient.TLSHandshake
      まで、行って、あとは、応答無しの状態です。、

  いつまでも解決がはかれないので、とりあえず、メ-ルプログラム「outlook」を
  ShellExecuteで行なうことにしました。(添付ファイルは、手動で行ないます。)
  こちらは、OKです。

  indyで上手くいけばとおもったのですが、別のやり方で解決しましたので、
  解決とします。(又そのうち挑戦します)

  見守って頂いた皆様、有難うございました。


monaa  2011-12-13 12:51:55  No: 41235

ソースが無いのでなんとも言えませんし、
単体で動くけど〜のくだりが意味不明です。
本家のコードを見ると特に特殊な設定は不要そうですが、
http://www.indyproject.org/sockets/blogs/rlebeau/2005_08_17_a.en.aspx
コードはこんな感じですかね?(XE2のIndy10)

//dekoさんのサンプルに添付ファイルを追加
//http://ht-deko.minim.ne.jp/tech057.html#tech112
//uses IdAttachment, IdAttachmentFile
procedure TForm1.IdMessage_InitializeISO(var VHeaderEncoding: Char; var VCharSet: string);
begin
  VHeaderEncoding := 'B';
  VCharSet := 'UTF-8';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SMTP: TIdSMTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  Msg : TIdMessage;
  Attachment:TIdAttachmentFile; //追加
begin
  SMTP := TIdSMTP.Create(nil);
  try
    SMTP.Host     := 'smtp.gmail.com';
    SMTP.Port     := 587;
    SMTP.Username := 'xxxxxx@gmail.com'; // UserName
    SMTP.Password := 'xxxxxx';       // Password
    SSL := TIdSSLIOHandlerSocketOpenSSL.Create;
    try
      SSL.Host := SMTP.Host;
      SSL.Port := SMTP.Port;
      SSL.Destination := SSL.Host + ':' + IntToStr(SSL.Port);
      SMTP.IOHandler := SSL;
      SMTP.UseTLS := utUseExplicitTLS;
      SMTP.Connect;
      Msg := TIdMessage.Create(SMTP);
      try
        Msg.OnInitializeISO           := IdMessage_InitializeISO;
        Msg.ContentType               := 'multipart/mixed'; //変更
        Msg.CharSet                   := 'UTF-8';
        Msg.ContentTransferEncoding   := 'BASE64'; // BASE64 (7bit)
      //Msg.ContentTransferEncoding   := '8bit';   // RAW(8bit)
        Msg.From.Name                 := 'xxxxxx@gmail.com';
        Msg.From.Address              := 'xxxxxx@gmail.com';
        Msg.Recipients.EMailAddresses := 'xxxxxx@gmail.com';
        Msg.Subject                   := 'Unicode String (subject)';
        Msg.Body.Text                 := UTF8Encode('Ansi String (body)');

        Attachment := TIdAttachmentFile.Create(Msg.MessageParts,'test.jpg');  //追加
        Attachment.FileName := 'test.jpg'; //追加
        Attachment.ContentType := 'image/jpeg'; //追加
        SMTP.Send(Msg);
      finally
        Attachment.Free;
        Msg.Free;
      end;
      SMTP.Disconnect;
    finally
      SSL.Free;
    end;
  finally
    SMTP.Free;
  end;
end;


とまどうペリカン  2011-12-14 07:24:07  No: 41236

Monaa 様  御丁寧に教えて頂き有難う御座います。

私の環境は、delphi7 windows Xp でテストしています。

望みを託して、頂きましたコ-ドを組み込み実行してみましたが、私がテストしているいつもの箇所でストップしてしまいました。

SMTP.Send(Msg)  を実工したあとトレ-スすると

unit IdExplicitTLSClientServerBase  の

procedure TIdExplicitTLSClient.TLSHandshake;
begin
  try
    if (IOHandler is TIdSSLIOHandlerSocketBase) then begin              // g1
      (IOHandler as TIdSSLIOHandlerSocketBase).PassThrough := False;    // g2
        g1を過ぎたあと、g2で止まります。
        止まっても、暴走してるふうではなく、実行環境からプログラムの終了を選択すると
        正常に終了します。    
    end;
  except
    ProcessTLSHandShakeFailed;
  end;
end;

Indy10 Gmail  できてる人がいると思うと、こころ強いですが、

そのうち、気力が回復したら環境を変えて、再度挑戦します。
 七尾様  貴重なお時間を  どうも有難うございました、


戸惑ううペリカン  2011-12-14 07:44:38  No: 41237

monaa様    
すみません、説明不足でした。

単体で動かすと、上手くいくが、の説明
  添付ファイルをgmail で転送するプログラムを直接実行すること。
  メ-ルも添付ファイルも転送できます。  
  べつの実行ファイルから転送するプログラムを、呼び出すと、帰ってこない、
  メ-ルも転送できていない。
  と言う、じょうたいのことです。

いぜんは、単体でならうまくメ-ルと、添付ファイルが転送できていたのですが
  いまは、なにをまちがったのか、単体でもうまく行かなくなっています。
  とほほ

名前まで間違えてすみません。


monaa  2011-12-15 12:34:53  No: 41238

経過報告ですが、
Windows7上でXE2のデフォルトIndyですと問題なく動作します。
ですが2009のデフォルトIndyと比較すると生成されるメールソースに若干の違いが見られました。
Indyは最新版を使ったほうが良いようです。
Indyのソースは私には難解なため把握できていませんが、
エラーも出さずただ停止しているという状況は恐らく入力終了コードが生成されていないのだと思います。
D7もXPもあるにはあるのですが、両方インストールしてない状態なのでちょっと面倒です。
ちなみに現状でファイルを添付しないメールの送信は可能ですか?
あと、以前からindyは日本語が問題となることが多かったので、添付ファイルのパスに日本語が入っていないか確認してみてください。
それでもダメなら、暇を見てxp,d7,indy10やってみます。


とまどうペリカン  2011-12-17 04:26:33  No: 41239

Monaa 様  いつも有難うございます。
見ず知らずの私のために貴重な時間をお使い頂き感謝致します。
XE2  で動いてると聞くだけでも、励みになります。

ご質問いただきましたが、現状では、添付ファイルのあるなしにかかわらず、
メ-ルの送信が、完了できません。エラ-も出さずにただ停止している状態です。

前回、TLSHandshake  訳のわかないるーぷに「入ると書きましたが、
きょうは、一歩前進しました。
TLSHandshake  の後をトレ-スすると

IdSSLOpenSSL  の  SetPassThrough(const Value: Boolean);    に着きました。
ここは、SMTP.Connect後、2回か通過して  
SMTP.Send(Msg)  後  もう一度通ります。

  この3度目のとき  fPassThrough =false  例外を引き起こし
    raise EIdOSSLCouldNotLoadSSLLibrary.Create(RSOSSLCouldNotLoadSSLLib  で
    エラ-も出さずにただ停止している状態になるみたいです。  

  とはいえなんのことやらわからず『ターヘル・アナトミア』を前にした玄白さんのようですが
  delphi indy EIdOSSLCouldNotLoadSSLLibrary をキ-ワ-ドに探して見ると有難い事に
  当  「Q&A掲示板」で

   2009/05/27(水)  Delphi5とindy10の組み合わせでgmailに送信 と言う質問を捜すことが出来ました。
   indyは過去にも多くの方を悩せているのですね。

   ここでのご回答も参照しつつ、
   とりあえずは、「  outlook  」で代行運転しているし、ぼちぼちやりたいとおもいます。
  それにしても、喉にささった小骨のようです。

  有難うございました。


解決したペリカン  2011-12-17 23:57:47  No: 41240

皆様、ご心配をおかけしました。
  私のindy坊やが帰ってくるようになりました。
  先日、ご報告しました、  当「Q&A掲示板」( 2009/05/27(水))の中で、
  2009/06/28(日) 18:43:45  「ak」さんが回答されている内容を手がかりに
  openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip  をダウンロ-ドしてみたところ
  IdSSLOpenSSLHeaders10.pasと2つのDLL(libeay32.dll・ssleay32.dll)が内包されています。
  IdSSLOpenSSLHeaders.pas  は、新しいindy10ですでにインスト-ルしていますので、何もしないで
  2つのDLL(libeay32.dll・ssleay32.dll)だけを、添付ファイル付きメ-ルを実行するデレクトリ-にコピ-していれたところ上手くいくようになりました。
  単体としても、他のプログラムから呼び出してもOKです。
  ただし、Monaa 様から、ご指摘いただきましたように添付ファイルのアドレスに日本語があるとだめみたいです。
  私の場合  「C:\DFwork3\レシピ下さい\bZip\Re01E111114001cm.zip」  の中の  「レシピ下さい」がだめです。

  とりあえず、windows xp delphi7 indy10 でうまくいきそうな  プログラムを置かせてください。

//内容は、dekoさんのサンプルを参考に
//http://ht-deko.minim.ne.jp/tech057.html#tech112
//添付ファイルの処理をを付け加えたものです
//SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
procedure TMail_Send2F.IdMessage_InitializeISO(var VHeaderEncoding: Char; var VCharSet: string);
begin
  VHeaderEncoding := 'B';
  VCharSet := 'UTF-8';
end;

procedure TMail_Send2F.GMail_Send;
var
  SMTP: TIdSMTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  Msg : TIdMessage;
  asubject,abody,aattach:String;
  Adr_Frm,Adr_To,PasWd:String;
begin
  asubject:=Mail_subjectMake(MailSendSw,edtSubject.Text); // 単に subjectを作っているだけ
  abody   :=memBody.Text; // jconvert.ConvertJCode
  // delphi7  indy10 になってから日本語変換は要らない ? 変換すると化ける  
  //cccccccccccccccccccccccccccccccccc
  Adr_Frm:=NowHos.MlAdr;   //送信元
  Adr_To :=NowIri.i_MlAdr; //送信先
  PasWd  :=NowHos.Paswd;

  //SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
  SMTP := TIdSMTP.Create(nil);
  try
    SMTP.Host     :=NowHos.Shost;         // smtp.gmail.com
    SMTP.Port     :=patoi(NowHos.Sport);  // 587

    SMTP.Username :=NowHos.Yname;
    SMTP.Password :=NowHos.Paswd;
    SSL := TIdSSLIOHandlerSocketOpenSSL.Create;
    try
      SSL.Host := SMTP.Host;    // smto.gmail.com
      SSL.Port := SMTP.Port;    //  587
      SSL.Destination :=format('%s:%d',[ SSL.Host, SSL.Port ] );
      SMTP.IOHandler := SSL;
      SMTP.UseTLS    := utUseExplicitTLS;
    //SSSSSSS  送信 SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
     if SMTP.Connected then SMTP.Disconnect;
     try
      SMTP.Connect;
      try
        Msg := TIdMessage.Create(SMTP);
        try
         with Msg do begin
            OnInitializeISO           := IdMessage_InitializeISO;
            ContentType               := 'text/plain';
            CharSet                   := 'UTF-8';
            ContentTransferEncoding   := 'BASE64'; // (7bit)
            From.Name                 := Adr_Frm;
            From.Address              := Adr_Frm;
            Recipients.EMailAddresses := Adr_To;
            Subject                   := asubject;
            Body.Text                 := abody;
         end;
         // TTTTTT   添付ファイルの処理  TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
         aattach:= edtAttach.Text;
         if aattach <> '' then begin
            msg.ContentType := 'multipart/mixed';
            with TIdAttachmentFile.Create(Msg.MessageParts,aattach) do begin
                 FileName:=JConvert.ConvertJCode(ExtractFileName(aattach), JIS_OUT);
            end;
         end;
         //ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
         /// SousinCk(1);
         SMTP.Send(msg);
         except on E:Exception do
         //StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
         end;
         finally
           Msg.Free;
         end;
     finally
      SMTP.Disconnect;
     end;
    finally
      SSL.Free;
    end;
  finally
    SMTP.Free;
    ShowMessage('送信完了しました。');
  end;
end;
//EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

Monaa 様のご助言が無ければ、くじけて
 喉に小骨を刺したまま年をこしたかも知れません。

管理人様、誰かが付けた、解決のマ-クを外していただき、チャンスをいただけた事を感謝します。
問題が無い見たいので、完全解決といたします。  

indy坊やと共にどうも、有難うございました。メリ-・クリスマス。


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

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






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