通知からアーカイブするときにGmailを既読にする


10

通知から直接メールをアーカイブするか、返信するかを選択できる優れた機能として、Gmailアプリの最新バージョン。

私の問題は、通知からアーカイブした場合、(既読としてマークされるのではなく)未読のままになることです。とにかくそれを回避する方法はありますか?

通知から直接アーカイブされた電子メールに自動的に既読のマークを付けたいのですが。


1
それが現在可能であるとは思わない。変更できる唯一のアクションは、アーカイブではなく削除です。
エール

@AlEverett私は代替アプリ、または少なくともgoogleスクリプトでそれを行う方法があるかもしれないと思っていました。= /
マラバルバ2013年

回答:


5

Google Scriptって言った?

AppsスクリプトでGmailを既読にする

このスクリプトの背後にある考え方は、受信トレイにない(つまり、アーカイブされた)メッセージを既読としてマークすることです。

  1. スクリプトを開始するには、script.google.comにアクセスしてください
  2. 小さなポップアップでGmail用のスクリプトを作成することを選択します。
  3. 提供されているすべてのサンプルコードを削除します。
  4. これをこれに置き換えますAPIリファレンスを使用し記述)。

    function markArchivedAsRead(){
       var threads = GmailApp.search( 'label:unread -label:inbox');
       GmailApp.markThreadsRead(threads);
     };
  5. ファイル>保存でプロジェクトを保存します。

  6. [ファイル]> [バージョンの管理]を使用して新しいバージョンを追加し、「初期バージョン」と入力して送信します。
  7. [実行]> [markArchivedAsRead]を使用してテストを実行し、要求されたときにアプリを確認して承認します。
  8. [リソース]> [現在のプロジェクトのトリガー]を使用して新しいトリガーを追加し、上記の関数を1分ごとに実行することを選択します。
  9. スクリプトを再度保存して終了します。

実行する必要があることはわかりませんが、定期的に実行する限りは。

これは問題の直接の回答ではありません。受信トレイにない未読メッセージがある理由がある場合、これは機能しません。


未読の電子メールを直接アーカイブする可能性のあるいくつかのフィルターがあります。それらを未読のままにしておきたいのですが、それは本当に良いスタートです。受信トレイの未読スレッドを特定のラベルでマークする2番目のスクリプトを作成することができます。そして、この最初のスクリプトは、(すべてのアーカイブ済みメッセージではなく)このラベルが付いたアーカイブ済みメッセージのみを既読としてマークします。
マラバルバ2013年

2
これにもわずかなバグがあります。メッセージをアーカイブし、スクリプトが実行される前に新しいメッセージが同じスレッドに到着した場合、スクリプトが実行されると、両方のメッセージが既読としてマークされます。これは、GmailApp.searchがスレッド全体を返し、スレッド内のメッセージの1つが受信トレイにあるかどうかを気にしないためです。
マラバルバ2013年

3

私は次のGoogle Scriptでそれを動作させることができました。
これは@AlEverettの回答と同じですが、受信トレイを完全にスキップした(フィルターなどから)既読メッセージとしてマークされることはありません。

残念ながら、メッセージを非常に速く(平均して30秒未満)アーカイブする傾向がある場合は、機能しません。

/** Mark as read archived threads which were previously in the inbox (determined by the label "i"). **/
function cleanAndroidArchived(){
  markArchivedAsRead();
  labelInboxAsI();
}

function markArchivedAsRead() {
  var threads = GmailApp.search('in:unread label:i -label:inbox');
  var label = GmailApp.createLabel("i");
  label.removeFromThreads(threads);
  GmailApp.markThreadsRead(threads);
};

function labelInboxAsI() {
  var threads = GmailApp.search('in:unread label:inbox');
  var label = GmailApp.createLabel("i");
  label.addToThreads(threads);
};

2

@BruceConnorのケースで問題が解決したと思います。スクリプトが機能する前に、スクリプトが実行されるのを待つ必要があります。

  1. 受信トレイで何かを探す新しいフィルターを作成しました
  2. 「彼のバージョンによって作成された」「i」ラベルを割り当てます

Gmailは、フィルターが何にも一致しないことを訴えますが、この場合、受信トレイに残っているすべての受信メッセージに一致します。

その結果、すべての新しい受信メッセージはこのタグによって自動的に「記憶」されます。アーカイブを押すと、スクリプトは受信ボックスリストを「i」ラベルと比較し、どのメッセージがアーカイブされたかを確認し、それらのみを「」としてマークできます。読んだ"。すべてのメッセージがアーカイブの「i」キューに割り当てられるため、アーカイブを待つ必要はありません。

おまけ:また、新しい「i」ラベルを「メッセージリストに表示しない」と「ラベルリストに表示しない」に設定したので、まったく表示されません。(新しい「i」ラベルの横にある小さな矢印をクリックして、これらのオプションを選択します。)


1

@ al-eの回答は機能しますが、コメントに記載されている小さなバグがあります。私はこのバグを解決するスクリプトの別のバージョンを作成し、数年間それを使用して成功しています。これが私が使用しているスクリプトです:

function markArchivedAsRead() {
  var threads = GmailApp.search('label:unread -label:inbox');
  for (var i=0; i<threads.length; i++)
  {
    var messages = threads[i].getMessages();
    var markUnread = 1;
    for (var j=0; j<messages.length; j++)
    {
      if (messages[j].isInInbox())
        markUnread = 0;
    }
    if (markUnread)
      threads[i].markRead();
  }
};
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.