一行文字数超過文字化け可能性警告後編集No.41789
hajimet さん 11/11/03 05:21
 
いつも秀丸メールを便利に使用させていただいております
さて、掲題につき

メール送信操作をした際に、
件名空欄
機種依存文字
制御文字
再編集送信
など
送信動作が一時停止され警告が出ることがあります。
その中の、
一行文字数1Kbite超過文字化け可能性警告
(base64エンコードすれば回避できる可能性のコメントつき)

いいえ(N)
と回答すると、
他の警告では、送信動作がキャンセルされ編集画面に戻るのに、
編集画面に戻らずに、編集したメールが消えました。
#意外とショックが大きいです。

山紫水明さまの
HMMReturnToFolder.mac
を送受信の開始直前自動起動に設定してます。
どうもその辺との齟齬のような気もしますが、
仕組みが理解できずに途方に暮れています。

[ ]
RE:41789 一行文字数超過文字化け可能性警No.41790
山紫水明 さん 11/11/03 08:23
 
 hajimetさん,

>HMMReturnToFolder.mac
>を送受信の開始直前自動起動に設定してます。
>どうもその辺との齟齬のような気もしますが、
>仕組みが理解できずに途方に暮れています。

 テスト用にそのようなメールが作れるのであれば,一度このマクロを外してみ
て試されてみてはいかがでしょう。マクロが絡んでいるかどうかだけでも判別で
きると思います。

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:41790 一行文字数超過文字化け可能性警No.41792
山紫水明 さん 11/11/03 22:30
 

 拙作マクロの冒頭に
message "マクロ";
入れて,実験してみました。

1.題名を入れなかった場合は「いいえ」を押すと,そのままメールの編集画面
  に戻り,マクロは実行されません。
2.非常に長い1行を「自動折り返し禁止」にして送信すると,マクロが実行さ
  れた後に,お示しの警告が出ます。ここで「いいえ」を押すと,「送信され
  ませんでした。」のメッセージが出て編集画面に戻りました。このメッセー
  ジは拙作マクロが出しているものです。

 警告の種類によってマクロが実行されるかどうかの違いがあるようですが,こ
ちらではいずれも編集画面に戻ります。
 Windows Vista + 秀丸メール5.72β18+HMMReturnToFolder.mac Ver.1.11 です。
 
                          山紫水明
                          SANSHISUIMEI

[ ]
RE:41792 一行文字数超過文字化け可能性警No.41794
秀まるお2 さん 11/11/04 09:50
 
 今テストしてみたんですが、山紫水明さんのマクロを使う場合だと、マクロの
中からSendNow関数呼び出しが実行されて、その後エディタ・ウィンドウを閉じ
ようとしてしまうようです。

 ただ、僕の所でテストした限りでは、閉じようとした時に「このメールを保存
しますか?」の問い合わせが出るので、いきなり消えてしまうことは無いようで
したけども…。


 マクロの中の、

#n = dllfunc( "SendNow" );
if( dllfunc("TransmitError") || dllfunc( "SentMailCount" ) == 0 ) {
    if( #time ) #n = dllfunc( "SetAutoPushTimerMilli", #time);
    message "送信されませんでした。";
    $s = dllfuncstr( "SetHeader", "X-RootFolder", $rootfolder );
    exit;
}

 となってる部分の「exit;」を「endmacro;」にした方がいいんじゃないかと思
います。

--------------------
 それと、1行の長さが1000文字を超える場合の警告についてもカスタマイズ機
能を追加してみます。この場合は自動的にbase64エンコードして送信することも
可能なようにオプション追加をやってみます。
 (「全般的な設定・上級者向け・確認メッセージ・確認メッセージ2」の所に
追加しようかと思います。)


[ ]
RE:41794 一行文字数超過文字化け可能性警No.41795
秀まるお2 さん 11/11/04 10:29
 
>  それと、1行の長さが1000文字を超える場合の警告についてもカスタマイズ機
> 能を追加してみます。

 すみません。既にオプションがありました。

 ただ、自動的にbase64エンコードするってオプションが無いのと、問い合わせ
メッセージの中から「base64エンコードして送信」が無いので、その辺改良を試
みます。

[ ]
RE:41794 一行文字数超過文字化け可能性警No.41797
hajimet さん 11/11/04 15:39
 
山紫水明様
秀まるお様
ご丁寧にご検討いただき大変ありがとうございます。
> ただ、僕の所でテストした限りでは、閉じようとした時に「このメールを保存
>しますか?」の問い合わせが出るので、いきなり消えてしまうことは無いようで
>したけども…。
これについては、環境によって反応が異なるのでしょうか。
とりあえず、今後の事故対策への手がかりにもなるかと思いますので、
環境を記載します。

hmmv5.72b5
確認メッセージ2 1行が極端に長いとき(B)チェック
マクロ自動起動
送信用のエディタ起動時 HMMSetRootHeader.mac
あとで送信/今すぐ送信時 HMMCheckCharacter.mac
送受信の開始直前 HMMReturnToFolder.mac

です。あまり特殊性がないですね。
他に記載すべき情報はないでしょうか。

> となってる部分の「exit;」を「endmacro;」にした方がいいんじゃないかと思
>います。

早速ですが、山紫水明様のマクロを改造してみました。
これにより確かに、編集画面に戻ってくるようになりました。

exit; が実行されたときの動作が、
私のところと、他の皆さんのところとで、
違うようですが。

私の環境では
「保存しますか」の確認メッセージを出してくれません。

[ ]
RE:41797 一行文字数超過文字化け可能性警No.41802
秀まるお2 さん 11/11/04 17:45
 
 マクロの「exit;」が実行されても「このメールを保存しますか?」が出ない
条件はあります。

 例えばマクロで

    clearupdated;
    exit;

 とするとそうなります。

 他には、「新規メール」を実行してから何も編集してない状態で「exit;」を
実行すると消えたりします。

 あと他には、「草稿に保存」を実行した直後のexit;とか…。

 それ以外にはちょっと思いつかないですけども、例えば何か他のマクロで
clearupdated;が実行されてる可能性とか無いでしょうか。

---------------------------------

 とりあえずマクロの方は、「exit;」を「endmacro;」に変更して使っていただ
ければ、今後は大丈夫だと思います。

[ ]
RE:41794 一行文字数超過文字化け可能性警No.41805
山紫水明 さん 11/11/04 20:52
 
 秀まるお2さん,

> となってる部分の「exit;」を「endmacro;」にした方がいいんじゃないかと
>思います。

 マクロをチェックしていただいてどうもありがとうございます。
 「exit;」にしたのは何かわけがあったような気がしますが,忘れてしまいま
した。
 ご指摘のようにした方がどうもよさそうなので,そのように変えておきます。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:41802 一行文字数超過文字化け可能性警No.41886
hajimet さん 11/11/29 23:10
 
再現条件が分かりません。
解決しそうにないですが参考までにご報告を。

>    clearupdated;
は使っておりません。

また、最近新たに気になる現象が。
手順と現象:
1)再編集メール執筆
2)送信操作をすると⇒「同じメールが何度も」の警告
3)警告にOK
4)機種依存文字警告(マクロによるもの)
5)警告にOK
6)送信操作をすると⇒「同じメールが何度も」の警告(再び)
7)警告にNO
8)エディタに戻らず終了(予想外の動作)
ということが、何度か生じて、
何度か再現したので、報告せんと、
再現条件を確認しようとしていたら、再現しなくなりました。
#ちゃんと、エディタに戻るようになりました。

これは先般の現象と同じもののように感じられます。
たぶん環境依存の何かがあるように思われますが、
分かりません。

素人の思いつきでは、

#n = dllfunc( "SendNow" );
if( dllfunc("TransmitError") || dllfunc( "SentMailCount" ) == 0 ) {
    if( #time ) #n = dllfunc( "SetAutoPushTimerMilli", #time);
    message "送信されませんでした。";
    $s = dllfuncstr( "SetHeader", "X-RootFolder", $rootfolder );
    endmacro;
}
#n = dllfunc( "SetMainWndTop" );
closehidemaruforced #handle;

の流れで、if文の判定にミスして、

#n = dllfunc( "SetMainWndTop" );
closehidemaruforced #handle;

が実行されて、エディタウィンドウが閉じてしまった、
という流れかも、と思ったんですが、
如何でしょう。あり得ますでしょうか。

複数のメールエディタがひらいている
(ということは、同時に複数のマクロが
走っている、ということになりましょうか?)
時になるのかもしれません。

もちろん、
そのような判定ミスは、生じ得ない、となると、
また迷宮入りっぽいですが。

[ ]
RE:41886 一行文字数超過文字化け可能性警No.41887
秀まるお2 さん 11/11/30 11:35
 
> if( dllfunc("TransmitError") || dllfunc( "SentMailCount" ) == 0 ) {

 裏で定期受信が動いていると、タイミングによってはこの判定がうまくいかな
いってことはあるかもしれません。(といいつ、ヘルプにはこのやり方で判定し
ろと書いてあるので申し訳無い所ですけども…)

 とりあえず、SendNowが失敗した場合は必ず返り値が0になるはずなので、ここ
の判定を、

#n = dllfunc( "SendNow" );
if( #n == 0 ) {
    if( #time ) #n = dllfunc( "SetAutoPushTimerMilli", #time);
    message "送信されませんでした。";
    $s = dllfuncstr( "SetHeader", "X-RootFolder", $rootfolder );
    endmacro;
}

 のようにしてしまってはどうでしょうか。

 それと、closehidemaruforcedを使うのもこの場合は危ないので、単純に、

> #n = dllfunc( "SetMainWndTop" );
> closehidemaruforced #handle;

 の所を

    exit;

 にしてしまえばいいんじゃないかと思います。もしも送信に失敗した場合は
「(更新)」が取れてないがために、exit文であれば、そういうケースで「この
メールは保存されていません」の問い合わせメッセージが出てくれるはずです。

 それか、closehidemaruforcedじゃなくてclosehidemaru文にするだけでもいい
と思います。

 そういう作戦でどうでしょ?

 総合すると、

#n = dllfunc( "SendNow" );
if( #n == 0 ) {
    if( #time ) #n = dllfunc( "SetAutoPushTimerMilli", #time);
    message "送信されませんでした。";
    $s = dllfuncstr( "SetHeader", "X-RootFolder", $rootfolder );
    endmacro;
}
exit;

 にするって作戦になります。

[ ]