Googleグループ・Outlook で共有メールボックスでメールを共有

Google・Microsoftそれぞれ「Googleグループ」と「Outlook で共有メールボックス」を使用して可能です。

それぞれの仕様について公式ガイド・リファレンスを参考にまとめました

目次

Googleグループのサブスクリプション設定(配信設定)でメールを共有

グループ宛のメールはサブスクリプション設定に応じてメンバー個人のGmail受信トレイに配信されるので、グループのメールを共有できます

https://support.google.com/groups/answer/9792489?hl=ja
メール配信と全体設定を管理する
Google グループでは、登録設定で、グループからのメールを受け取るかどうかと、メールの受け取り方を選択できます。

Googleグループ設定項目

スクロールできます
設定項目意味参考
グループメールこのアドレス宛てに送信すると、投稿権限や配信設定に従ってグループに投稿されます。グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja
追加のGoogleグループの機能「共同トレイ」または「追加機能なし」を選択します。
共同トレイでは、会話の担当者割り当てや対応状況の管理が可能になります。
共同トレイでは、会話の引き受け、割り当て、完了・重複・対応不要の設定などができます。
利用には会話の履歴をオンにする必要があります。
https://support.google.com/a/users/answer/10375787?hl=ja
共有ラベル有効にすると、Googleグループ上の会話にグループ共通のラベルを付けて整理・検索できます。
Gmailの個人ラベルとは別です。
グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja
会話を閲覧できるユーザーメンバーだけがGoogleグループ上の会話を閲覧できます。閲覧、投稿、管理できるユーザーを設定するhttps://support.google.com/groups/answer/2464975?hl=ja
投稿できるユーザーメンバーが新しい会話を開始したり返信したりできます。「グループの会話を開始して参加する」
「グループのメールアドレス宛にメッセージを送信できる」
https://support.google.com/groups/answer/2464975?hl=ja
メールでの投稿を許可有効にすると、Gmailなどのメールクライアントからグループアドレス宛てに送信して投稿できます。
無効の場合、グループアドレスを使った投稿はできません
グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja
ウェブからの投稿を許可する有効にすると、groups.google.com の画面から新規投稿や返信ができます。グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja
会話の履歴オンの場合、投稿がGoogleグループ側に保存され、後からWeb画面で閲覧できます。
オフの場合、新しい投稿はグループ履歴に保存されませんが、配信設定によってはメールでは受信できます。
グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja
ファイルを添付できるユーザーメンバーが投稿に文書、写真などを添付できます。閲覧、投稿、管理できるユーザーを設定するhttps://support.google.com/groups/answer/2464975?hl=ja
スレッドモード/会話モードオンの場合、既存の会話と同じ件名を持つ新しいメッセージを、その会話への正式な返信でなくても既存スレッドへ追加することがあります。
オフの場合は新しいスレッドになります。
グループの設定を更新する
https://support.google.com/a/users/answer/10376887?hl=ja

Graph API 共有メールボックス(Shared Mailbox)について

Microsoft 365 の共有メールボックスについて
https://learn.microsoft.com/ja-jp/microsoft-365/admin/email/about-shared-mailboxes?view=o365-worldwide

既読未読の仕様

Googleグループと配信されたGmailのそれぞれのメール既読状態は固有、またユーザーごとにも固有

スクロールできます
Googleグループ ウェブGmail ウェブ
既読・未読ステータスはあるか以下公式リファレンスで見つからず、動作確認での確認内容

– ある
– ログインユーザーごとに固有
– Gmailウェブのメールステータスと同期しない
以下公式リファレンスで見つからず、要動作確認

– ある
– ログインユーザーごとに固有
– Googleグループウェブのメールステータスと同期しない
管理方法Gmail側では、受信したメッセージの既読・未読を UNREAD ラベルとして管理
既読・未読の対象以下公式リファレンスで見つからず、動作確認での確認内容

公式ガイドでスレッドごとにされているかのような記述が次の通りありました
> https://developers.google.com/workspace/admin/groups-migration/v1/guides/manage-email-migrations?&hl=ja#groups_interface
インポートしたメッセージを Google グループのインターフェースで表示する
Google グループでは、スレッドの既読 / 未読ステータスはユーザーごとに個別に保存されます。

– グループウェブインターフェースではスレッド単位で既読にすることができ、メール単位では操作手段はないです。
– 未読に戻す操作方法も画面上で見つかりませんでした。
メールごとに指定できるし、スレッドに指定しスレッド内全メールに反映させることも可能
> https://developers.google.com/workspace/gmail/api/guides/labels?hl=ja#add-remove-thread-labels

> https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/modify?hl=ja

Outlook 共通メールボックスでは 既読・未読は共有される

message リソースのプロパティで、メールボックス単位(ユーザーごとではない)で1つの値しか持たない。

「誰が読んだか」をGraph APIだけで追跡するのは不可能。

Outlook(およびExchange Online)では、共有メールボックスと委任メールボックスは既定で既読/未読の状態を共有します。
https://learn.microsoft.com/en-us/answers/questions/4736926/read-unread-issue-in-same-mailbox

スレッド(会話ID conversationId)内のメッセージをまとめて既読未読を変更するAPIはない

Microsoft Graphには、Gmailの threads.modify に相当する「会話全体を一括で既読にするAPI」はありません

そもそもGoogleグループとはGoogleが提供するメーリングリスト・フォーラムサービスです。

主な用途は3つあります。

  • メーリングリストとしての利用で、1つのメールアドレス(例: team@googlegroups.com)に送ると、グループ全員にメールが届きます。Google Workspaceでは独自ドメインのグループアドレスも作れます。
  • アクセス権管理で、Google Drive、Googleカレンダーなどの共有設定にグループを指定すると、メンバーの追加・削除だけで権限を一括管理できます。個別にユーザーを追加する手間が省けます。
  • ウェブフォーラムとしての利用で、ブラウザ上でスレッド形式の議論ができます。ただし、この用途では現在SlackやTeamsに置き換えられていることが多いです。

GoogleグループのウェブUIが見ているもの

GoogleグループのウェブUI(groups.google.com)は、グループ全体のアーカイブを表示している。

Googleグループのアーカイブとは

Googleグループには、グループアドレス宛てに投稿されたメッセージを蓄積する仕組みがある。これが「アーカイブ」と呼ばれるもので、Gmailの「アーカイブ(受信トレイから非表示にする操作)」とはまったく別の概念

グループのアーカイブは、個人のメールボックスとは独立した場所にグループ単位で保持されている。

グループのウェブUI(groups.google.com)で過去の会話を遡って閲覧できるのは、このアーカイブがデータソースになっているからだ。グループの設定で「アーカイブを有効にする」がオンになっていれば、メンバーの参加時期に関係なく、グループに投稿された全履歴を閲覧できる。

ただし、このアーカイブのメッセージをAPIで直接読み出す手段は用意されていない。関連するAPIとしてGoogle Groups Settings APIとGoogle Groups Migration APIがあるが、前者はグループの設定操作用、後者はメッセージのインポート(書き込み)専用であり、いずれもアーカイブの中身を取得する機能を持っていない。

Gmail APIが見ているもの

一方、Gmail APIはまったく別のデータソースを参照している。Gmail APIは「特定ユーザーのメールボックス」に対して動作するAPIであり、Googleグループのアーカイブに直接アクセスする手段を持っていない。

Googleグループは独立したメールボックスを持たない。グループアドレス宛てに届いたメールを、参加メンバーそれぞれのGmailに配送するメーリングリストとして機能している。Gmail APIの threads.listthreads.get が返すデータは、そのユーザーのGmailに実際に届いたメッセージを、Gmail側のアルゴリズムが threadId で束ねた結果だ。

メール送信者がGoogleグループ宛てに投稿 group@example.com 宛てメール Googleグループ グループのアーカイブ 全メッセージを蓄積 各メンバーのGmail 配送されたメールのみ ウェブUI groups.google.com Gmail API threads.get / messages.get データソースが異なる

この構造の違いが、実装時に様々なギャップを生む原因になっている。

両者の違いを整理する

具体的にどのような差異があるのか、表にまとめた。

GoogleグループのウェブUIGmail API
データソースグループ全体のアーカイブ個人のメールボックス
過去ロググループ設定次第で参加前の投稿も閲覧可能そのアカウントに配送されたメールのみ取得可能
スレッドの単位グループ側の会話単位Gmailが threadId でグルーピングしたもの
網羅性グループ宛ての全投稿ユーザーのメールボックスに届いた分だけ

たとえば、GoogleグループのウェブUIで10件のメッセージが見えるスレッドがあったとする。途中からグループに参加したユーザーがGmail APIで同じスレッドを引くと、参加後に届いた3件しか取れない。これはバグではなく、データソースの違いから生じる正常な挙動だ。

過去ログが取得できない問題への対処

Gmail APIで最も頻繁に問題になるのが、ユーザーがGoogleグループに参加する前のメールを取得できないケースだ。

GoogleグループのウェブUIでは見えるのに、Gmail APIでは取れない。この現象を初めて経験すると「APIのバグでは?」と思いがちだが、前述のとおりデータソースが異なるので当然の挙動となる。

過去ログも含めた完全な同期が要件にある場合、Gmail API単体では実現不可能だ。代替手段として以下のAPIが候補になる。

  • Google Workspace Admin SDK … 管理者権限でワークスペース全体のデータにアクセスできる
  • Google Groups Migration API … グループのメッセージデータを移行・取得する用途で設計されたAPI

いずれもGmail APIとは権限モデルが異なるため、アーキテクチャの設計段階で検討しておく必要がある。「あとからGmail APIに過去ログ取得機能を足す」という対応は構造上できない。

自分が送信したメールがスレッドから抜け落ちる問題

もう一つ実装時にハマりやすいのが、自分がGoogleグループ宛てに送信したメールの扱いだ。

Googleグループの設定には「自分がグループ宛てに送ったメールを自分には再配送しない」というオプションがある。この設定が有効な場合、送信したメールは送信済みトレイには入るが、受信トレイには届かない。

messages.list で受信メールだけを対象にスキャンしていると、自分が開始したスレッドの1通目を取りこぼすことになる。スレッドの全体像を正しく構築するには、受信メールと送信メールの両方をスキャンして threadId ベースでマージする必要がある。

具体的には、q パラメータを以下のように組み合わせる。

# グループ宛てメールの取得(受信分)
q = "list:group@example.com"

# 自分が送信した分も含める場合
q = "list:group@example.com OR (to:group@example.com from:me)"

あるいは、label:SENT を別途スキャンして threadId でマージする方法もある。どちらの方法を取るかはアプリの要件次第だが、受信メールだけの監視では不十分であるという認識は最初から持っておくべきだ。

Googleグループ経由のメールを識別する方法

Gmail APIで取得したメッセージがGoogleグループ経由で届いたものかどうかは、メールヘッダーから判別できる。messages.get のレスポンスに含まれる payload.headers の中で、以下のヘッダーの有無を確認する。

  • List-Id … グループの識別子が格納されている(例 group-name.googlegroups.com
  • Mailing-List … 配信リストの情報

グループ単位でメッセージをフィルタリングしたい場合は、messages.listq パラメータに list:group-address@domain.com を指定するのが最も効率的だ。ヘッダーを個別にパースする手間が省ける。

目次