

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 SES 中使用電子郵件附件
<a name="attachments"></a>

SES 中的電子郵件附件是您可以在使用 SES API v2 `SendEmail`和 `SendBulkEmail`操作時包含在電子郵件訊息中的檔案。此功能可讓您透過包含 PDFs、Word 檔案、映像或其他符合 SES 支援 MIME 類型的檔案類型，來豐富您的電子郵件內容。您也可以包含直接在電子郵件內容中轉譯的內嵌影像，而不需要收件人單獨下載。每封電子郵件可以包含多個附件，總訊息大小上限為 40MB。

**注意**  
[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) 具有`Raw`內容類型、SMTP 界面和 SES API v1 的 SES API v2 會透過[原始電子郵件 MIME 訊息建構](send-email-raw.md#send-email-raw-mime)繼續處理附件。

## 連接在 SES 中的運作方式
<a name="how-attachments-work"></a>

使用附件傳送電子郵件時，在不同的階段會發生兩種不同類型的編碼：

階段 1 – 將資料傳送至 SES：
+ 當您想要將附件傳送至 SES 時，二進位資料 （例如 PDF 或影像） 需要轉換為可安全傳輸的格式。
+ 這是 base64 編碼傳入的位置，這是必要的，因為您無法在 JSON 請求中傳送原始二進位資料。
+ 如果您使用 AWS SDK，則會自動處理此編碼。
+ 如果您使用的是 AWS CLI，您需要先自行對附件進行 base64 編碼，才能傳送附件。

階段 2 – 建立電子郵件的 SES：
+ 一旦 SES 收到您的資料，它需要建立附有附件的實際電子郵件。
+ 這是 [ContentTransferEncoding](#attachment-structure) 設定開始運作的位置。
+ SES 將使用您在 ContentTransferEncoding 中指定的任何編碼方法，自動格式化最終電子郵件中的附件。

想像一下，它類似於透過郵件傳送套件。首先，您需要將套件取得至郵局 （需要階段 1 - Base64-encoding)，然後郵局會將其妥善封裝以進行最終交付 （階段 2 - ContentTransferEncoding)。

## 附件物件結構
<a name="attachment-structure"></a>

當您透過 SES 傳送含有附件的電子郵件時，服務會自動處理複雜的 MIME 訊息建構。您只需要透過下列 SES API v2 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html) 物件結構提供附件內容和中繼資料：
+ `FileName` （必要） – 向收件人顯示的檔案名稱 （必須包含副檔名）。如果未提供，SES 將從 `ContentType` 的延伸衍生 `FileName`。
+ `ContentType` （選用） – [IANA 相容媒體類型識別符](https://www.iana.org/assignments/media-types/media-types.xhtml)。
+ `ContentDisposition` （選用） – 指定應如何轉譯附件： `ATTACHMENT` *（預設）* 或 `INLINE`。
+ `ContentDescription` （選用） – 內容的簡短描述。
+ `RawContent` （必要） – 附件的實際內容。
+ `ContentTransferEncoding` （選用） – 指定附件承載在組合成電子郵件的 mime 訊息時如何編碼： `SEVEN_BIT`*（預設）* `BASE64`或 `QUOTED_PRINTABLE`。

所有連接的內容都必須編碼為 base64，才能轉移到 SES 端點進行傳送。如果您使用 AWS SDK 用戶端進行 API 呼叫，則會自動為您處理。如果您使用的是 AWS CLI，或已實作自己的用戶端，則必須自行執行編碼，例如：
+ 純文字內容： `Text attachment sample content.`
+ Base64 編碼： `VGV4dCBhdHRhY2htZW50IHNhbXBsZSBjb250ZW50Lg==`

下列範例示範如何在使用 AWS CLI 參考包含附件物件元素的 JSON 檔案，使用 SES API v2 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)和 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)操作指定附件時，使用附件物件結構。

**Example – 包含簡單內容的 SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple.json
```
**request-send-email-simple.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Text": {
                    "Data": "Please see attached document."
                },
                "Html": {
                    "Data": "Please see attached <b>document</b>."
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – 包含簡單內容和內嵌附件的 SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple-inline-attachment.json
```
**request-send-email-simple-inline-attachment.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Html": {
                    "Data": "<html><body>Our logo:<br><img src=\"cid:logo123\" alt=\"Company Logo\"></body></html>"
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "INLINE",
                    "FileName": "logo.png",
                    "ContentId": "logo123",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – SendEmail 與範本內容**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-template.json
```
**request-send-email-template.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{\"name\":\"John\"}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – SendBulkEmail 與附件內容**  

```
aws sesv2 send-bulk-email --cli-input-json file://request-send-bulk-email.json
```
**request-send-bulk-email.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "DefaultContent": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    },
    "BulkEmailEntries": [
        {
            "Destination": {
                "ToAddresses": [
                    "recipient@example.com"
                ]
            },
            "ReplacementEmailContent": {
                "ReplacementTemplate": {
                    "ReplacementTemplateData": "{\"name\":\"John\"}"
                }
            }
        }
    ]
}
```

## 最佳實務
<a name="attachments-best-practices"></a>
+ 將總訊息大小 （包括附件） 保持在 40MB 以下。
+ 讓 SES 盡可能根據副檔名自動偵測內容類型。
+ 只有當內容類型落在[常見 MIME 類型之外時，才明確指定內容類型](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types)。
+ 請考慮使用內嵌影像以獲得更好的電子郵件轉譯。
+ SES 支援各種 MIME 類型的附件，但 中列出的類型除外[不支援的附件類型](#mime-types)。

## SES 不支援的附件類型
<a name="mime-types"></a>

您可以使用多用途網際網路郵件延伸 (MIME) 標準，透過 Amazon SES 傳送含有附件的訊息。Amazon SES 接受所有檔案附件類型，含有列於下列清單中的副檔名之附件*除外*。


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
| .ade<br />.adp<br />.app<br />.asp<br />.bas<br />.bat<br />.cer<br />.chm<br />.cmd<br />.com<br />.cpl<br />.crt<br />.csh<br />.der<br />.exe<br />.fxp<br />.gadget<br />.hlp | .hta<br />.inf<br />.ins<br />.isp<br />.its<br />.js<br />.jse<br />.ksh<br />.lib<br />.lnk<br />.mad<br />.maf<br />.mag<br />.mam<br />.maq<br />.mar<br />.mas<br />.mat | .mau<br />.mav<br />.maw<br />.mda<br />.mdb<br />.mde<br />.mdt<br />.mdw<br />.mdz<br />.msc<br />.msh<br />.msh1<br />.msh2<br />.mshxml<br />.msh1xml<br />.msh2xml<br />.msi<br />.msp | .mst<br />.ops<br />.pcd<br />.pif<br />.plg<br />.prf<br />.prg<br />.reg<br />.scf<br />.scr<br />.sct<br />.shb<br />.shs<br />.sys<br />.ps1<br />.ps1xml<br />.ps2<br />.ps2xml | .psc1<br />.psc2<br />.tmp<br />.url<br />.vb<br />.vbe<br />.vbs<br />.vps<br />.vsmacros<br />.vss<br />.vst<br />.vsw<br />.vxd<br />.ws<br />.wsc<br />.wsf<br />.wsh<br />.xnk | 

部分 ISP 可能有其他限制 (例如關於封存的附件之限制)，因此我們建議在傳送生產電子郵件時先針對透過主要 ISP 執行的電子郵件傳送進行測試。