Skip to main content
#P1701

POST /v2/mail/attachments/download

Mail: Download Attachment

این اندپوینت وظیفه دریافت لینک دانلود فایل‌های پیوست ایمیل را بر عهده دارد.
برای ایمیل‌های ورودی (Inbox)، از استراتژی Lazy Download استفاده می‌شود: فایل ابتدا روی سرور ایمیل خارجی است؛ اگر اولین بار باشد که درخواست می‌شود، فایل دانلود شده، در S3 ذخیره می‌شود و لینک آن در دیتابیس ثبت می‌گردد. در درخواست‌های بعدی، لینک مستقیم S3 بازگردانده می‌شود.

Request Overview

URL: /v2/mail/attachments/download
Method: POST
Controller: MailController@mailAttachmentsDownload
Middleware Stack: authWithJwt

Access Control

  • دسترسی معتبر JWT.

Body Parameters

Field Type Description
id integer (الزامی) شناسه رکورد پیوست در جدول لوکال (`mail_attachment.id`).
service_id integer (الزامی برای Inbox) شناسه سرویس ایمیل جهت ارتباط با API خارجی.
mail_id string (الزامی برای Inbox) شناسه پیام در سرور خارجی (Message ID).
attach_id string (الزامی برای Inbox) شناسه پیوست در سرور خارجی.
branch string (الزامی) نام یا شناسه برنچ جهت ساختن مسیر ذخیره‌سازی فایل در S3 (مثلاً: `uploads/{branch}/mailbox/...`).

Logic Details

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

  1. بازیابی رکورد: ابتدا رکورد پیوست از جدول mail_attachment بر اساس id خوانده می‌شود.
  2. بررسی جهت (Direction):
    • اگر Sent (ارسالی) باشد: فایل قبلاً هنگام ارسال آپلود شده است. لینک موجود در ستون storage مستقیماً بازگردانده می‌شود.
    • اگر Inbox (دریافتی) باشد:
      • بررسی کش (Cache Check): سیستم چک می‌کند آیا فیلد storage مقدار دارد (Not Null)؟
        • بله: فایل قبلاً دانلود شده است. لینک S3 بازگردانده می‌شود.
        • خیر (دانلود اولیه):
          1. یک درخواست به API سرویس‌دهنده ایمیل ارسال می‌شود (با استفاده از `service_id`, `mail_id`, `attach_id`).
          2. محتوای فایل (Base64) دریافت می‌شود.
          3. فایل در S3 (فضای ابری) آپلود می‌شود.
          4. لینک فایل جدید در ستون storage رکورد دیتابیس آپدیت می‌شود تا در دفعات بعدی دانلود نشود.
          5. لینک نهایی به کاربر ارسال می‌شود.

Response Structure

پاسخ موفق

  • Status Code: 200 OK (یا بازگشت آرایه موفق)
  • Body:
    {
      "status": true,
      "time": 1670158000,
      "link": "https://storage.bucket.com/uploads/main/mailbox/2023/05/file.pdf"
    }

Flowchart

Start (POST /attachments/download)
Fetch `mail_attachment` by ID
Direction?
Sent
Return `storage`
(Existing Link)
Inbox
Storage Exists?
Yes
Return Link
No (Null)
Fetch External API
Get Base64 Content
Upload to S3
Update DB `storage`
Return New Link