[{"data":1,"prerenderedAt":652},["ShallowReactive",2],{"navigation":3,"doc-/modules/mail":217,"docs-all-paths":597},[4,19,39,63,87,111,127,195,211],{"title":5,"path":6,"stem":7,"children":8},"Welcome","/welcome","01.welcome",[9,11,15],{"title":5,"path":6,"stem":10},"01.welcome/index",{"title":12,"path":13,"stem":14},"Astar とは（5分）","/welcome/product-in-5-min","01.welcome/01.product-in-5-min",{"title":16,"path":17,"stem":18},"事業文脈","/welcome/business-context","01.welcome/02.business-context",{"title":20,"path":21,"stem":22,"children":23},"Getting Started","/getting-started","02.getting-started",[24,27,31,35],{"title":25,"path":21,"stem":26},"はじめかた","02.getting-started/index",{"title":28,"path":29,"stem":30},"リポジトリ取得と環境構築","/getting-started/repo-setup","02.getting-started/01.repo-setup",{"title":32,"path":33,"stem":34},"日々の開発ループ","/getting-started/dev-loop","02.getting-started/02.dev-loop",{"title":36,"path":37,"stem":38},"検証の 4 層","/getting-started/verification-tiers","02.getting-started/03.verification-tiers",{"title":40,"path":41,"stem":42,"children":43},"Architecture","/architecture","03.architecture",[44,47,51,55,59],{"title":45,"path":41,"stem":46},"アーキテクチャ","03.architecture/index",{"title":48,"path":49,"stem":50},"マルチテナンシーと RLS","/architecture/multi-tenancy-rls","03.architecture/01.multi-tenancy-rls",{"title":52,"path":53,"stem":54},"認可モデル","/architecture/authorization","03.architecture/02.authorization",{"title":56,"path":57,"stem":58},"AI サブシステム","/architecture/ai-subsystem","03.architecture/03.ai-subsystem",{"title":60,"path":61,"stem":62},"データモデル","/architecture/data-model","03.architecture/04.data-model",{"title":64,"path":65,"stem":66,"children":67},"Backend","/backend","04.backend",[68,71,75,79,83],{"title":69,"path":65,"stem":70},"バックエンド","04.backend/index",{"title":72,"path":73,"stem":74},"層構造","/backend/layering","04.backend/01.layering",{"title":76,"path":77,"stem":78},"規約","/backend/conventions","04.backend/02.conventions",{"title":80,"path":81,"stem":82},"テスト","/backend/testing","04.backend/03.testing",{"title":84,"path":85,"stem":86},"マイグレーション","/backend/migrations","04.backend/04.migrations",{"title":88,"path":89,"stem":90,"children":91},"Frontend","/frontend","05.frontend",[92,95,99,103,107],{"title":93,"path":89,"stem":94},"フロントエンド","05.frontend/index",{"title":96,"path":97,"stem":98},"モジュール内部構造","/frontend/module-anatomy","05.frontend/01.module-anatomy",{"title":100,"path":101,"stem":102},"API アクセスの一本道","/frontend/api-access-chain","05.frontend/02.api-access-chain",{"title":104,"path":105,"stem":106},"i18n","/frontend/i18n","05.frontend/03.i18n",{"title":108,"path":109,"stem":110},"デザインシステム","/frontend/design-system","05.frontend/04.design-system",{"title":112,"path":113,"stem":114,"children":115},"Go Agent And Cli","/go-agent-and-cli","06.go-agent-and-cli",[116,119,123],{"title":117,"path":113,"stem":118},"Go agent と CLI","06.go-agent-and-cli/index",{"title":120,"path":121,"stem":122},"Go agent","/go-agent-and-cli/go-agent","06.go-agent-and-cli/01.go-agent",{"title":124,"path":125,"stem":126},"CLI","/go-agent-and-cli/cli","06.go-agent-and-cli/02.cli",{"title":128,"path":129,"stem":130,"children":131},"Modules","/modules","07.modules",[132,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191],{"title":133,"path":129,"stem":134},"モジュール","07.modules/index",{"title":136,"path":137,"stem":138},"テーブル","/modules/table","07.modules/01.table",{"title":140,"path":141,"stem":142},"ドキュメントツリー","/modules/document","07.modules/02.document",{"title":144,"path":145,"stem":146},"AIチャット","/modules/ai","07.modules/03.ai",{"title":148,"path":149,"stem":150},"認証・権限","/modules/auth","07.modules/04.auth",{"title":152,"path":153,"stem":154},"AI取込","/modules/organize","07.modules/05.organize",{"title":156,"path":157,"stem":158},"ストレージ","/modules/storage","07.modules/06.storage",{"title":160,"path":161,"stem":162},"NAS同期","/modules/sync","07.modules/07.sync",{"title":164,"path":165,"stem":166},"ワークスペース","/modules/workspace","07.modules/08.workspace",{"title":168,"path":169,"stem":170},"テナントとメンバーシップ","/modules/tenant-membership","07.modules/09.tenant-membership",{"title":172,"path":173,"stem":174},"検索","/modules/search","07.modules/10.search",{"title":176,"path":177,"stem":178},"表示ビュー","/modules/display","07.modules/11.display",{"title":180,"path":181,"stem":182},"テンプレート","/modules/template","07.modules/12.template",{"title":184,"path":185,"stem":186},"メール","/modules/mail","07.modules/13.mail",{"title":188,"path":189,"stem":190},"電話","/modules/phone","07.modules/14.phone",{"title":192,"path":193,"stem":194},"リアルタイム","/modules/realtime","07.modules/15.realtime",{"title":196,"path":197,"stem":198,"children":199},"Infra And Deploy","/infra-and-deploy","08.infra-and-deploy",[200,203,207],{"title":201,"path":197,"stem":202},"インフラとデプロイ","08.infra-and-deploy/index",{"title":204,"path":205,"stem":206},"環境の種類","/infra-and-deploy/environments","08.infra-and-deploy/01.environments",{"title":208,"path":209,"stem":210},"セルフホスト構成","/infra-and-deploy/self-host","08.infra-and-deploy/02.self-host",{"title":212,"path":213,"stem":214,"children":215},"docs-map","/docs-map","09.docs-map/index",[216],{"title":212,"path":213,"stem":214},{"id":218,"title":184,"body":219,"description":591,"extension":592,"meta":593,"navigation":594,"path":185,"seo":595,"stem":186,"__hash__":596},"docs/07.modules/13.mail.md",{"type":220,"value":221,"toc":582},"minimark",[222,225,229,233,236,311,315,435,439,510,513,564],[223,224,184],"h1",{"id":184},[226,227,228],"h2",{"id":228},"一言でいうと",[230,231,232],"p",{},"メール連携は「受信メールをテーブルレコードとして取り込み、一覧・検索・スレッド表示できるようにする」機能です。IMAP をポーリングして受信し、SMTP で送信します。既読/フラグ/移動/削除といったユーザー操作は、まずローカルのレコードを更新し、対応する IMAP 操作は永続キューに積んで非同期に反映する local-first 設計です。",[226,234,235],{"id":235},"主要ドメイン概念",[237,238,239,252],"table",{},[240,241,242],"thead",{},[243,244,245,249],"tr",{},[246,247,248],"th",{},"概念",[246,250,251],{},"役割",[253,254,255,267,281,291,301],"tbody",{},[243,256,257,264],{},[258,259,260],"td",{},[261,262,263],"code",{},"UserMailbox",[258,265,266],{},"ユーザーごとの IMAP/SMTP 接続設定",[243,268,269,278],{},[258,270,271,274,275],{},[261,272,273],{},"InboundMailEvent"," / ",[261,276,277],{},"InboundMailMessage",[258,279,280],{},"受信イベントと解析済みメッセージ",[243,282,283,288],{},[258,284,285],{},[261,286,287],{},"MailThreadResolver",[258,289,290],{},"メッセージをスレッドにまとめる",[243,292,293,298],{},[258,294,295],{},[261,296,297],{},"MailOutboundOp",[258,299,300],{},"既読/フラグ/移動/削除などローカル変更に対応する、IMAP側へ反映すべき操作の永続キューエントリ",[243,302,303,308],{},[258,304,305],{},[261,306,307],{},"MailPlacement",[258,309,310],{},"受信メールをどのワークスペース/テーブルへ配置するかの解決結果",[226,312,314],{"id":313},"backend-構造","Backend 構造",[316,317,318,374,392,403,409,422],"ul",{},[319,320,321,324,325,328,329,332,333,332,336,339,340,339,343,339,346,349,350,339,353,356,357,339,360,363,364,339,367,370,371],"li",{},[261,322,323],{},"api/controller/",": ",[261,326,327],{},"MailMailboxController","（接続設定・接続テスト・プロバイダ自動検出）、",[261,330,331],{},"MailInboxController","、",[261,334,335],{},"MailFolderController",[261,337,338],{},"MailReadController","/",[261,341,342],{},"MailFlagController",[261,344,345],{},"MailMoveController",[261,347,348],{},"MailTrashController","（既読・フラグ・移動・削除・復元・完全削除）、",[261,351,352],{},"MailDraftController",[261,354,355],{},"MailSendController","（下書き・送信）、",[261,358,359],{},"MailImportController",[261,361,362],{},"MlMailboxImportController","（",[261,365,366],{},".eml",[261,368,369],{},".mbox"," インポート）、",[261,372,373],{},"TenantMailEventsController",[319,375,376,379,380,383,384,387,388,391],{},[261,377,378],{},"domain/service/InboundMailIngestionService.kt",": 受信メールを ",[261,381,382],{},"RecordService"," 経由でテーブルレコード化し、添付ファイルは ",[261,385,386],{},"StorageAwareDocumentService"," でドキュメントツリーへ保存。添付が抽出対象なら ",[261,389,390],{},"OrganizeJobCreator"," で AI 取込パイプラインに回す",[319,393,394,397,398,402],{},[261,395,396],{},"domain/service/MailOutboundProjector.kt",": ローカル変更 → 永続キュー enqueue を",[399,400,401],"strong",{},"同一トランザクション","で行う、outbound の唯一の入口（下記callout参照）",[319,404,405,408],{},[261,406,407],{},"domain/service/MailOutboundOpQueueService.kt",": キューの再試行ポリシー（bounded exponential backoff → 最終的に FAILED。ローカル変更自体はそのまま残り、次の reconcile が収束させる）",[319,410,411,274,414,417,418,421],{},[261,412,413],{},"infrastructure/scheduler/MailImapPollingScheduler.kt",[261,415,416],{},"MailOutboundDrainScheduler.kt",": 受信ポーリングと、outbound キューのドレイン（owner ごとに ",[261,419,420],{},"runAs(tenant, owner)"," で分離実行、1件の失敗が他をブロックしない）",[319,423,424,427,428,431,432],{},[261,425,426],{},"infrastructure/listener/MailDeadlineExtractionListener.kt",": 受信メールから AI で締切を抽出し、Google カレンダーへ反映する ",[261,429,430],{},"@TransactionalEventListener(AFTER_COMMIT)"," + ",[261,433,434],{},"@Async",[226,436,438],{"id":437},"frontend-構造","Frontend 構造",[316,440,441,475],{},[319,442,443,324,446,449,450,332,453,339,456,339,459,339,462,339,465,468,469,332,472],{},[261,444,445],{},"composables/",[261,447,448],{},"useMailMailbox","（接続設定）、",[261,451,452],{},"useMailConnectForm",[261,454,455],{},"useMailReadStatus",[261,457,458],{},"useMailFlag",[261,460,461],{},"useMailMove",[261,463,464],{},"useMailTrash",[261,466,467],{},"useMailDelete","（メッセージ操作）、",[261,470,471],{},"useMailDrafts",[261,473,474],{},"useMailAttachmentPreview",[319,476,477,324,480,339,483,339,486,489,490,339,493,496,497,332,500,332,503,339,506,509],{},[261,478,479],{},"components/",[261,481,482],{},"MailConnectForm.vue",[261,484,485],{},"MailConnectFields.vue",[261,487,488],{},"MailConnectPrompt.vue","（接続設定UI）、",[261,491,492],{},"MailConversationListItem.vue",[261,494,495],{},"MailMessagePanel.vue","（スレッド表示）、",[261,498,499],{},"MailComposeDialog.vue",[261,501,502],{},"MailboxSettingsPanel.vue",[261,504,505],{},"MailConversationPane.vue",[261,507,508],{},"MailOutputTableField.vue","（テーブル上でのメールレコード表示）",[226,511,512],{"id":512},"他モジュールとの辺",[316,514,515,527,533,542,555],{},[319,516,517,519,520,522,523,526],{},[261,518,237],{},": 受信メールは ",[261,521,382],{}," 経由でレコードとして保存される。",[261,524,525],{},"MailRecordAccessPort"," が owner の RLS context でアクセス制御する",[319,528,529,532],{},[261,530,531],{},"organize",": メール添付ファイルは AI 取込パイプライン（OCR → AI → 構造化レコード）に回せる",[319,534,535,538,539,541],{},[261,536,537],{},"editor",": 添付ファイルの実体は ",[261,540,386],{}," を通してドキュメントツリーに保存される",[319,543,544,324,547,550,551,554],{},[261,545,546],{},"calendar",[261,548,549],{},"MailDeadlineExtractionListener"," が受信メールから締切を抽出し、Google カレンダー連携（",[261,552,553],{},"GoogleOAuthService","）へ書き込む",[319,556,557,324,560,563],{},[261,558,559],{},"display",[261,561,562],{},"ViewType.MAIL"," として受信箱をテーブル表示ビューの一種に描画できる",[565,566,568],"callout",{"type":567},"warning",[230,569,570,571,574,575,578,579,581],{},"既読/フラグ/移動/削除といったメール状態変更は、必ず ",[261,572,573],{},"MailOutboundProjector"," を経由すること。",[261,576,577],{},"MailImapPort"," を直接呼んではいけません。",[261,580,573],{}," は①ownerのRLS contextでの所有権チェック、②ローカルレコード更新、③IMAP操作の永続キューへの enqueue、の②③を同一トランザクションで行う契約になっており（「ローカル変更には必ず対応するキュー済み操作がある」を保証）、これを迂回すると local-first の整合性が壊れます。",{"title":583,"searchDepth":584,"depth":584,"links":585},"",2,[586,587,588,589,590],{"id":228,"depth":584,"text":228},{"id":235,"depth":584,"text":235},{"id":313,"depth":584,"text":314},{"id":437,"depth":584,"text":438},{"id":512,"depth":584,"text":512},"メール連携 (IMAP/SMTP)、スレッド化、受信箱レコード化。core/mail ⇄ app/modules/mail の深掘り。","md",{},true,{"title":184,"description":591},"nbJ8e4aelNymPhQ54CSuy2q5neagjBk9sAjWtoOns6I",[598,600,601,603,604,605,606,607,608,609,610,611,613,614,615,616,617,619,620,621,622,623,625,627,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,647,648,649,650],{"path":13,"title":599},"Astar とは何か（5分で）",{"path":17,"title":16},{"path":6,"title":602},"ようこそ",{"path":29,"title":28},{"path":33,"title":32},{"path":37,"title":36},{"path":21,"title":25},{"path":49,"title":48},{"path":53,"title":52},{"path":57,"title":56},{"path":61,"title":60},{"path":41,"title":612},"システムアーキテクチャ",{"path":73,"title":72},{"path":77,"title":76},{"path":81,"title":80},{"path":85,"title":84},{"path":65,"title":618},"バックエンドガイド",{"path":97,"title":96},{"path":101,"title":100},{"path":105,"title":104},{"path":109,"title":108},{"path":89,"title":624},"フロントエンドガイド",{"path":121,"title":626},"Go agent — NAS 同期エージェント",{"path":125,"title":628},"astar CLI",{"path":113,"title":117},{"path":137,"title":136},{"path":141,"title":140},{"path":145,"title":144},{"path":149,"title":148},{"path":153,"title":152},{"path":157,"title":156},{"path":161,"title":160},{"path":165,"title":164},{"path":169,"title":168},{"path":173,"title":172},{"path":177,"title":176},{"path":181,"title":180},{"path":185,"title":184},{"path":189,"title":188},{"path":193,"title":192},{"path":129,"title":646},"モジュール索引",{"path":205,"title":204},{"path":209,"title":208},{"path":197,"title":201},{"path":213,"title":651},"docs/ 地図",1785452455448]