|
秀まるお様
野島です。
メールの添付ファイルについて、色々検討していたところ、吉報を頂きました。
早速使用してみましたが、とても使いやすくZipファイルの添付をこれで止めることが
できそうです。
ありがとうございました。
> 返信メール/転送メールの場合はカーソル位置にリンクを挿入するようにしたのと、
>あと、HTMLメールにも一応対応してみました。
>
> マクロそのまま投稿するので、コピペして書き換えて使ってみてほしいです。
>
>-----------------------------------------------------------------------------
>------------
>// 添付ファイルをOneDrive経由渡し-パスワード別便.mac by 斉藤秀夫
>// Version 1.0 2023.04.10
>// Version 1.1 2024.04.08 返信メール/転送メールの場合はカーソル位置にリンク
>を挿入するようにした。
>// HTMLメールにも対応。
>//
>// このマクロは添付ファイルをOneDriveにアップロードしてパスワード付きの共有
>// リンクを作成し、そのリンクを送りつつ、パスワードは別便で送る用のマクロです。
>// 添付ファイルをパスワード付きZipで圧縮して送りつつ、パスワードは別便で送る、
>// いわゆる「PPAP」の代替となるマクロです。
>//
>// このマクロは秀丸メールのVersion 7.19以上でないと使えません。
>//
>// このマクロはOneDriveに添付ファイルをアップロードした後にパスワードおよび
>// 期限付きの共有リンクを作成します。パスワードおよび期限付きの共有リンクを
>// 作成するには有料版のマイクロソフトアカウントが必要です。Microsoft
>Office365
>// のサブスクリプションに入っている人には有料版のアカウントが付いてくるので、
>// そのアカウントを使えばOKです。Office365のサブスクリプション契約が無い
>// 場合は個人のマイクロソフトアカウントを有料アカウントにアップグレードする
>// 方法もあります。
>//
>// OneDriveにアップロードする用に、あらかじめ、「設定 - 全般的な設定...」の
>// 「ウイルス対策 - 詳細」の中にある「Officeファイルをサンドボックス内で開く
>// 用のOAuthログイン」ボタンを押して、OAuthログインをしておく必要があります。
>// それが無いとアップロードに失敗します。
>//
>
> //パスワードの長さを指定します。標準は10です。9以下を指定しても最低10文字
>になります。
> #passwordlength = 10;
>
> //共有URLの有効期限の日数を指定します。普通は7でいいと思います。
> //最低1日〜最高で30日までになります。
> #expirationdate = 7;
>
> loaddll "tkinfo.dll";
> #version = dllfunc("HidemaruMailVersion") * 100 + dllfunc
>("HidemaruMailVersionBeta");
> if( #version < 71999 ) {
> message "このマクロを実行するには秀丸メールのVersion 7.19以上が必要で
>す。";
> endmacro;
> }
>
> $home = dllfuncstr("HomeDir");
> $account = dllfuncstr("CurrentAccount");
> if( dllfunc("IsTuruKameMain") ) {
> message "このマクロは送信するメール専用です。";
> endmacro;
> }
> if( dllfunc("MailType") == 3 || readonly ) {
> message "受信したメールではこのマクロは使えません。";
> endmacro;
> }
> if( dllfuncstr("CurrentHeader", "To" ) == "" ) {
> message "宛先がまだ指定されてません。このマクロは宛先/件名を入力した
>後に実行してください。";
> endmacro;
> }
> if( dllfuncstr("CurrentHeader", "Subject" ) == "" ) {
> message "件名がまだ指定されてません。このマクロは宛先/件名を入力した
>後に実行してください。";
> endmacro;
> }
> #cAttach = 0;
> $uploadList = "";
> while(1) {
> $attach = dllfuncstr("CurrentHeader2", "X-Attach", #cAttach );
> if( $attach == "" ) break;
> if( $uploadList != "" ) {
> $uploadList = $uploadList + ",";
> }
> $uploadList = $uploadList + $home + $account + "\\" + $attach;
> #x = strrstr( $attach, "\\" );
> if( #x >= 0 ) {
> $baseName = midstr( $attach, #x + 1 );
> } else {
> $baseName = $attach;
> }
> $aBaseName[#cAttach] = $baseName;
> $aAttach[#cAttach] = $attach;
> #cAttach = #cAttach + 1;
> }
> if( #cAttach == 0 ) {
> message "添付ファイルは1つもありません。";
> endmacro;
> }
> question "添付ファイルをOneDriveにアップロードしてパスワード付き共有リン
>クを作成します。続行してもいいですか?";
> if( result != yes ) {
> endmacro;
> }
> if( #passwordlength < 10 ) { //2021.04.19 最低10文字にする。
> #passwordlength = 10;
> }
> $password = "";
> #rand_init = (tickcount & 0x7FFFFFFF) + val(second) + val(minute) + val
>(hour);
> $asciilist = "#$%&*+-/0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn
>opqrstuvwxyz";
> #asciilistlen = strlen($asciilist);
> #i = 0;
> while( #i < #passwordlength ) {
> if( #i == 0 ) {
> #rand = #rand_init / #asciilistlen % #asciilistlen;
> } else if( #i == 1 ) {
> #rand = #rand_init % #asciilistlen;
> } else {
> //ヒラメさんの「ランダムなパスワードを生成するマクロ」をパクらせ
>てもらう。
> if( #i == 2 ) {
> #rand = #rand_init;
> }
> call Random #rand;
> #rand = ##return;
> }
> #randPositive = #rand;
> if( #randPositive < 0 ) {
> #randPositive = - #randPositive; //負の数だとダメ。
> }
> $password = $password + midstr( $asciilist, #randPositive % #
>asciilistlen, 1 );
> #i = #i + 1;
> }
> if( strstr( $password, "0" ) < 0
> && strstr( $password, "1" ) < 0
> && strstr( $password, "2" ) < 0
> && strstr( $password, "3" ) < 0
> && strstr( $password, "4" ) < 0
> && strstr( $password, "5" ) < 0
> && strstr( $password, "6" ) < 0
> && strstr( $password, "7" ) < 0
> && strstr( $password, "8" ) < 0
> && strstr( $password, "9" ) < 0 ) {
> //数字が最低1つ入ってないとダメなので、無理矢理数字を付けてしまう。
> call Random #rand;
> #rand = ##return;
> #randPositive = #rand;
> if( #randPositive < 0 ) {
> #randPositive = - #randPositive; //負の数だとダメ。
> }
> $password = $password + midstr( "0123456789", #randPositive % 10, 1
> );
> }
>
> //フォルダの名前 = YYYY年\YYYY-MM-DD-メールアドレス とする。
> $folder = year + "-" + month + "-" + day + "-" + dllfuncstr("SetNameOnly",
>dllfuncstr("CurrentHeader","To")) + "様";
> $folder = dllfuncstr("ValidateForFileName", $folder);
> $folder = "\\添付ファイル渡し\\" + year + "年\\" + $folder;
>
> //「ドキュメント」フォルダ配下に生成する?
> $shareUrl = dllfuncstr("OneDriveUpload", $uploadList, $folder, $password,
>#expirationdate);
> if( $shareUrl == "" ) {
> message "OneDriveへのアップロードに失敗しました。詳しくは「送受信 -
>直前のやりとり記録」を参照ください。";
> endmacro;
> }
> $uploadedFolder = dllfuncstr("OneDriveUpload_GetFolder");
>
> #htmlviewer = dllfunc("IsHtmlMailViewerVisible");
> if( #htmlviewer ) {
> #n = dllfunc("HtmlEdit", "off");
> }
> #mailtype = dllfunc("MailType");
> if( #mailtype == 1 || #mailtype == 2 ) {
> //返信メールまたは転送メールの場合はカーソル位置に挿入する?
> insert "\n";
> } else {
> gofileend;
> }
> if( #htmlviewer ) {
> insert "<div>--------------------------------------------------------
>-------------</div>\n";
> } else {
> insert "-------------------------------------------------------------
>--------\n";
> }
> #i= 0;
> while( #i < #cAttach ) {
> $basename = dllfuncstr("DecodeAttachFileName", $aBaseName[#i] );
> if( #htmlviewer ) {
> $basename = dllfuncstr("PlainTextToHtml", $basename );
> if( #cAttach >= 2 ) {
> insert "<div>添付ファイル(" + str(#i+1) + ") = " + $basename
>+ "</div>\n";
> } else {
> insert "<div>添付ファイル = " + $basename + "</div>\n";
> }
> } else {
> if( #cAttach >= 2 ) {
> insert "添付ファイル(" + str(#i+1) + ") = " + $basename + "\n
>";
> } else {
> insert "添付ファイル = " + $basename + "\n";
> }
> }
> #i = #i + 1;
> }
> if( #htmlviewer ) {
> insert "<div>フォルダ = " + dllfuncstr("PlainTextToHtml",
>$uploadedFolder ) + "</div>\n";
> insert "<div>URLの有効日数 = " + str(#expirationdate) + "日間</div>\n
>";
> insert "<div>パスワード = (別便のメールにて連絡)</div>\n";
> insert "<div>ダウンロードURL = <a href=\"" + $shareUrl + "\">" +
>dllfuncstr("PlainTextToHtml", $shareUrl ) + "</a></div>\n";
> } else {
> insert "フォルダ = " + $uploadedFolder + "\n";
> insert "URLの有効日数 = " + str(#expirationdate) + "日間\n";
> insert "パスワード = (別便のメールにて連絡)\n";
> insert "ダウンロードURL = " + $shareUrl + "\n";
> }
>
> // 添付ファイルの取り消し
> #i = 0;
> while( #i < #cAttach ) {
> #n = dllfunc("UndoAttach", $aAttach[#i]);
> #i = #i + 1;
> }
> if( #htmlviewer ) {
> #n = dllfunc("HtmlEdit", "on");
> }
>
> //パスワード通知メールの作成
> $to = dllfuncstr("CurrentHeaderUnited", "To");
> $cc = dllfuncstr("CurrentHeaderUnited", "Cc"); //バグ修正。Cc: /
>Bcc:対応。
> $bcc = dllfuncstr("CurrentHeaderUnited", "Bcc"); //バグ修正。Cc: /
>Bcc:対応。
> $toname = dllfuncstr("SetNameOnly", $to);
> $subject = dllfuncstr("CurrentHeader", "Subject");
> $sign = dllfuncstr("CurrentSignName");
> #attachhidemaru = hidemaruhandle(0);
> #n = dllfunc("NewMail");
> #n = dllfunc("SwitchSign", ""); //署名無しに一回切り替え
> #n = dllfunc("SetHeaderUnited", "To", $to);
> if( $cc != "" ) {
> #n = dllfunc("SetHeaderUnited", "Cc", $cc);
> }
> if( $bcc != "" ) {
> #n = dllfunc("SetHeaderUnited", "Bcc", $bcc);
> }
> #n = dllfunc("SetHeader", "Subject", "ダウンロード用パスワードの通知 - "
>+ $subject );
> gofiletop;
> beginsel;
> gofileend;
> delete;
> insert $toname + " 様\nクラウドストレージ(OneDrive)から添付ファイルをダ
>ウンロードする用のパスワードをお知らせします。\n\n" +
> "メールの件名: " + $subject + "\n" +
> "パスワード: " + $password + "\n" +
> "\n" +
> "よろしくお願いします。\n";
> if( leftstr($sign, 1) == "\\" ) {
> //切り替えできない
> $signContent = dllfuncstr("LoadTemplate", "sign", $sign);
> if( $signContent != "" ) {
> insert "\n" + $signContent;
> }
> } else {
> #n = dllfunc("SwitchSign", $sign); //署名をここで切り替え
> }
> gofiletop;
> setactivehidemaru #attachhidemaru;
>
> endmacro;
>
>
>//ヒラメさんマクロそのまま
>Random:
>// 疑似乱数を生成する
>// https://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%
>95
>// call Random #1
>// #1: ランダムシード
>// 戻り値 ##return: 乱数
>// 使用方法
>// refreshdatetime;
>// #rnd = tickcount;
>// call Random #rnd;
>// #rnd = ##return;
>// message str(#rnd);
>// call Random #rnd; //先に取得したランダム値を指定すること
>// #rnd = ##return;
>// message str(#rnd);
>##r = (48271 * ##1) % 2147483647; //2^31-1=2147483647
>return ##r;
----*---------*---------*---------*---------*
株式会社オーエヌシステムズ
野島 和廣
(総務省届出番号):C1910088
(適格請求書登録番号):T6040001070685
〒277-0053 千葉県柏市酒井根3-9-4
Tel: 04-7106-7370 Fax:04-7179-5311
Mobile:090-6950-4710
----*---------*---------*---------*---------*
|
|