# POST /v2/mail/sent/store

# Mail: Store &amp; Send Email

این اندپوینت وظیفه ذخیره‌سازی و ارسال ایمیل را بر عهده دارد.   
عملکرد این متد وابسته به پارامتر `type` است: اگر `outbox` باشد، ایمیل علاوه بر ذخیره شدن در دیتابیس، با استفاده از تنظیمات SMTP پویا (Dynamic SMTP) بلافاصله ارسال می‌شود. در غیر این صورت (مثلاً پیش‌نویس)، صرفاً ذخیره می‌شود.

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fmail%2Fsent%2Fs"><div class="endpoint-info"><div>**URL:** `/v2/mail/sent/store`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** MailController@mailSentStore</div><div>**Middleware Stack:** authWithJwt</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%85%D8%B9%D8%AA%D8%A8%D8%B1-jwt.">- دسترسی معتبر JWT.

</div>## Body Parameters

<div class="api-docs" id="bkmrk-field-type-descripti"><table class="schema-table" dir="rtl"><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>from</td><td>integer</td><td>**(الزامی)** شناسه آدرس فرستنده (ID از جدول `mail\_address`). جهت واکشی تنظیمات SMTP استفاده می‌شود.</td></tr><tr><td>type</td><td>string</td><td>**(الزامی)** نوع عملیات. مقدار `outbox` باعث ارسال واقعی ایمیل می‌شود.</td></tr><tr><td>to</td><td>string/array</td><td>**(الزامی)** آدرس گیرنده(ها).</td></tr><tr><td>subject</td><td>string</td><td>**(الزامی)** موضوع ایمیل.</td></tr><tr><td>content</td><td>html/string</td><td>**(الزامی)** متن بدنه ایمیل.</td></tr><tr><td>cc</td><td>string/array</td><td>(اختیاری) گیرندگان رونوشت.</td></tr><tr><td>bcc</td><td>string/array</td><td>(اختیاری) گیرندگان رونوشت مخفی.</td></tr><tr><td>attachments</td><td>array\[string\]</td><td>(اختیاری) آرایه‌ای از مسیر فایل‌های آپلود شده (روی دیسک Liara) جهت پیوست.</td></tr></tbody></table>

</div>## Logic Details

منطق پردازش به شرح زیر است:

<div class="api-docs" id="bkmrk-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%A7%D9%88%D9%84%DB%8C%D9%87-%28persist">1. **ذخیره اولیه (Persist):** اطلاعات اولیه ایمیل (گیرندگان، موضوع، متن) در جدول `mail_sent` درج شده و `mail_id` دریافت می‌شود.
2. **پردازش پیوست‌ها (DB):**
    - اگر آرایه `attachments` ارسال شده باشد، سیستم روی آن‌ها حلقه می‌زند.
    - متادیتای هر فایل (mime, size, url) از دیسک ابری (Liara) استخراج می‌شود.
    - اطلاعات در جدول `mail_attachment` با جهت `sent` ذخیره می‌شود.
3. **منطق ارسال (SMTP):** اگر `type == 'outbox'` باشد: 
    1. **واکشی تنظیمات:** بر اساس `from` (شناسه آدرس)، اطلاعات سرور (Host, Port, User, Pass) و برند (Brand/Title, Signature) از جداول `mail_address`, `mail_servers`, `offices` استخراج می‌شود.
    2. **کانفیگ پویا (Dynamic Config):** تنظیمات `mail.mailers.smtp` در لاراول به صورت Runtime با اطلاعات واکشی شده جایگزین می‌شود.
    3. **ارسال:**
        - امضا (Signature) در صورت وجود به انتهای متن اضافه می‌شود.
        - هدر `From` با ترکیب آدرس+دامنه و عنوان+برند تنظیم می‌شود.
        - فایل‌های پیوست مجدداً از دیسک خوانده شده و به ایمیل ضمیمه می‌شوند (`$message-&gt;attach`).
        - ایمیل ارسال می‌گردد.

</div>## Response Structure

### پاسخ موفق

<div class="api-docs" id="bkmrk-status-code%3A-200-ok-">- **Status Code:** `200 OK`
- **Body:**```json
    {
      "status": true,
      "time": 1670165000
    }
    ```

</div>## Flowchart

<div class="api-docs" id="bkmrk-start-%28post-%2Fsent%2Fst"><div class="flowchart"><div class="flow-item">Start (POST /sent/store)</div><div class="flow-arrow">↓</div><div class="flow-item-process">Insert into `mail_sent`</div><div class="flow-arrow">↓</div><div class="flow-item-decision">Has Attachments?</div><div style="position: relative; left: -140px; top: 10px;"><div class="flow-arrow-label-left" style="top: -25px; left: 60px;">Yes</div><div class="flow-item-process" style="width: 140px; background-color: #e0f2f1;">Loop Attachments  
Get Meta from Disk  
Insert `mail_attachment`</div></div><div style="position: relative; top: 10px;"><div class="flow-arrow-label-right" style="top: -25px; left: 10px;">No</div><div class="flow-arrow" style="height: 50px;">↓</div></div><div class="flow-item-decision" style="margin-top: 80px;">Type == 'outbox'?</div><div style="position: relative; left: -160px; top: 20px;"><div class="flow-arrow-label-left" style="top: -30px; left: 70px;">No</div><div class="flow-item-success" style="width: 120px; background-color: #f5f5f5; color: #333;">End (Saved Only)</div></div><div style="position: relative; left: 160px; top: -60px;"><div class="flow-arrow-label-right" style="top: 50px; left: -30px;">Yes</div><div class="flow-item-process" style="margin-top: 80px; width: 220px; background-color: #fff8e1;">**Fetch SMTP Credentials**  
(Join address, servers, offices)</div><div class="flow-arrow">↓</div><div class="flow-item-process" style="width: 220px; background-color: #fff3e0;">**Set Runtime Config**  
Config::set('mail.smtp', ...)</div><div class="flow-arrow">↓</div><div class="flow-item-process" style="width: 220px; background-color: #c8e6c9;">**Send Mail**  
Add Signature + Attachments</div><div class="flow-arrow">↓</div><div class="flow-item-success" style="width: 120px;">End (Sent)</div></div></div></div>