

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# SES에서 이메일 첨부 파일 작업
<a name="attachments"></a>

SES의 이메일 첨부 파일은 SES API v2 `SendEmail` 및 `SendBulkEmail` 작업을 사용할 때 이메일 메시지에 포함할 수 있는 파일입니다. 이 기능을 사용하면 PDF, 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` 콘텐츠 유형이 있는 SES API v2, SMTP 인터페이스 및 SES API v1은 [원시 이메일 MIME 메시지 구성](send-email-raw.md#send-email-raw-mime)을 통해 첨부 파일을 계속 처리합니다.

## SES에서 첨부 파일이 작동하는 방식
<a name="how-attachments-work"></a>

첨부 파일이 포함된 이메일을 보낼 때 서로 다른 단계에서 발생하는 두 가지 유형의 인코딩이 있습니다.

1단계 - SES로 데이터 전송:
+ SES에 첨부 파일을 보내려면 바이너리 데이터(예: PDF 또는 이미지)를 안전하게 전송할 수 있는 형식으로 변환해야 합니다.
+ 여기서 base64 인코딩이 사용됩니다. JSON 요청에서 원시 바이너리 데이터를 전송할 수 없기 때문에 필요합니다.
+  AWS SDK를 사용하는 경우이 인코딩이 자동으로 처리됩니다.
+ 를 사용하는 경우 첨부 파일을 보내기 전에 직접 base64 인코딩 AWS CLI해야 합니다.

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`입니다.

연결된 모든 콘텐츠는 전송을 위해 SES 엔드포인트로 전송하기 전에 base64로 인코딩되어야 합니다. AWS SDK 클라이언트를 사용하여 API를 호출하는 경우 자동으로 처리됩니다. 를 사용 AWS CLI중이거나 자체 클라이언트를 구현한 경우 다음과 같이 인코딩을 직접 수행해야 합니다.
+ 일반 텍스트 콘텐츠: `Text attachment sample content.`
+ Base64 인코딩: `VGV4dCBhdHRhY2htZW50IHNhbXBsZSBjb250ZW50Lg==`

다음 예제에서는 SES API v2로 첨부 파일을 지정할 때 첨부 파일 객체 구조를 사용하는 방법과 첨부 파일 객체 요소가 포함된 JSON 파일을 AWS CLI 참조하는 [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-types)에 나열된 유형을 제외하고 첨부 파일에 대해 다양한 MIME 유형을 지원합니다.

## SES에서 지원되지 않는 첨부 파일 유형
<a name="mime-types"></a>

Multipurpose Internet Mail Extensions(MIME) 표준을 사용하여 Amazon SES를 통해 첨부 파일이 포함된 메시지를 전송할 수 있습니다. Amazon SES는 모든 첨부 파일 유형을 허용합니다(다음 목록의 확장명을 사용하는 첨부파일 *제외*).


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

일부 ISP는 제한 사항(예: 보관된 첨부 파일 관련 제한 사항)을 추가로 두고 있으므로 프로덕션 이메일을 보내기 전에 주요 ISP를 통해 이메일 전송을 테스트하는 것이 좋습니다.