添付ファイルを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
 
ご返信ありがとうございます。

折り返し禁止については、ご指摘のとおり設定しておりますが、「添付ファイルOneD
rive経由渡し-パスワード別便通知マクロ」を送信時の自動実行マクロに設定すると、
自動実行されたマクロによって生成された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("HidemaruMailV
ersionBeta");
    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@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm
nopqrstuvwxyz";
    #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 % #asciili
stlen, 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", $uploadedF
older ) + "</div>\n";
        insert "<div>URLの有効日数 = " + str(#expirationdate) + "日間</div>\n";
        insert "<div>パスワード = (別便のメールにて連絡)</div>\n";
        insert "<div>ダウンロードURL = <a href=\"" + $shareUrl + "\">" + dll
funcstr("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
 
 確認どうもです。

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

[ ]