[ 新規に投稿する ]

添付ファイルをOneDrive経由渡し-パスワード別便通知No.12489
じゅげむ さん 24/04/08 15:32 [ コメントを投稿する ]
   秀丸メールには、いつもお世話になっております。

 マクロ「添付ファイルをOneDrive経由渡し-パスワード別便通知」を便利に活用させていただいております。

 できれば、送信時に自動起動させたいと思っておりますが、送信操作をすると自動実行マクロが実行される前にURL折り返しチェックが効いてしまうためか、生成されたリンクが改行されて送信されてしまいます。

 マクロの方でURLを生成した際に、折り返しを禁止するコードを入れれば良いのかと思いますが、マクロの記述に弱く、どこを修正すれば良いのか、分かりません。

 ご指導いただければ幸いです。

 ついでに言えば、自動実行時に生成されたパスワード送信メールも送信操作なしに続けて自動送信されると良いのですが、これは、元のメールとは別メールなので難しいのでしょうか。

じゅげむ
[ ]
RE:12489 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12490
秀まるお2 さん 24/04/08 18:00 [ コメントを投稿する ]
   まず、URLが自動折り返しされてしまうのは、「全般的な設定・上級者向け・確認メッセージ・確認メッセージ2」の中にある

    URLが自動折り返しされる時:


 の設定を、「URLを自動折り返し禁止にする」にすればいいです。マクロはいじらなくていいです。

 あと、マクロ実行後の送信については、やはり添付ファイルの送信なのでマクロ実行で自動送信というのはちょっと危ないと思います。そもそも安全のためにマクロを使う訳なのに、勝手に送信されると安全でなくなってしまいます。手間がかかっても「今すぐ送信」か「あとで送信」コマンドを実行してもらうのがいいです。

 マクロを直して送信までしてしまうことは一応可能ではありますけども。
[ ]
RE:12490 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12491
じゅげむ さん 24/04/09 00:09 [ コメントを投稿する ]
  ご返信ありがとうございます。

折り返し禁止については、ご指摘のとおり設定しておりますが、「添付ファイルOneDrive経由渡し-パスワード別便通知マクロ」を送信時の自動実行マクロに設定すると、自動実行されたマクロによって生成されたURLは折り返し禁止にならないというのが問題意識です。

あと、舌足らずでしたが、自動実行と言った趣旨は「今すぐ送信」か「あとで送信」を実行したときに、自動実行されるように登録するという趣旨であり、完全に自動にするわけではありません。

「今すぐ送信」をクリックした際に、(添付ファイルがあるかどうか確認し、ある場合に実行するよう書き足した)「添付ファイルOneDrive経由渡し-パスワード別便通知マクロ」が実行されるようにして、添付ファイルのOneDrive経由渡しを忘れないようにしたいと思っております。

この場合、「今すぐ送信」をクリックした直後にURLの折り返し禁止が働いてしまうので、OneDriveのURLを生成する添付ファイルOneDrive経由渡し-パスワード別便通知マクロの中で折り返し禁止処理をさせないと生成されたURLは折り返し禁止にならないように思いますが、いかがでしょうか。

じゅげむ
[ ]
RE:12491 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12492
秀まるお2 さん 24/04/09 09:01 [ コメントを投稿する ]
   URLの自動折り返しが効かない件ですが、マクロを「あとで送信/今すぐ送信時」の自動起動マクロとして登録して使うテストをしたら現象が再現できました。たしかにこの場合はURLの自動折り返しの処理がマクロ実行前になってしまい、自動折り返しなしで送信されてしまうようでした。

 そこは改良させていただきます。

 さらには、パスワード通知のメールだけ置いてけぼりになるのも理解できました。これも同じく自動送信するようにマクロを改良してみます。

 ただ、1つ確認なんですが、今回の件はマクロを「あとで送信/今すぐ送信時」の自動起動マクロとして使う場合の話ってことでよろしいのやら?。そうだという前提なら話が合うのですけども。

 とりあえずそういう前提でマクロ直してみます。少々お待ちください。
[ ]
RE:12492 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12495
じゅげむ さん 24/04/09 11:16 [ コメントを投稿する ]
  ありがとうございます。

はい、「あとで送信/今すぐ送信時」の自動起動マクロとして使う予定です。
よろしくお願い致します。
[ ]
RE:12495 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12496
じゅげむ さん 24/04/09 11:20 [ コメントを投稿する ]
  そういえば、もう一点、改良をお願いしたい点がありました。

現在のマクロだと私の環境では、生成されたOneDriveのリンクURLがメールの末尾に入ります。

返信メールや転送メールでこのマクロを実行するとリンクの存在に気がついてもらえないので、メール本文の後(返信元メールの前)にリンクが入った方が良いと思うのですが、いかがでしょうか。
[ ]
RE:12496 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12500
もみじ さん 24/04/09 14:56 [ コメントを投稿する ]
 
じゅげむさん
こんにちは。

こちらは、同じ要望をしたところ、対応してもらったばかりでした。

https://www.maruo.co.jp/turukame/5/index.html



>そういえば、もう一点、改良をお願いしたい点がありました。
> ......
>返信メールや転送メールでこのマクロを実行するとリンクの存在に気がついてもらえないので、メール本文の後(返信元メールの前)にリンクが入った方が良いと思うのですが、いかがでしょうか。
[ ]
RE:12500 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12502
じゅげむ さん 24/04/09 16:41 [ コメントを投稿する ]
  もみじさん

 おしらせありがとうございます。
 なんとタイムリーでした。

秀まるおさん

 ありがとうございます。
 便利になりました。

じゅげむ
[ ]
RE:12502 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12503
秀まるお2 さん 24/04/09 16:56 [ コメントを投稿する ]
   マクロ改良しました。「あとで送信/今すぐ送信時」の自動起動マクロに指定していてもうまく動くように出来たと思います。URLの自動折り返し禁止もやってます。

 あと、返信メール/転送メールやHTML形式メールでもうまく動くようになってるのは、まさに今日、もみじさんの話があって直した所でした。

------------------------------------------------------------------------------------------------
// 添付ファイルをOneDrive経由渡し-パスワード別便.mac by 斉藤秀夫
// Version 1.0   2023.04.10
// Version 1.1   2024.04.08 返信メール/転送メールの場合はカーソル位置にリンクを挿入するようにした。
//                          HTMLメールにも対応。
// Version 1.2   2024.04.09 「あとで送信/今すぐ送信」の自動起動マクロとして使えるようにする。
//
// このマクロは添付ファイルを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;
    }
    #reason = dllfunc("ReasonMacroStarted");
    if( #reason == 5 ) {        //あとで送信/今すぐ送信
        $$s = dllfuncstr("Bypass_GetWindowText", hidemaruhandle(0) );
        if( leftstr( $$s, 6 ) == "今すぐ" ) {
            #sendnow = 1;
        } else {
            #sendlater = 1;
        }
    }


    #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 ) {
        if( #reason != 5 ) {    //2024.04.09 自動起動の場合はメッセージ表示しない。
            message "添付ファイルは1つもありません。";
        }
        endmacro;
    }
    question "添付ファイルをOneDriveにアップロードしてパスワード付き共有リンクを作成します。続行してもいいですか?";
    if( result != yes ) {
        endmacro;
    }
    if( #reason == 5 ) {        //あとで送信/今すぐ送信
        //ここで送信取り消ししておかないといけない。
        #n = dllfunc("SetCancel", 1);
    }

    if( #passwordlength < 10 ) {        //2021.04.19 最低10文字にする。
        #passwordlength = 10;
    }
    $password = "";
    #rand_init = (tickcount & 0x7FFFFFFF) + val(second) + val(minute) + val(hour);
    $asciilist = "#$%&*+-/0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    #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";
        if( dllfunc("IsOrikaeshi") ) {
            //現在行の自動折り返し禁止を使ってURLの折り返し禁止にする。
            up;
            #n = dllfunc("SwitchDontOrikaeshi");
            golineend2;
            right;
        }
    }

    // 添付ファイルの取り消し
    #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;
    #passwordhidemaru = hidemaruhandle(0);
    if( #sendlater ) {
        // 「あとで送信」の自動起動の場合
        sleep 1000;     //「今すぐ送信」を終わらせる用。
        setactivehidemaru #attachhidemaru;
        #n = dllfunc("SendLater");
        if( #n == 0 ) {
            //エラー
            endmacro;
        }
        setactivehidemaru #passwordhidemaru;
        closehidemaru #attachhidemaru;
        #n = dllfunc("SendLater");
        if( #n != 0 ) {
            //パスワードメールの送信成功時エディタ終了。
            exit;
        }
    } else if( #sendnow ) {
        // 「今すぐで送信」の自動起動の場合
        sleep 1000;     //「今すぐ送信」を終わらせる用。
        setactivehidemaru #attachhidemaru;
        #n = dllfunc("SendNow");
        if( #n == 0 ) {
            //エラー
            endmacro;
        }
        setactivehidemaru #passwordhidemaru;
        closehidemaru #attachhidemaru;
        #n = dllfunc("SendNow");
        if( #n != 0 ) {
            //パスワードメールの送信成功時エディタ終了。
            exit;
        }
    } else {
        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;
[ ]
RE:12503 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12506
じゅげむ さん 24/04/09 17:29 [ コメントを投稿する ]
  秀まるお2さま

 ありがとうございます。
 完璧に動きました。
 ストレスなくOneDrive経由渡しできるようになり、とても助かります。

じゅげむ 
 
 
[ ]
RE:12506 添付ファイルをOneDrive経由渡し-パスワード別便通知No.12508
秀まるお2 さん 24/04/10 09:21 [ コメントを投稿する ]
   確認どうもです。

 何か問題が起きるパターンもあるかもしれないので、その時はまた連絡お願いします。
[ ]

[ 新規に投稿する ]