الفصل 17b الامتثال والتخزين & التشغيل الإدارة: #pArchiveSources

nextxch Archive: Microsoft 365 وExchange وGoogle Workspace وIMAP إلى أرشيف GoBD

يجلب nextxch Archive البريد من الأنظمة التي لا تعمل على nextxch إلى أرشيف GoBD. تتوفر أربعة أنواع من المصادر في لوحة الإدارة ضمن الامتثال > مصادر الأرشيف: دفتر يومية SMTP (تقارير دفتر اليومية من Microsoft 365 وExchange، وقاعدة نسخ من Google Workspace، ونسخ BCC من أي MTA)، وIMAP (أي خادم، للقراءة فقط)، وMicrosoft 365 عبر Microsoft Graph، وGoogle Workspace عبر Gmail API. يصبح كل صندوق بريد في المصدر صندوق بريد مؤرشفًا دون تسجيل دخول ودون حركة بريد؛ ويعمل عليه البحث والحجز القانوني وتصدير الأدلة والاستعادة كما في صناديق بريدكم الخاصة.

نصيحة تشغيلية وملاحظة حول البنية

التركيبة الموصى بها: دفتر يومية SMTP للالتقاط المستمر الكامل اعتبارًا من تاريخ فاصل (لا يستطيع المستخدمون حذف أي شيء قبل التقاطه)، إضافة إلى مصدر API مرة واحدة أو على فترات طويلة للبريد الموجود وعرض المجلدات. يكتب كلاهما في الأرشيف نفسه؛ وبفضل SHA-256 تُخزَّن الرسالة الملتقطة مرتين مرة واحدة فقط. الترخيص: صناديق البريد المؤرشفة من الأنظمة الأخرى بند ترخيص منفصل، ولا تُحتسب فيه صناديق بريد nextxch الخاصة بكم. 10 صناديق بريد مؤرشفة مجانية في كل فئة، والمزيد يأتي مع ترخيص Business أو Enterprise.

1. البدء السريع: إنشاء مصدر دفتر يومية لـ Microsoft 365

تبدأ المصادر الجديدة معطّلة. اختبروا الاتصال، ثم فعّلوا المصدر. يُنشئ الخادم عنوان دفتر اليومية مع رمز سري عند تحديد النطاق فقط؛ ويجب أن يشير سجل MX الخاص به إلى nextxch.

المرجع / الإعداد
# 1. Admin > Compliance > Archive sources > New source, kind "SMTP journal"
#    Domains of the old environment: company.com · journal domain: archive.company.com
#    -> journal address e.g. journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com (copy it)
# 2. Protection: IP ranges of the Exchange Online servers, TLS required, allowed envelope senders
# 3. Microsoft Purview: Solutions > Data lifecycle management > Exchange (legacy) > Journal rules
#    or Exchange Online PowerShell:
Set-TransportConfig -JournalingReportNdrTo journal-ndr@archive.company.com
New-JournalRule -Name "nextxch Archive" -JournalEmailAddress journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com -Scope Global -Enabled $true
Get-JournalRule | Format-Table Name,Enabled,JournalEmailAddress,Scope
# 4. Send a test message: the source shows the original with all envelope recipients (including Bcc)

2. دفتر اليومية من Exchange المحلي وGoogle Workspace

Exchange المحلي (On-Premises): قاعدة دفتر يومية بعنوان دفتر اليومية نفسه (تسجيل دفتر اليومية المتميز، ويتطلب Exchange Enterprise CAL) أو تسجيل دفتر اليومية القياسي لكل قاعدة بيانات صناديق بريد إلى ذلك العنوان؛ وفي البيئة المختلطة أنشئوا القاعدة أيضًا على خادم Exchange المحلي. Google Workspace: تضيف قاعدة توجيه عنوان دفتر اليومية كمستلم إضافي؛ ولا حاجة إلى Google Vault. ومع "Comprehensive mail storage" يصل البريد القادم من SMTP relay وخدمات Google أيضًا إلى صناديق البريد. ويرسل أي MTA آخر نسخًا عبر BCC إلى عنوان دفتر اليومية.

المرجع / الإعداد
# Exchange Server (Exchange Management Shell)
New-JournalRule -Name "nextxch Archive" -JournalEmailAddress journal-k3x9q2m7v1c8b4n6z5ta@archive.company.com -Scope Global -Enabled $true

# Google Admin console: Menu > Apps > Google Workspace > Gmail > Routing > Configure
#   Messages to affect: inbound, outbound, internal inbound, internal outbound
#   Action: Modify message > Add more recipients > Advanced > journal address
#   Optional: do not deliver spam to this recipient, suppress bounces from this recipient
# Journal source in nextxch: format bcc or auto, IP ranges of Google's outbound servers, TLS required

3. IMAP: أي خادم، للقراءة فقط

تُفتح المجلدات بـ EXAMINE ويُجلب المحتوى بـ BODY.PEEK[]، ولا تتغير العلامات في المصدر أبدًا. يُحدَّث مؤشر لكل مجلد (UIDVALIDITY وآخر UID وHIGHESTMODSEQ مع CONDSTORE) بعد كل رسالة، ويُستأنف أي انقطاع من النقطة نفسها تمامًا. TLS إلزامي (ضمني أو STARTTLS)، اختياريًا مع شهادة مثبّتة (SHA-256)؛ وتسجيل الدخول بكلمة المرور أو XOAUTH2، لحساب واحد أو لقائمة حسابات. ويُتخطّى مجلدا المحذوفات والبريد العشوائي افتراضيًا.

المرجع / الإعداد
{
  "host": "imap.oldhoster.com",
  "tls": "implicit",
  "auth": "password",
  "mode": "single",
  "username": "accounting@company.com",
  "address": "accounting@company.com",
  "excludeFolders": ["Drafts"],
  "since": "2016-01-01",
  "maxConnections": 2
}
# Secret: password (or oauthToken with xoauth2), in list mode accounts/<id>/password

4. Microsoft 365 عبر Microsoft Graph: تسجيل التطبيق في Entra ID

يقرأ المصدر البريد الموجود والجديد باستعلامات دلتا لكل مجلد، دون EWS (إذ توقف Microsoft دعم EWS في Exchange Online). أذونات التطبيق في Microsoft Graph بموافقة المسؤول: Mail.Read وUser.Read.All، وGroupMember.Read.All فقط مع عامل تصفية المستخدمين "group". تسجيل الدخول بشهادة (موصى به) أو بسر العميل، والسحابات global وusgov وusgovdod وchina. يُراعى تقييد Graph (429 مع Retry-After)، ويُستأنف التشغيل من آخر صفحة عولجت بالكامل. تبقى الرسائل المحذوفة في المصدر محفوظة في الأرشيف. واختياريًا، يقيّد Exchange Online RBAC for Applications الوصول بمجموعة.

المرجع / الإعداد
# Entra admin center > App registrations > New registration "nextxch Archive" (single tenant)
# API permissions > Microsoft Graph > Application permissions:
#   Mail.Read, User.Read.All (+ GroupMember.Read.All with group filter) > Grant admin consent
# Certificates & secrets: upload a certificate (.cer) or create a client secret
{
  "tenantId": "company.onmicrosoft.com",
  "clientId": "11111111-2222-3333-4444-555555555555",
  "credentialType": "certificate",
  "cloud": "global",
  "userFilter": { "mode": "group", "groupId": "99999999-0000-0000-0000-000000000009" },
  "sinceUtc": "2019-01-01T00:00:00Z"
}
# Secrets: certificatePfx (Base64) + certificatePassword or clientSecret (the value, not the ID)

5. Google Workspace عبر Gmail API: حساب الخدمة والتفويض على مستوى النطاق

حساب خدمة في مشروع Google Cloud الخاص بالعميل (تُحتسب حصص Gmail لكل مشروع) مع تفعيل Gmail API وAdmin SDK API. في Admin console يُخوَّل معرّف العميل الرقمي الخاص به للتفويض على مستوى النطاق بنطاقات الصلاحيات gmail.readonly وadmin.directory.user.readonly، إضافة إلى admin.directory.group.member.readonly لعامل التصفية "group". الاستيراد الأولي عبر messages.list وmessages.get (raw)، ثم مزامنة السجل (History)؛ وإذا انتهت صلاحية السجل، يُعاد بدء الاستيراد وتُحتسب الرسائل المؤرشفة مسبقًا كمكررة. ويمكن ضبط ميزانية الحصة لكل مستخدم ولكل مشروع.

المرجع / الإعداد
# Admin console: Security > Access and data control > API controls > Domain-wide delegation
#   client ID (numeric) + scopes:
#   https://www.googleapis.com/auth/gmail.readonly,
#   https://www.googleapis.com/auth/admin.directory.user.readonly
{
  "adminSubject": "admin@company.com",
  "domain": "company.com",
  "userFilter": "orgUnit",
  "orgUnitPath": "/Sales",
  "sinceUtc": "2018-01-01T00:00:00Z",
  "quotaUnitsPerUserMinute": 4800
}
# Secret: serviceAccountKey (JSON key file of the service account)

6. التخزين واحتفاظ WORM والحجز القانوني

لكل صندوق بريد مؤرشف مخزن خاص به للأرشيف فقط في أرشيف GoBD. لكل رسالة: عنوان محتوى SHA-256 مع إزالة التكرار عبر جميع صناديق البريد، وفحص التكرار لكل صندوق بريد حسب SHA-256 وMessage-ID، واحتفاظ WORM والحجز القانوني للمصدر على الكائن الثنائي (Blob) والرسالة، وسلسلة تجزئة لكشف التلاعب، وفهرس للنص الكامل. ويحصي السجل لكل تشغيل الرسائل المخزّنة والمكررة والمرفوضة.

المرجع / الإعداد
Retention      RetentionDays 0..36500 (0 = no WORM retention)
Mode           Normal | Governance | Compliance (default)
Legal hold     per source, also applies to already archived messages
Storage        local or S3 with Object Lock (like the rest of the GoBD archive)
Status         per mailbox: last run, next run, stored, duplicates, rejected, errors

7. البحث والتصدير والاستعادة

يمكن اختيار صناديق البريد المؤرشفة كنطاق منفصل في بحث الامتثال (بحث باللغة الألمانية مع تقسيم الكلمات المركبة، وOCR في المرفقات، وحقول ZUGFeRD)، ولكل منها أزرار للبحث وتصدير الأدلة والاستعادة في القائمة. يوفّر تصدير الأدلة ملف ZIP يحتوي على ملفات .eml الأصلية وبيانًا موقّعًا بـ Ed25519 (انظروا الفصل 17a). تنسخ الاستعادة إلى صندوق بريد nextxch، ويبقى الأرشيف دون تغيير. أما الاستعادة إلى Microsoft 365 أو Google أو خادم IMAP فغير متاحة بعد؛ ويغطي التصدير هذه الحالة. البحث متاح في كل فئة، ومهام تصدير الأدلة والاستعادة بدءًا من Business.

المرجع / الإعداد
# Search in an archived mailbox
curl -s "https://mail.company.com/api/compliance/search?archivedMailboxId=<id>&q=invoice&limit=100" -H "X-Api-Key: $KEY"

# Evidence export of an archived mailbox (202, status under GET /api/compliance/exports/{id})
curl -X POST https://mail.company.com/api/compliance/exports -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"scope":"mailbox","archivedMailboxId":"<id>","caseReference":"case 4711"}'

# Restore into a nextxch mailbox
curl -X POST https://mail.company.com/api/compliance/restore/jobs -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"source":"archive","account":"archived:<id>","target":"account","targetAccount":"successor@company.com"}'

8. واجهة Admin API: /api/admin/archive-sources

TenantAdmin داخل المستأجر الخاص به، وServerAdmin في كل مكان؛ أما ComplianceAuditor فيقرأ (لاختيار صناديق البريد المؤرشفة للبحث والتصدير) لكنه لا يغيّر أي شيء أبدًا. قيمة Kind هي Journal أو Imap أو Microsoft365 أو Google. ويُرفض تفعيل صندوق بريد يتجاوز حصة الترخيص برسالة تتضمن بند الترخيص الحالي. تستقبل مصادر دفتر اليومية عبر SMTP، ولا يوجد لها تشغيل (409 JOURNAL_IS_PUSHED).

المرجع / الإعداد
GET    /api/admin/archive-sources                          sources, licence line, available kinds with fields
GET    /api/admin/archive-sources/license                  used, allowed, free, remaining
POST   /api/admin/archive-sources                          create a source
GET    /api/admin/archive-sources/{id}                     source, mailboxes, names of the secrets
PUT    /api/admin/archive-sources/{id}                     change (settings, retention, legal hold, schedule)
DELETE /api/admin/archive-sources/{id}                     delete
POST   /api/admin/archive-sources/{id}/test                connection test
POST   /api/admin/archive-sources/{id}/discover            discover mailboxes
GET    /api/admin/archive-sources/{id}/mailboxes           archived mailboxes
PUT    /api/admin/archive-sources/{id}/mailboxes/{mbxId}   {"enabled": true} within the licence line
POST   /api/admin/archive-sources/{id}/run                 fetch now, optionally {"mailboxId": "..."}
GET    /api/admin/archive-sources/{id}/runs                history (mailboxId, limit)

curl -X POST https://mail.company.com/api/admin/archive-sources -H "X-Api-Key: $KEY" -H "Content-Type: application/json" -d '{
  "kind": "Journal", "name": "Microsoft 365 journal", "journalDomain": "archive.company.com",
  "settings": { "domains": ["company.com"], "allowedSenderNetworks": ["203.0.113.0/24"], "requireTls": true },
  "retentionDays": 3650, "lockMode": "Compliance" }'

الإعدادات والقيم الافتراضية وأفضل الممارسات

الإعداد / الموقع الوصف القيمة الافتراضية أفضل ممارسة للإنتاج
Journal: Domains (domains) تصبح عناوين المغلّف من هذه النطاقات ونطاقاتها الفرعية فقط صناديق بريد مؤرشفة (عند ظهورها لأول مرة ما دام الاكتشاف التلقائي مفعّلًا). وتذهب الرسائل التي لا تحمل عنوانًا مطابقًا إلى مخزن "دفتر يومية دون تعيين" الخاص بالمصدر، والذي لا يُحتسب ضمن الترخيص. leer · automatische Erkennung an أدخلوا جميع نطاقات البيئة القديمة، وإلا ستغيب صناديق بريد عن التعيين.
Journal: Schutz (allowedSenderNetworks, requireTls, allowedEnvelopeSenders) عناوين IP أو نطاقات CIDR المسموح بها للخوادم المرسِلة، والقبول عبر TLS فقط (STARTTLS أو الضمني)، ومرسلو المغلّف المسموح بهم (عنوان، أو *@domain، أو domain). يحتاج عنوان دفتر اليومية إما إلى قائمة IP أو إلى رمز سري في جزئه المحلي (16 حرفًا على الأقل، يُنشئه الخادم). keine IP-Liste · TLS aus · alle Absender اضبطوا نطاقات IP الخاصة بالمزوّد واشترطوا TLS؛ واحتفظوا بالرمز أيضًا.
Journal: Format (format) يكتشف auto تقرير دفتر اليومية من خلال X-MS-Journal-Report؛ ويفرض envelope التحليل كتقرير Exchange أو Microsoft 365، ويعامل bcc كل رسالة كنسخة (قاعدة نسخ Google، وخوادم MTA الأخرى). auto أبقوا على auto ما لم يرسل MTA نسخ BCC بترويسات خاصة به.
Aufbewahrung (RetentionDays, LockMode) مدة احتفاظ WORM بالأيام لكل مصدر (من 0 إلى 36,500، و0 = دون احتفاظ WORM) مع الوضع Normal أو Governance أو Compliance. تنطبق على الكائن الثنائي والرسالة لكل بريد مؤرشف. Compliance اختاروا المدة القانونية للمراسلات التجارية والسجلات المحاسبية؛ ولا يمكن رفع Compliance قبل انتهائها.
Legal Hold (LegalHold) يقفل جميع رسائل المصدر ضد الحذف، حتى بعد انتهاء مدة الاحتفاظ. وعند تفعيله يُطبَّق الحجز أيضًا على الرسائل المؤرشفة مسبقًا؛ ويُسجَّل كل تغيير في سجل التدقيق. aus فعّلوه في حالة التقاضي أو التدقيق، ولا ترفعوه إلا بعد موافقة القسم القانوني.
Zeitplan und Erkennung (ScheduleMinutes, AutoDiscover) فاصل الجلب لمصادر API (IMAP وMicrosoft 365 وGoogle) من 5 دقائق إلى 7 أيام؛ وفي العنقود تجلب العقدة القائدة فقط. تستقبل مصادر دفتر اليومية عبر SMTP وليس لها جدول زمني. 60 min للاستيراد الأولي للمستأجرين الكبار، ابدؤوا التشغيل يدويًا وراقبوا السجل لكل صندوق بريد.
Geheimnisse (Secrets) تُخزَّن كلمات المرور وأسرار العملاء والشهادات ومفاتيح حسابات الخدمة مشفّرة في حلقة مفاتيح الخادم (Keyring). وهي للكتابة فقط: تحمل استجابات API أسماءها فقط ولا تحمل قيمها أبدًا، ولا تظهر في السجلات مطلقًا. verschlüsselt انتبهوا إلى تاريخ انتهاء صلاحية سر العميل والشهادة؛ إذ يُبلغ اختبار الاتصال عن السر المنتهي الصلاحية.