Basp21 は SSL に対応していない(POP3:110番ポートでのアクセスです)ので、運用の範囲内でうまく利用する事が必要です。アプリケーションのテスト用のツールとして使うなどして、実際の重要な文書のやりとりに使うのはおすすめではありません。 このサンプルの趣旨は、HTA でも最新 jQuery + twitter-bootstrap が動作する事の確認です ( ここでは実装していませんが、jQuery UI の Resizable のテストは行いました ) 関連する記事 HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール送信ツール HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法 ▼ 初期画面画面下部はIFRAME で、ウインドウの大きさを変えてもフィットするようになっています。この実装には CSS の calc 関数を使用しています。 IFRAME 部分には、iframe_in.html を使用していますが、IFRAME に APPLICATION="yes" を指定する事によって、HTA として動作します。▼ 受信済メールデータ一覧の実行結果『メール一覧』と同じ結果ですが、『メール一覧』ではパスワードの入力が必要で、実際にインターネットからデータを取得します。 『受信済メールデータ一覧』では、『メール本体を全て受信』でいったんデータを可能な限り(256件)受信し、ディレクトリに保存します。そして、『受信済メールデータ一覧』の実行でディレクトリよりデータを取得して表示します(その際、添付ファイルがあれば分離して保存します) さらに、データ行をクリックすると、本文のテキストエリアに受信データの本文を表示しますメールサーバーは 『さくらインターネット』を使用しています main.hta( メール送信部分 )
<html> <head> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css" /> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script> // ウインドウの位置とサイズ top.moveTo( 30, 30 ); top.resizeTo( 800, 800 ); // エラーメッセージ var ErrMessage; // var WshShell = new ActiveXObject("WScript.Shell"); var Basp21 = new ActiveXObject("Basp21"); $(function(){ $("#send").on("click", function(){ pass = $("#pass").val(); if ( pass.trim() == "" ) { alert("パスワードを入力して下さい"); $("#pass").focus(); return; } if ( $("#to").val() == "" ) { alert("宛先を入力してください"); $("#to").focus() return; } ErrMessage = Basp21.SendMail( "user.sakura.ne.jp:587", $("#to").val(), "username@user.sakura.ne.jp" + "\t" + "account" + ":" + pass, $("#subject").val(), $("#body").val(), "" ); // 成功すると空文字列が返り、失敗するとエラメッセージ if ( ErrMessage != "" ) { alert(ErrMessage); } else { alert("メール送信が終了しました。"); } }); $("#taskmgr").on("click", function(){ WshShell.Run("ms-settings:windowsupdate"); }); }); </script> <style> html,body { height: 100%; } body { margin: 0; } /* ブロックを左右に表示 */ .ttl { display: inline-block; width: 150px; vertical-align: top; } .entry { display: inline-block; } .line { margin-bottom: 0; } #head { padding: 16px; } /* IFRAMEコントロール用 */ #head { padding: 16px; width: 100%; height: 360px; background-color: #e0e0e0; } #extend { display: block; margin-left: auto; margin-right: auto; width: calc( 100% - 3px ); height: calc( 100% - 360px - 2px ); border: solid 2px #c0c0c0; } </style> </head> <body> <div id="head"> <p class="ttl"> 宛先 </p> <p class="entry"> <input id="to" type="text"> <span class="ml-5">パスワード</span> <input class="ml-3" style="width:120px;" id="pass" type="password"> </p> <p class="line"></p> <p class="ttl"> 件名 </p> <p class="entry"> <input style='width:500px;' type="text" id="subject"> </p> <p class="line"></p> <p class="ttl"> 本文 </p> <p class="entry"> <textarea style='width:500px;height:150px;' id="body"></textarea> </p> <p class="line"></p> <p> <input id="send" class="btn btn-outline-primary" type="button" value="メール送信"> <input id="taskmgr" class="btn btn-info ml-5" type="button" value="Windows Update"> </p> <h4 class="text-danger"></h4> </div> <iframe id="extend" name="extend" APPLICATION="yes" src="iframe_in.html"></iframe> </body> </html>
iframe_in.html Basp21 の RcvMail メソッドが返す配列は、VBArray なので、toArray() メソッドで JavaScript の配列に変換しています。
<html> <head> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css" /> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script> // 親ウインドウのオブジェクトを使用 var Basp21 = parent.Basp21; var rcv_data; // テーブルの行作成用 var row_data; $(function(){ // ********************************* // Subject,From,Date の一覧のみ // ********************************* $("#list").on("click", function(){ // テーブル表示リセット $("#tbl .row_data").remove(); // 親ウインドウの入力チェック pass = parent.$("#pass").val(); if ( pass.trim() == "" ) { alert("パスワードを入力して下さい") parent.$("#pass").focus(); return; } // 実行中カーソル $("*").css({"cursor": "wait"}); result = Basp21.RcvMail("user.sakura.ne.jp", "username@user.sakura.ne.jp", pass, "LIST", ">C:\\temp\\rcvmail") // 失敗した場合はエラーメッセージが文字列として戻されます if ( typeof result !== "string" ) { // ********************************* // result は、VBArray なので、 // JScript の標準配列に変換 // ********************************* rcv_data = result.toArray(); for( i = rcv_data.length-1; i >= 0; i-- ) { headers = rcv_data[i].split("\t") // IFRAME 内で行を作成して IFRAME 内のテーブルに追加 row_data = $("<tr></tr>") .addClass("row_data") .appendTo( "#tbl" ); // Subject $("<td></td>") .text(headers[0].substring(9)) .appendTo( row_data ); // From $("<td></td>") .text(headers[1].substring(6)) .appendTo( row_data ); // Date $("<td></td>") .text(headers[2].substring(6)) .appendTo( row_data ); } } else { // エラーメッセージ alert( result ); } // 通常カーソル $("*").css({"cursor": "auto"}); }); // ********************************* // メールデータを最大256受信して保存 // ********************************* $("#recieve").on("click", function(){ // 親ウインドウの入力チェック pass = parent.$("#pass").val(); if ( pass.trim() == "" ) { alert("パスワードを入力して下さい") parent.$("#pass").focus(); return; } // 実行中カーソル $("*").css({"cursor": "wait"}); result = Basp21.RcvMail("user.sakura.ne.jp", "username@user.sakura.ne.jp", pass, "SAVEALL", ">C:\\temp\\rcvmail") // 通常カーソル $("*").css({"cursor": "auto"}); // 失敗した場合はエラーメッセージが文字列として戻されます // 成功した場合はファイル名の VBArray になります if ( typeof result == "string" ) { alert( result ); } else { alert( "正しくデータを取得しました" ) } }); // ********************************* // 受信したデータより一覧を表示 // ********************************* $("#datalist").on("click", function(){ // テーブル表示リセット $("#tbl .row_data").remove(); // 実行中カーソル $("*").css({"cursor": "wait"}); // 最新日付順 result = Basp21.SortMail("C:\\temp\\rcvmail","date:",1) if ( typeof result == "string" ) { alert( result ) $("*").css({"cursor": "auto"}); return; } // ********************************* // result は、VBArray なので、 // JScript の標準配列に変換 // ********************************* rcv_data = result.toArray(); for( i = 0; i < rcv_data.length; i++ ) { filename = rcv_data[i]; // メールデータ取得 result = Basp21.ReadMail("C:\\temp\\rcvmail\\" + filename,"subject:from:date:","C:\\temp\\rcvdata") if ( typeof result == "string" ) { alert( result ) $("*").css({"cursor": "auto"}); return; } row_cols = result.toArray(); // IFRAME 内で行を作成して IFRAME 内のテーブルに追加 row_data = $("<tr></tr>") .addClass("row_data") .appendTo( "#tbl" ) .on("click", function(){ filename = $(this).find("td").eq(0).text(); // メールデータの本文取得 result = Basp21.ReadMail("C:\\temp\\rcvmail\\" + filename,"body:","C:\\temp\\rcvdata"); if ( typeof result == "string" ) { alert( result ) $("*").css({"cursor": "auto"}); return; } body_data = result.toArray(); parent.$("#body").val( body_data[0].substring(6)); }) ; // ファイル名(非表示) $("<td></td>") .text(filename) .css({ "display": "none" }) .appendTo( row_data ); // Subject $("<td></td>") .text(row_cols[0].substring(9)) .appendTo( row_data ); // From $("<td></td>") .text(row_cols[1].substring(6)) .appendTo( row_data ); // Date $("<td></td>") .text(row_cols[2].substring(6)) .appendTo( row_data ); } // 通常カーソル $("*").css({"cursor": "auto"}); }); }); </script> <style> .row_data td { cursor: pointer!important; } html,body { height: 100%; } body { margin: 0; } /* ブロックを左右に表示 */ .ttl { display: inline-block; width: 150px; vertical-align: top; } .entry { display: inline-block; } .line { margin-bottom: 0; } #head { padding: 16px; } /* IFRAMEコントロール用 */ #head { padding: 16px; width: 100%; height: 70px; background-color: #e0e0e0; } #extend { display: block; margin-left: auto; margin-right: auto; width: calc( 100% - 3px ); height: calc( 100% - 70px - 2px ); border: solid 2px #c0c0c0; } </style> </head> <body> <div id="head"> <p> <input id="list" class="btn btn-outline-primary" type="button" value="メール一覧"> <input id="recieve" class="btn btn-outline-primary ml-5" type="button" value="メール本体を全て受信"> <input id="datalist" class="btn btn-outline-primary ml-5" type="button" value="受信済メールデータ一覧"> </p> <h4 class="text-danger"></h4> </div> <table class="table table-hover"> <tbody id="tbl"> </tbody> </table> </body> </html>
関連する記事 HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法
|
【HTA ( HTMLアプリケーション )の最新記事】
- HTA / ADO / Jscript : Access( .accdb .mdb ) の読み込みと表示
- HTML Application : JavaScript で新しい Excel の Book を作成する
- HTML Application : JavaScript で Windows のいろいろなフォルダを開く
- HTA (または IE11) で フォルダ選択ダイアログからフォルダとファイルの一覧
- HTA (または IE11) で hostname を実行して標準出力からPC名の取得
- HTA : 『x-frame-options: SAMEORIGIN』の設定されていないページの情報を IFRAME 内に表示して jQuery で取り出す / iframe内 参照と .clone(..
- HTA (HTMLアプリケーション) で JavaScript と VBScript を混在させる手法 / GetObject を VBScript 側で使用する
- HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール送信ツール