« ■Delphi2007 PDF版ヘルプの公開 | トップページ | ☆DBGridのセル位置取得 »

☆TWebBrowserで自動ログイン

フリーメール以外でもWEBからアクセスできるメールサービスが多くあり、ブラウザさえ見れる環境があれば外部からメールのチェックが可能ですよね。今回は、そういったメールに自動ログインして、メーラーとして使えるような処理を考えたいと思います。サンプルでは、コード中にユーザーIDやパスワードを入力していますが、危険なので暗号化し、別ファイルに保存して読み書きするのが便利だと思います。そしてUSBメモリーに入れて持ち歩くと、人のパソコンでも簡単に自分のメーラーにすることができます(^^;キー入力によるパスワード等の盗難?の可能性も減りますし・・・。

私は、簡易な暗号しか作れないので、IDは簡易な暗号化をしてファイルに保存し、パスワードのみ入力するようにしています。現在 @nifty、eo、Hotmail、Gmail、Yahoo Groupをチェックできるようにしています。

まず、フォームにTWebBrowserとTButtonを一つずつ配置します。
そして、ログインするための処理を作成します。

var
  IsLogin: Boolean;

procedure TForm1.Login;
var
  URL: String;
begin
  // Gmailの場合
  URL := 'https://www.google.com/accounts/ServiceLogin?'+
         'service=mail&passive=true&rm=false&continue=http%3A%2F%2'+
         'Fmail.google.com%2Fmail%3Fhl%3Dja%26ui%3Dhtml%26zy%3Dl'+
         '&l'+'tmpl=cm_tlsosm_t&l'+'tmplcache=2&hl=ja';
  UserName := 'xxxxxxx@gmail.com'; // ここにユーザーIDを入力します。
  Password := '*******'; // ここにパスワードを入力します。
  IsLogin := False;
  WebBrowser1.Navigate(URL);
end;


次に自動ログインする処理です。 この処理方法については、どのサイトだったのかわからないのですが、いろいろなサイトを参考にさせてもらっています。名前やアドレスが書けず、ごめんなさい。
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  iDoc: IHtmlDocument2;
  I: integer;
  ov: OleVariant;
  iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  iInputElement: IHTMLInputElement;
begin
  if IsLogin then Exit;

  WebBrowser1.ControlInterface.Document.QueryInterface(IID_IHTMLDocument, iDoc);
  if not assigned(iDoc) then
    Exit;

  ov := 'INPUT';
  IDisp := iDoc.all.tags(ov);
  if assigned(IDisp) then
  begin
    IDisp.QueryInterface(IID_IHTMLElementCollection, iColl);
    if assigned(iColl) then
    begin
      for I := 1 to iColl.Get_length do
      begin
        iDisp := iColl.item(pred(I), 0);
        iDisp.QueryInterface(IID_IHTMLInputElement, iInputElement);
        if assigned(iInputElement) then
        begin
          // username ※iInputElement.nameについては、事前にHTMLを見て調べます。
          if (iInputElement.type_='text') and (iInputElement.name='Email') then
            iInputElement.value:= UserName;

          // password ※iInputElement.nameについては、事前にHTMLを見て調べます。
          if (iInputElement.type_= 'password') and (iInputElement.name='Passwd') then
            iInputElement.value:= Password;

          // submit
          if (iInputElement.type_= 'submit') then
          begin
            IsLogin := True;
            iInputElement.form.submit;
          end;
        end;
      end;
    end;
  end;
end;


最後にログインボタンの処理です。
procedure TForm1.Button1Click(Sender: TObject);
begin
  Login;
end;


プログラムにパスワードを書き込んで試した場合、バックアップファイルに残っていたりしますので、ご注意下さい。

|

« ■Delphi2007 PDF版ヘルプの公開 | トップページ | ☆DBGridのセル位置取得 »