

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Siapkan pengiriman email dengan Amazon SES
<a name="send-email"></a>

Anda dapat mengirim email dengan Amazon Simple Email Service (Amazon SES) menggunakan konsol Amazon SES, antarmuka Protokol Transfer Surat Sederhana (SMTP) Amazon SES, atau API Amazon SES. Anda biasanya menggunakan konsol tersebut untuk mengirim dan mengelola aktivitas pengiriman Anda. Untuk mengirim email dalam jumlah besar, Anda dapat menggunakan salah satu antarmuka SMTP atau API. Untuk informasi selengkapnya tentang harga email Amazon SES, lihat [Harga Amazon SES](https://aws.amazon.com/ses/pricing).
+ Jika Anda ingin menggunakan paket perangkat lunak yang diaktifkan SMTP, aplikasi, atau bahasa pemrograman untuk mengirim email melalui Amazon SES, atau mengintegrasikan Amazon SES dengan server mail yang ada, gunakan antarmuka SMTP Amazon SES. Untuk informasi lebih lanjut, lihat [Mengirim email melalui antarmuka Amazon SES SMTP secara terprogram](send-using-smtp-programmatically.md).
+ Jika Anda ingin memanggil Amazon SES dengan menggunakan permintaan HTTP mentah, gunakan API Amazon SES. Untuk informasi lebih lanjut, lihat [Menggunakan API Amazon SES untuk mengirim email](send-email-api.md).

**penting**  
Ketika Anda mengirim email ke beberapa penerima (penerima adalah alamat "Kepada", "CC", dan "BCC") dan panggilan ke Amazon SES gagal, seluruh email akan ditolak dan tidak ada penerima yang akan menerima email yang dimaksud. Oleh karena itu, kami merekomendasikan Anda mengirim email ke satu penerima pada satu waktu.

# Menggunakan antarmuka SMTP Amazon SES untuk mengirim email
<a name="send-email-smtp"></a>

Untuk mengirim email produksi melalui Amazon SES, Anda dapat menggunakan antarmuka Protokol Transfer Surat Sederhana (SMTP) atau API Amazon SES. Untuk informasi selengkapnya tentang API Amazon SES, lihat [Menggunakan API Amazon SES untuk mengirim email](send-email-api.md).. Bagian ini menjelaskan antarmuka SMTP.

Amazon SES mengirimkan email menggunakan SMTP, merupakan protokol email yang paling umum di internet. Anda dapat mengirim email melalui Amazon SES menggunakan berbagai bahasa pemrograman yang diaktifkan SMTP dan perangkat lunak untuk terhubung ke antarmuka SMTP Amazon SES. Bagian ini menjelaskan cara untuk mendapatkan kredensial SMTP Amazon SES Anda, cara mengirim email menggunakan antarmuka SMTP, dan cara mengonfigurasi beberapa perangkat lunak dan server mail untuk menggunakan Amazon SES untuk mengirim email.

Untuk solusi masalah umum yang mungkin Anda alami ketika menggunakan Amazon SES melalui antarmuka SMTP, lihat [Masalah SMTP Amazon SES](troubleshoot-smtp.md). 

## Persyaratan untuk mengirim email melalui SMTP
<a name="send-email-smtp-requirements"></a>

Untuk mengirim email menggunakan antarmuka SMTP Amazon SES, Anda memerlukan hal berikut:
+ Alamat titik akhir SMTP. Untuk daftar titik akhir SMTP Amazon SES, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).
+ Nomor port antarmuka SMTP. Nomor port berbeda-beda menurut metode koneksinya. Untuk informasi lebih lanjut, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).
+ Nama pengguna dan kata sandi SMTP. Kredensial SMTP unik di setiap Wilayah AWS . Jika Anda berencana untuk menggunakan antarmuka SMTP untuk mengirim email di beberapa AWS Wilayah, Anda memerlukan kredensi SMTP untuk setiap Wilayah.
**penting**  
Kredensi SMTP Anda tidak identik dengan kunci AWS akses Anda atau kredenal yang Anda gunakan untuk masuk ke konsol Amazon SES. Untuk informasi tentang cara membuat kredensyal SMTP Anda, lihat. [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md)
+ Perangkat lunak klien yang dapat berkomunikasi menggunakan Keamanan Lapisan Pengangkutan (TLS). Untuk informasi lebih lanjut, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).
+ Alamat email yang telah Anda verifikasi dengan Amazon SES. Untuk informasi lebih lanjut, lihat [Identitas terverifikasi di Amazon SES](verify-addresses-and-domains.md).
+ Peningkatan kuota pengiriman, jika Anda ingin mengirim kuantitas email yang besar. Untuk informasi lebih lanjut, lihat [Mengelola batas pengiriman Amazon SES Anda](manage-sending-quotas.md).

## Metode untuk mengirim email melalui SMTP
<a name="send-email-methods"></a>

Anda dapat mengirim email melalui SMTP melalui salah satu metode berikut:
+ Untuk mengonfigurasi perangkat lunak yang diaktifkan SMTP untuk mengirim email melalui antarmuka SMTP Amazon SES, lihat [Mengirim email melalui Amazon SES menggunakan paket perangkat lunak](send-email-smtp-software-package.md).
+ Untuk memprogram aplikasi untuk mengirim email melalui Amazon SES, lihat [Mengirim email melalui antarmuka Amazon SES SMTP secara terprogram](send-using-smtp-programmatically.md).
+ Untuk mengonfigurasi server email yang ada agar dapat mengirim semua surat keluar Anda melalui Amazon SES, lihat [Mengintegrasikan Amazon SES dengan server email yang ada](send-email-smtp-existing-server.md).
+ Untuk berinteraksi dengan antarmuka SMTP Amazon SES menggunakan baris perintah, yang bisa berguna untuk pengujian, lihat [Menguji koneksi Anda ke antarmuka SMTP Amazon SES menggunakan baris perintah](send-email-smtp-client-command-line.md).

Untuk daftar kode respons SMTP, lihat [Kode respons SMTP dikembalikan oleh Amazon SES](troubleshoot-smtp.md#troubleshoot-smtp-response-codes).

## Informasi email yang akan disediakan
<a name="smtp-parameters"></a>

Ketika Anda mengakses Amazon SES melalui antarmuka SMTP, aplikasi klien SMTP Anda merakit pesan, sehingga informasi yang harus disediakan tergantung pada aplikasi yang Anda gunakan. Minimal, pertukaran SMTP antara klien dengan server memerlukan berikut ini: 
+ alamat sumber
+ alamat tujuan
+ data pesan

Jika Anda menggunakan antarmuka SMTP dan mengaktifkan penerusan umpan balik, maka notifikasi pentalan, aduan, dan penyampaian akan dikirim ke alamat "MAIL FROM". Alamat "Balas Ke" yang Anda tentukan tidak digunakan.



# Mendapatkan kredensial SMTP Amazon SES
<a name="smtp-credentials"></a>

Anda memerlukan kredensyal SMTP Amazon SES untuk mengakses antarmuka SES SMTP.

Kredensi yang Anda gunakan untuk mengirim email melalui antarmuka SES SMTP unik untuk setiap Wilayah. AWS Jika Anda menggunakan antarmuka SES SMTP untuk mengirim email di lebih dari satu Wilayah, Anda harus membuat satu set kredensi SMTP untuk setiap Wilayah yang Anda rencanakan untuk digunakan.

Kata sandi SMTP Anda berbeda dari kunci akses AWS rahasia Anda. Untuk informasi selengkapnya tentang jenis kredensial, lihat [Tipe kredensial Amazon SES](send-email-concepts-credentials.md).

**catatan**  
Untuk daftar titik akhir SMTP yang tersedia saat ini, lihat titik akhir [SMTP](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_smtp_endpoints) di. *Referensi Umum AWS* 

## Memperoleh kredensi SES SMTP menggunakan konsol SES
<a name="smtp-credentials-console"></a>

**Persyaratan**  
Pengguna IAM dapat membuat kredensyal SES SMTP, tetapi kebijakan pengguna harus memberi mereka izin untuk menggunakan IAM itu sendiri, karena kredensyal SES SMTP dibuat dengan menggunakan IAM. Kebijakan IAM Anda harus mengizinkan Anda untuk melakukan tindakan IAM berikut: `iam:ListUsers`, `iam:CreateUser`, `iam:CreateAccessKey`, dan `iam:PutUserPolicy`. Jika Anda mencoba membuat kredensyal SES SMTP menggunakan konsol dan pengguna IAM Anda tidak memiliki izin ini, Anda akan melihat kesalahan yang menyatakan bahwa akun Anda *“tidak diizinkan* untuk melakukan iam:.” ListUsers

**penting**  
Tindakan IAM yang direferensikan di atas memiliki tingkat akses [manajemen Izin](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html#access_policies_access-level) yang merupakan tingkat IAM tertinggi karena memberikan izin untuk memberikan atau memodifikasi izin sumber daya dalam layanan. Oleh karena itu, untuk meningkatkan keamanan AWS akun Anda, sangat disarankan agar Anda membatasi atau secara teratur memantau kebijakan ini yang mencakup klasifikasi tingkat akses manajemen Izin.

**Untuk membuat kredensial SMTP Anda**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon SES di [https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/).

1. Pilih **pengaturan SMTP** di panel navigasi kiri - ini akan membuka halaman pengaturan **Simple Mail Transfer Protocol (SMTP**).

1. Pilih **Create SMTP Credentials** di sudut kanan atas - konsol IAM akan terbuka.

1. (Opsional) Jika Anda perlu melihat, mengedit, atau menghapus pengguna SMTP yang telah Anda buat, pilih **Kelola kredensyal SMTP saya yang ada** di sudut kanan bawah - konsol IAM akan terbuka. Rincian untuk mengelola kredensyal SMTP diberikan mengikuti prosedur ini.

1. **Untuk **Buat Pengguna untuk SMTP**, ketikkan nama untuk pengguna SMTP Anda di bidang Nama Pengguna.** Atau, Anda dapat menggunakan nilai default yang disediakan di bidang ini. Setelah selesai, pilih **Buat pengguna** di sudut kanan bawah.

1. Pilih **Tampilkan** di bawah *kata sandi SMTP* - kredensi SMTP Anda ditampilkan di layar.

1. Unduh kredensyal ini dengan memilih **Unduh file.csv** atau salin dan simpan di tempat yang aman, karena Anda tidak dapat melihat atau menyimpan kredensialnya setelah menutup kotak dialog ini.

1. Pilih **Kembali ke konsol SES**.

Anda dapat melihat daftar kredensyal SMTP yang Anda buat menggunakan prosedur ini di konsol IAM di bawah **Manajemen akses** dan memilih **Pengguna diikuti dengan menggunakan bilah pencarian untuk menemukan semua pengguna** yang telah Anda tetapkan kredensyal SMTP.

Anda juga dapat menggunakan konsol IAM untuk menghapus pengguna SMTP yang sudah ada. Untuk mempelajari lebih lanjut tentang menghapus pengguna, lihat [Mengelola Pengguna IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html) *Memulai IAM*.

Jika Anda ingin mengubah kata sandi SMTP, Hapus pengguna SMTP yang ada di konsol IAM. Kemudian, untuk menghasilkan satu set kredensial SMTP yang baru, selesaikan prosedur sebelumnya .

## Memperoleh kredensyal SES SMTP dengan mengonversi kredensyal yang ada AWS
<a name="smtp-credentials-convert"></a>

Jika Anda memiliki pengguna yang Anda atur menggunakan antarmuka IAM, Anda dapat memperoleh kredenal SES SMTP pengguna dari kredensialnya. AWS 

**penting**  
Jangan gunakan kredensyal sementara untuk mendapatkan AWS kredensyal SMTP. Antarmuka SES SMTP tidak mendukung kredensyal SMTP yang telah dihasilkan dari kredensyal keamanan sementara. 

**Untuk mengaktifkan pengguna IAM mengirim email menggunakan antarmuka SES SMTP**

1. Dapatkan kredensi SMTP pengguna dari AWS kredensialnya dengan menggunakan algoritme yang disediakan di bagian ini mengikuti prosedur ini.

   Karena Anda memulai dari AWS kredensyal, nama pengguna SMTP sama dengan ID kunci AWS akses, jadi Anda hanya perlu membuat kata sandi SMTP.

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di bawah **Manajemen akses**, pilih **Kebijakan** diikuti dengan **Buat kebijakan**.

1. Di **editor Kebijakan**, pilih **JSON** dan hapus kode contoh apa pun di editor.

1. Tempelkan ke kebijakan izin berikut ke editor:

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Pilih **Berikutnya** dan masukkan `AmazonSesSendingAccess` di bidang **Nama kebijakan** diikuti oleh **Buat kebijakan**.

1. Di bawah **Manajemen akses**, pilih **Grup pengguna** diikuti oleh **Buat grup**.

1. Masukkan `AWSSESSendingGroupDoNotRename` di bidang **Nama grup pengguna**.

1. Tambahkan pengguna SMTP ke grup dengan memilihnya dari **Tambahkan pengguna ke tabel grup**.

1. Lampirkan `AmazonSesSendingAccess` kebijakan yang dibuat sebelumnya dengan memilihnya dari tabel **Lampirkan kebijakan izin** diikuti oleh **Buat grup pengguna**.

Untuk informasi selengkapnya tentang penggunaan SES dengan IAM, lihat[Identity and access management di Amazon SES](control-user-access.md).

**catatan**  
Meskipun Anda dapat menghasilkan kredensi SES SMTP untuk setiap pengguna IAM, kami menyarankan Anda membuat pengguna IAM terpisah ketika Anda membuat kredenal SMTP Anda. Untuk informasi tentang mengapa ini praktik yang baik untuk membuat pengguna dengan tujuan tertentu, buka [Praktik Terbaik IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html).

Pseudocode berikut menunjukkan algoritma yang mengubah kunci akses AWS rahasia ke kata sandi SES SMTP.

```
 1. // Modify this variable to include your AWS secret access key
 2. key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
 3.             
 4. // Modify this variable to refer to the AWS Region that you want to use to send email.
 5. region = "us-west-2";
 6.             
 7. // The values of the following variables should always stay the same.
 8. date = "11111111";
 9. service = "ses";
10. terminal = "aws4_request";
11. message = "SendRawEmail";
12. version = 0x04;
13. 
14. kDate = HmacSha256(date, "AWS4" + key);
15. kRegion = HmacSha256(region, kDate);
16. kService = HmacSha256(service, kRegion);
17. kTerminal = HmacSha256(terminal, kService);
18. kMessage = HmacSha256(message, kTerminal);
19. signatureAndVersion = Concatenate(version, kMessage);
20. smtpPassword = Base64(signatureAndVersion);
```

Beberapa bahasa pemrograman termasuk pustaka yang dapat Anda gunakan untuk mengubah secret access key IAM menjadi kata sandi SMTP. Bagian ini mencakup contoh kode yang dapat Anda gunakan untuk mengonversi kunci akses AWS rahasia ke kata sandi SES SMTP menggunakan Python.

**catatan**  
Contoh berikut menggunakan **f-string** yang diperkenalkan di Python 3.6; jika menggunakan versi lama, maka tidak akan berfungsi.
Dalam contoh berikut, daftar SMTP\$1REGIONS hanyalah sebuah contoh—daftar wilayah Anda yang sebenarnya bisa lebih pendek atau lebih lama tergantung pada wilayah mana Anda berencana untuk mengirim email karena Anda memerlukan kredensyal SMTP untuk masing-masing wilayah. Wilayah AWS

------
#### [ Python ]

```
#!/usr/bin/env python3

import hmac
import hashlib
import base64
import argparse

SMTP_REGIONS = [
    "us-east-2",  # US East (Ohio)
    "us-east-1",  # US East (N. Virginia)
    "us-west-2",  # US West (Oregon)
    "ap-south-1",  # Asia Pacific (Mumbai)
    "ap-northeast-2",  # Asia Pacific (Seoul)
    "ap-southeast-1",  # Asia Pacific (Singapore)
    "ap-southeast-2",  # Asia Pacific (Sydney)
    "ap-northeast-1",  # Asia Pacific (Tokyo)
    "ca-central-1",  # Canada (Central)
    "eu-central-1",  # Europe (Frankfurt)
    "eu-west-1",  # Europe (Ireland)
    "eu-west-2",  # Europe (London)
    "eu-south-1",  # Europe (Milan)
    "eu-north-1",  # Europe (Stockholm)
    "sa-east-1",  # South America (Sao Paulo)
    "us-gov-west-1",  # AWS GovCloud (US)
    "us-gov-east-1",  # AWS GovCloud (US)
]

# These values are required to calculate the signature. Do not change them.
DATE = "11111111"
SERVICE = "ses"
MESSAGE = "SendRawEmail"
TERMINAL = "aws4_request"
VERSION = 0x04


def sign(key, msg):
    return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()


def calculate_key(secret_access_key, region):
    if region not in SMTP_REGIONS:
        raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")

    signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE)
    signature = sign(signature, region)
    signature = sign(signature, SERVICE)
    signature = sign(signature, TERMINAL)
    signature = sign(signature, MESSAGE)
    signature_and_version = bytes([VERSION]) + signature
    smtp_password = base64.b64encode(signature_and_version)
    return smtp_password.decode("utf-8")


def main():
    parser = argparse.ArgumentParser(
        description="Convert a Secret Access Key to an SMTP password."
    )
    parser.add_argument("secret", help="The Secret Access Key to convert.")
    parser.add_argument(
        "region",
        help="The AWS Region where the SMTP password will be used.",
        choices=SMTP_REGIONS,
    )
    args = parser.parse_args()
    print(calculate_key(args.secret, args.region))


if __name__ == "__main__":
    main()
```

Untuk mendapatkan kata sandi SMTP Anda menggunakan skrip ini, simpan kode sebelumnya sebagai `smtp_credentials_generate.py`. Kemudian, di baris perintah, jalankan perintah berikut:

```
python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1
```

Di perintah sebelumnya, lakukan hal berikut:
+ Ganti *path/to/* dengan jalur ke lokasi tempat Anda menyimpan`smtp_credentials_generate.py`.
+ Ganti *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY* dengan kunci akses rahasia yang ingin Anda ubah menjadi kata sandi SMTP.
+ Ganti *us-east-1* dengan AWS Wilayah di mana Anda ingin menggunakan kredenal SMTP.

Ketika skrip ini berhasil berjalan, satu-satunya output adalah kata sandi SMTP Anda.

------

## Memigrasi pengguna SMTP dari kebijakan inline yang ada ke kebijakan grup (rekomendasi keamanan)
<a name="migrate-inline-policy-to-group"></a>

**penting**  
Jika Anda membuat kredensi SMTP SES sebelum 6 September 2024, kebijakan inline dan tag telah dilampirkan ke pengguna SMTP Anda. SES bergerak menjauh dari kebijakan inline dan mendorong Anda untuk melakukan hal yang sama sebagai rekomendasi keamanan.

Sebelum memigrasikan pengguna SMTP dari kebijakan sebaris yang ada ke kebijakan grup, Anda harus terlebih dahulu membuat grup pengguna IAM dengan kebijakan izin SES untuk menggantikan kebijakan sebaris. *Jika Anda telah membuat grup pengguna IAM ini, atau secara otomatis dibuat untuk kredensyal SMTP yang Anda buat mulai 6 September 2024 dan seterusnya, Anda dapat langsung melewati langkah 10 dalam prosedur berikut.*

**Untuk bermigrasi dari kebijakan sebaris yang ada ke grup terkelola**

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di bawah **Manajemen akses**, pilih **Kebijakan** diikuti dengan **Buat kebijakan**.

1. Di **editor Kebijakan**, pilih **JSON** dan hapus kode contoh apa pun di editor.

1. Tempelkan ke kebijakan izin berikut ke editor:

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Pilih **Berikutnya** dan masukkan `AmazonSesSendingAccess` di bidang **Nama kebijakan** diikuti oleh **Buat kebijakan**.

1. Di bawah **Manajemen akses**, pilih **Grup pengguna** diikuti oleh **Buat grup**.

1. Masukkan `AWSSESSendingGroupDoNotRename` di bidang **Nama grup pengguna**.

1. Tambahkan pengguna SMTP ke grup dengan memilihnya dari **Tambahkan pengguna ke tabel grup**.

1. Lampirkan `AmazonSesSendingAccess` kebijakan yang dibuat sebelumnya dengan memilihnya dari tabel **Lampirkan kebijakan izin** diikuti oleh **Buat grup pengguna**.

   Setelah Anda membuat grup pengguna IAM dengan kebijakan izin SES, Anda dapat memigrasikan pengguna SMTP dari kebijakan inline mereka saat ini ke kebijakan grup ini seperti yang dijelaskan dalam langkah-langkah yang tersisa.

1. Di bawah **Manajemen akses**, pilih **Pengguna** diikuti dengan memilih pengguna SMTP yang ingin Anda migrasikan.

1. Pilih tab **Grup** dan pilih **Tambahkan pengguna ke grup**.

1. Pilih `AWSSESSendingGroupDoNotRename` grup yang diikuti oleh **Tambahkan pengguna ke grup**.

1. Pilih tab **Izin** dan konfirmasikan bahwa ada dua baris `AmazonSesSendingAccess` yang terdaftar dengan kolom **Nama kebijakan**, satu dengan *Inline* dan satu dengan *Grup `AWSSESSendingGroupDoNotRename`* terdaftar di kolom **Terlampir via**.

1. Pilih hanya baris yang terdapat `AmazonSesSendingAccess` di kolom **Nama kebijakan** dan *Sebaris* di kolom **Terlampir melalui** diikuti dengan **Hapus** dan konfirmasi dengan **kebijakan Hapus**.

   Verifikasi baris dengan *Grup `AWSSESSendingGroupDoNotRename`* di kolom **Terlampir via** tetap.

1. Pilih tab **Tag** diikuti oleh **Kelola tag**.

1. Pilih **Hapus** di sebelah baris yang berisi *InvokedBy*di kolom **Kunci** dan *SESConsole*di kolom **Nilai** diikuti oleh **Simpan perubahan**.

**penting**  
`AmazonSesSendingAccess`Kebijakan (baik sebagai kebijakan inline atau grup atau keduanya) harus tetap melekat pada pengguna SMTP untuk memastikan pengiriman mereka tidak terpengaruh. Hanya hapus kebijakan inline setelah kebijakan grup dilampirkan ke pengguna Anda. 

# Menghubungkan ke titik akhir SMTP Amazon SES
<a name="smtp-connect"></a>

Untuk mengirim email menggunakan antarmuka SMTP Amazon SES, hubungkan ke titik akhir SMTP. Untuk daftar lengkap titik akhir SMTP Amazon SES, lihat titik akhir [dan kuota Amazon Simple Email Service](https://docs.aws.amazon.com/general/latest/gr/ses.html) di. *Referensi Umum AWS*

Titik akhir Amazon SES SMTP memerlukan semua koneksi dienkripsi menggunakan Keamanan Lapisan Pengangkutan (TLS). (Perhatikan bahwa TLS sering disebut dengan nama protokol pendahulunya, SSL.) Amazon SES mendukung dua mekanisme untuk membangun koneksi yang terenkripsi TLS: STARTTLS dan TLS Wrapper. Periksa dokumentasi perangkat lunak Anda untuk menentukan apakah STARTTLS, TLS Wrapper, atau keduanya didukung.

Amazon Elastic Compute Cloud (Amazon EC2) melakukan throttle lalu lintas email melalui port 25 secara default. Untuk menghindari batas waktu saat mengirim email melalui titik akhir SMTP dari EC2, kirimkan [Permintaan untuk Menghapus Batasan Pengiriman Email](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request)untuk menghapus throttle. Atau, Anda dapat mengirimkan email menggunakan port yang berbeda atau [VPC endpoint Amazon](send-email-set-up-vpc-endpoints.md).

Untuk masalah koneksi SMTP, lihat. [Masalah SMTP](troubleshoot-smtp.md)

## STARTTLS
<a name="smtp-connect-starttls"></a>

STARTTLS adalah sarana untuk meningkatkan koneksi yang tidak terenkripsi ke koneksi terenkripsi. Ada beberapa Versi STARTTLS untuk berbagai protokol; versi SMTP ditentunkan di [RFC 3207](https://www.ietf.org/rfc/rfc3207.txt).

Untuk menyiapkan koneksi STARTTLS, klien SMTP menghubungkan ke titik akhir SMTP Amazon SES di port 25, 587, atau 2587, mengeluarkan perintah EHLO, dan menunggu server untuk mengumumkan bahwa ekstensi SMTP STARTTLS didukung. Klien kemudian mengeluarkan perintah STARTTLS, memulai negosiasi TLS. Ketika negosiasi selesai, klien mengeluarkan perintah EHLO melalui koneksi terenkripsi baru, dan sesi SMTP berjalan normal.

## TLS Wrapper
<a name="smtp-connect-tlswrapper"></a>

TLS Wrapper (juga dikenal sebagai SMTPS atau Protokol Handshake) adalah sarana untuk memulai koneksi terenkripsi tanpa terlebih dahulu membuat koneksi tidak terenkripsi. Dengan TLS Wrapper, titik akhir SMTP Amazon SES tidak melakukan negosiasi TLS: ini adalah tanggung jawab klien untuk terhubung ke titik akhir menggunakan TLS, dan terus menggunakan TLS untuk seluruh percakapan. Wrapper TLS adalah protokol yang lebih tua, namun masih didukung oleh banyak klien.

Untuk menyiapkan koneksi TLS Wrapper, klien SMTP terhubung ke titik akhir SMTP Amazon SES di port 465 atau 2465. Server menyajikan sertifikatnya, klien mengeluarkan perintah EHLO, dan sesi SMTP berjalan normal.

# Mengirim email melalui Amazon SES menggunakan paket perangkat lunak
<a name="send-email-smtp-software-package"></a>

Sejumlah paket perangkat lunak komersial dan sumber terbuka ditemukan yang mendukung pengiriman email melalui SMTP. Berikut ini adalah beberapa contohnya:
+ Platform blog
+ Agregator RSS
+ Daftar perangkat lunak manajemen
+ Sistem alur kerja

Anda dapat mengonfigurasi perangkat lunak yang diaktifkan SMTP untuk mengirim email melalui antarmuka SMTP Amazon SES. Untuk petunjuk tentang cara mengonfigurasi SMTP untuk paket perangkat lunak tertentu, lihat dokumentasi untuk perangkat lunak tersebut.

Prosedur berikut menunjukkan cara menyiapkan pengiriman Amazon SES di JIRA, sebuah solusi pelacakan masalah yang populer. Dengan konfigurasi ini, JIRA dapat memberi tahu pengguna melalui email setiap kali ada perubahan status dari masalah perangkat lunak.

**Untuk Mengonfigurasi JIRA untuk Mengirim email Menggunakan Amazon SES**

1. Menggunakan peramban web Anda, masuk ke JIRA dengan kredensial administrator.

1. Di jendela peramban, pilih **Administrasi**.

1. Di menu **Sistem**, pilih **Surat**.

1. Di halaman **Administrasi surat**, pilih **Server Surat**.

1. Pilih **Konfigurasikan server surat SMTP baru**.

1. Di bagian **Tambahkan Server Surat SMTP**, isi bidang berikut:

   1. **Nama**—Nama deskriptif untuk server ini.

   1. **Alamat Dari**—Alamat asal email akan dikirim. Anda harus memverifikasi alamat email ini dengan Amazon SES sebelum Anda dapat mengirim dari alamat tersebut. Untuk informasi selengkapnya tentang verifikasi, lihat [Identitas terverifikasi di Amazon SES](verify-addresses-and-domains.md).

   1. **Awalan email**—String yang ditambahkan JIRA untuk setiap baris subjek sebelum pengiriman.

   1. **Protokol**—Pilih **SMTP**.
**catatan**  
Jika Anda tidak dapat terhubung ke Amazon SES menggunakan pengaturan ini, coba **SECURE\$1SMTP**.

   1. **Nama Host**—Lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md) untuk daftar titik akhir SMTP Amazon SES. Misalnya, jika Anda ingin menggunakan titik akhir Amazon SES di wilayah US West (Oregon), nama host akan menjadi *email-smtp.us-west-2.amazonaws.com*.

   1. **Port SMTP**—25, 587, atau 2587 (untuk menghubungkan menggunakan STARTTLS), atau 465 atau 2465 (untuk menghubungkan menggunakan TLS Wrapper).

   1. **TLS**—Pilih kotak centang ini.

   1. **Nama pengguna**—Nama pengguna SMTP Anda.

   1. **Kata Sandi**—Kata sandi SMTP Anda.

   Anda dapat melihat pengaturan untuk TLS Wrapper pada citra berikut.  
![\[Konfigurasi email SMTP untuk JIRA\]](http://docs.aws.amazon.com/id_id/ses/latest/dg/images/SMTP_jira.png)

1. Pilih **Uji Koneksi** . Jika email percobaan yang JIRA kirim melalui Amazon SES berhasil diterima, maka konfigurasi Anda selesai.

# Mengirim email melalui antarmuka Amazon SES SMTP secara terprogram
<a name="send-using-smtp-programmatically"></a>

Untuk mengirim email menggunakan antarmuka Amazon SES SMTP, Anda dapat menggunakan bahasa pemrograman yang diaktifkan SMTP, server email, atau aplikasi. Sebelum memulai, selesaikan tugas-tugas di [Menyiapkan Amazon Simple Email Service](setting-up.md). Anda juga harus mendapatkan informasi berikut: 
+ Kredensi SMTP Amazon SES Anda, yang memungkinkan Anda terhubung ke titik akhir SMTP Amazon SES. Untuk mendapatkan kredensyal SMTP Amazon SES Anda, lihat. [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md) 
**penting**  
Kredensyal SMTP Anda berbeda dari kredensyal Anda. AWS Untuk informasi selengkapnya tentang kredensial, lihat [Tipe kredensial Amazon SES](send-email-concepts-credentials.md).
+ Alamat titik akhir SMTP. Untuk daftar titik akhir SMTP Amazon SES, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).
+ Nomor port antarmuka SMTP Amazon SES, yang tergantung pada metode koneksi. Untuk informasi lebih lanjut, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).

## Contoh kode
<a name="send-email-smtp-code-examples"></a>

Anda dapat mengakses antarmuka SMTP Amazon SES dengan menggunakan bahasa pemrograman yang diaktifkan SMTP. Anda memberikan nama host dan nomor port bersama dengan kredensial SMTP Anda pada SMTP Amazon SES dan kemudian menggunakan fungsi SMTP generik bahasa pemrograman untuk mengirim email.

Amazon Elastic Compute Cloud (Amazon EC2) membatasi lalu lintas email melalui port 25 secara default. Untuk menghindari waktu habis saat mengirim email melalui titik akhir SMTP dari Amazon EC2, Anda dapat meminta pembatasan ini dihapus. Untuk informasi selengkapnya, lihat [Bagaimana cara menghapus pembatasan pada port 25 dari instans AWS Lambda atau fungsi Amazon EC2 saya](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? di pusat AWS pengetahuan.

Contoh kode di bagian ini untuk Java dan PHP menggunakan port 587 untuk menghindari masalah ini. 

**catatan**  
Dalam tutorial ini, Anda mengirim email ke diri Anda sendiri sehingga Anda dapat memeriksa apakah Anda sudah menerimanya. Untuk eksperimen atau pengujian beban lebih lanjut, gunakan simulator kotak surat Amazon SES. Email yang Anda kirim ke simulator kotak surat tidak dihitung terhadap kuota pengiriman atau kecepatan pentalan dan aduan Anda. Untuk informasi lebih lanjut, lihat [Menggunakan simulator kotak surat secara manual](send-an-email-from-console.md#send-email-simulator).

**Pilih bahasa pemrograman untuk melihat contoh bahasa tersebut:**

**Awas**  
Amazon SES tidak merekomendasikan penggunaan kredensil statis. Lihat [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)untuk mempelajari cara meningkatkan postur keamanan Anda dengan menghapus kredensi hard-code dari kode sumber Anda. Tutorial ini hanya disediakan untuk tujuan menguji antarmuka Amazon SES SMTP di lingkungan non-produksi.

------
#### [ Java ]

Contoh ini menggunakan [Eclipse IDE](http://www.eclipse.org/) dan [JavaMail API](https://github.com/javaee/javamail/releases) untuk mengirim email melalui Amazon SES menggunakan antarmuka SMTP.

Sebelum Anda melakukan prosedur berikut, selesaikan tugas di [Menyiapkan Amazon Simple Email Service](setting-up.md).

**Untuk mengirim email menggunakan antarmuka SMTP Amazon SES dengan Java**

1. Di browser web, buka [JavaMail GitHub halaman](https://github.com/javaee/javamail/releases). Di bawah **Assets**, pilih **javax.mail.jar** untuk mengunduh versi terbaru. JavaMail
**penting**  
Tutorial ini membutuhkan JavaMail versi 1.5 atau yang lebih baru. Prosedur ini diuji menggunakan JavaMail versi 1.6.1.

1. **Di web browser, buka [ GitHub halaman Aktivasi Jakarta](https://github.com/eclipse-ee4j/jaf/releases), dan di bawah JavaBeans Activation [Framework 1.2.1 Final Release](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1), unduh jakarta.activation.jar**

1. Buat proyek di Eclipse dengan melakukan langkah-langkah berikut:

   1. Mulai Eclipse.

   1. Di Eclipse, pilih **File**, pilih **Baru**, lalu pilih **Proyek Java**.

   1. Di kotak dialog **Buat Proyek Java**, ketik nama proyek lalu pilih **Selanjutnya.**

   1. Di kotak dialog **Pengaturan Java**, pilih tab **Pustaka**.

   1. ****Pilih **Classpath** dan tambahkan dua file jar eksternal **javax.mail.jar dan jakarta.activation.jar** menggunakan tombol Add External. JARs****

   1. Pilih **Tambahkan Eksternal JARs**.

   1. Jelajahi folder tempat Anda mengunduh JavaMail. Pilih file `javax.mail.jar`, lalu pilih **Buka**.

   1. Di kotak dialog **Pengaturan Java**, pilih **Selesai**.

1. Di Eclipse, di jendela **Paket Explorer**, perluas proyek Anda.

1. Di bawah proyek Anda, klik kanan direktori **src**, pilih **Baru**, lalu pilih **Kelas**.

1. Di kotak dialog **Kelas Java Baru**, di bidang **Nama**, ketik `AmazonSESSample` lalu pilih **Selesai**.

1. Ganti seluruh isi **Amazon SESSample .java** dengan kode berikut:

   ```
     1. import java.util.Properties;
     2. 
     3. import javax.mail.Message;
     4. import javax.mail.Session;
     5. import javax.mail.Transport;
     6. import javax.mail.internet.InternetAddress;
     7. import javax.mail.internet.MimeMessage;
     8. 
     9. public class AmazonSESSample {
    10. 
    11.     // Replace sender@example.com with your "From" address.
    12.     // This address must be verified.
    13.     static final String FROM = "sender@example.com";
    14.     static final String FROMNAME = "Sender Name";
    15.     
    16.     // Replace recipient@example.com with a "To" address. If your account 
    17.     // is still in the sandbox, this address must be verified.
    18.     static final String TO = "recipient@example.com";
    19.     
    20.     // Replace smtp_username with your Amazon SES SMTP user name.
    21.     static final String SMTP_USERNAME = "smtp_username";
    22.       
    23.     // The name of the Configuration Set to use for this message.
    24.     // If you comment out or remove this variable, you will also need to
    25.     // comment out or remove the header below.
    26.     static final String CONFIGSET = "ConfigSet";
    27.     
    28.     // Amazon SES SMTP host name. This example uses the US West (Oregon) region.
    29.     // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    30.     // for more information.
    31.     static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    32.     
    33.     // The port you will connect to on the Amazon SES SMTP endpoint. 
    34.     static final int PORT = 587;
    35.     
    36.     static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    37.     
    38.     static final String BODY = String.join(
    39.             System.getProperty("line.separator"),
    40.             "<h1>Amazon SES SMTP Email Test</h1>",
    41.             "<p>This email was sent with Amazon SES using the ", 
    42.             "<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
    43.             " for <a href='https://www.java.com'>Java</a>."
    44.         );
    45. 
    46.     public static void main(String[] args) throws Exception {
    47. 
    48.         // Create a Properties object to contain connection configuration information.
    49.         Properties props = System.getProperties();
    50.         props.put("mail.transport.protocol", "smtp");
    51.         props.put("mail.smtp.port", PORT); 
    52.         props.put("mail.smtp.starttls.enable", "true");
    53.         props.put("mail.smtp.auth", "true");
    54. 
    55.         // Create a Session object to represent a mail session with the specified properties. 
    56.         Session session = Session.getDefaultInstance(props);
    57. 
    58.         // Create a message with the specified information. 
    59.         MimeMessage msg = new MimeMessage(session);
    60.         msg.setFrom(new InternetAddress(FROM,FROMNAME));
    61.         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
    62.         msg.setSubject(SUBJECT);
    63.         msg.setContent(BODY,"text/html");
    64.         
    65.         // Add a configuration set header. Comment or delete the 
    66.         // next line if you are not using a configuration set
    67.         msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
    68.             
    69.         // Create a transport.
    70.         Transport transport = session.getTransport();
    71. 
    72.         // Get the password 
    73.         String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
    74.                     
    75.         // Send the message.
    76.         try
    77.         {
    78.             System.out.println("Sending...");
    79.             
    80.             // Connect to Amazon SES using the SMTP username and password you specified above.
    81.             transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
    82.             
    83.             // Send the email.
    84.             transport.sendMessage(msg, msg.getAllRecipients());
    85.             System.out.println("Email sent!");
    86.         }
    87.         catch (Exception ex) {
    88.             System.out.println("The email was not sent.");
    89.             System.out.println("Error message: " + ex.getMessage());
    90.         }
    91.         finally
    92.         {
    93.             // Close and terminate the connection.
    94.             transport.close();
    95.         }
    96.     }
    97. 
    98.     static String fetchSMTPPasswordFromSecureStorage() {
    99.         /* IMPLEMENT THIS METHOD */
   100.         // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   101.     }
   102. }
   ```

1. Di **SESSampleAmazon.java**, ganti alamat email berikut dengan nilai Anda sendiri:
**penting**  
Alamat email peka huruf besar kecil. Pastikan alamatnya sama persis dengan alamat yang Anda verifikasi.
   + *sender@example.com*— Ganti dengan alamat email “Dari” Anda. Alamat ini harus diverifikasi sebelum Anda menjalankan program ini. Untuk informasi selengkapnya, lihat [Identitas terverifikasi di Amazon SES](verify-addresses-and-domains.md).
   + *recipient@example.com*— Ganti dengan alamat email “Ke” Anda. Jika akun Anda masih berada di sandbox, Anda harus memverifikasi alamat ini sebelum menggunakannya. Untuk informasi selengkapnya, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md).

1. Di **SESSampleAmazon.java** ganti yang berikut ini dengan nilai Anda sendiri:
   + *smtp\$1username*— Ganti dengan kredensi nama pengguna SMTP Anda. Perhatikan bahwa kredensial nama pengguna SMTP Anda adalah string 20 karakter huruf dan angka, bukan nama yang dapat dimengerti.
   + *smtp\$1password*— Melaksanakan ``fetchSMTPPasswordFromSecureStorage`` untuk mengambil kata sandi.

1. (Opsional) Jika Anda ingin menggunakan titik akhir SMTP Amazon SES di Wilayah AWS selain*email-smtp.us-west-2.amazonaws.com*, ubah nilai variabel `HOST` ke titik akhir yang ingin Anda gunakan. Untuk daftar wilayah di mana Amazon SES tersedia, lihat [Layanan Email Sederhana Amazon (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

1. (Opsional) Jika Anda ingin menggunakan set konfigurasi saat mengirim email ini, ubah nilai variabel *ConfigSet* menjadi nama set konfigurasi. Untuk informasi selengkapnya tentang set konfigurasi, lihat [Mengelola set konfigurasi di Amazon SES](using-configuration-sets.md).

1. Simpan **Amazon SESSample .java**.

1. Untuk membangun proyek, pilih **Proyek** lalu pilih **Bangun Proyek**. (Jika opsi ini dinonaktifkan, maka Anda mungkin memiliki pembangunan otomatis yang diaktifkan.)

1. Untuk memulai program dan mengirim email, pilih **Jalankan** lalu pilih **Jalankan** lagi.

1. Tinjau output. Jika email berhasil dikirim, konsol menampilkan *“Email dikirim\$1”* Jika tidak, ini akan menampilkan pesan kesalahan.

1. Masuk ke klien email dari alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------
#### [ PHP  ]

Contoh ini menggunakan PHPMailer kelas untuk mengirim email melalui Amazon SES menggunakan antarmuka SMTP. 

Sebelum Anda melakukan prosedur berikut, selesaikan tugas di [Menyiapkan Amazon Simple Email Service](setting-up.md). Selain menyiapkan Amazon SES Anda harus menyelesaikan prasyarat berikut untuk mengirim email dengan PHP:

**Prasyarat:**
+ **Instal PHP** - PHP tersedia di [http://php.net/downloads.php](https://php.net/downloads.php). Setelah Anda memasang PHP, tambahkan jalur ke PHP di variabel lingkungan Anda, sehingga Anda dapat menjalankan PHP dari prompt perintah.
+ **Instal manajer ketergantungan Composer - Setelah Anda menginstal manajer** ketergantungan Composer, Anda dapat mengunduh dan menginstal PHPMailer kelas dan dependensinya. Untuk menginstal Composer, ikuti petunjuk instalasi di [https://getcomposer.org/download](https://getcomposer.org/download).
+ **Instal PHPMailer kelas** - Setelah Anda menginstal Composer, jalankan perintah berikut untuk menginstal PHPMailer: 

  ```
  path/to/composer require phpmailer/phpmailer
  ```

  Pada perintah sebelumnya, ganti *path/to/* dengan jalur tempat Anda menginstal Composer.

**Untuk mengirim email menggunakan antarmuka SMTP Amazon SES dengan PHP**

1. Buat file bernama **amazon-ses-smtp-sample.php**. Buka file dengan editor teks dan tempel di kode berikut:

   ```
    1. <?php
    2. 
    3. // Import PHPMailer classes into the global namespace
    4. // These must be at the top of your script, not inside a function
    5. use PHPMailer\PHPMailer\PHPMailer;
    6. use PHPMailer\PHPMailer\Exception;
    7. 
    8. // If necessary, modify the path in the require statement below to refer to the
    9. // location of your Composer autoload.php file.
   10. require 'vendor/autoload.php';
   11. 
   12. // Replace sender@example.com with your "From" address.
   13. // This address must be verified with Amazon SES.
   14. $sender = 'sender@example.com';
   15. $senderName = 'Sender Name';
   16. 
   17. // Replace recipient@example.com with a "To" address. If your account
   18. // is still in the sandbox, this address must be verified.
   19. $recipient = 'recipient@example.com';
   20. 
   21. // Replace smtp_username with your Amazon SES SMTP user name.
   22. $usernameSmtp = 'smtp_username';
   23. 
   24. // Specify a configuration set. If you do not want to use a configuration
   25. // set, comment or remove the next line.
   26. $configurationSet = 'ConfigSet';
   27. 
   28. // If you're using Amazon SES in a region other than US West (Oregon),
   29. // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
   30. // endpoint in the appropriate region.
   31. $host = 'email-smtp.us-west-2.amazonaws.com';
   32. $port = 587;
   33. 
   34. // The subject line of the email
   35. $subject = 'Amazon SES test (SMTP interface accessed using PHP)';
   36. 
   37. // The plain-text body of the email
   38. $bodyText =  "Email Test\r\nThis email was sent through the
   39.     Amazon SES SMTP interface using the PHPMailer class.";
   40. 
   41. // The HTML-formatted body of the email
   42. $bodyHtml = '<h1>Email Test</h1>
   43.     <p>This email was sent through the
   44.     <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
   45.     interface using the <a href="https://github.com/PHPMailer/PHPMailer">
   46.     PHPMailer</a> class.</p>';
   47. 
   48. $mail = new PHPMailer(true);
   49. 
   50. try {
   51.     // Specify the SMTP settings.
   52.     $mail->isSMTP();
   53.     $mail->setFrom($sender, $senderName);
   54.     $mail->Username   = $usernameSmtp;
   55.     $mail->Password   = fetchSMTPPasswordFromSecureStorage();
   56.     $mail->Host       = $host;
   57.     $mail->Port       = $port;
   58.     $mail->SMTPAuth   = true;
   59.     $mail->SMTPSecure = 'tls';
   60.     $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
   61. 
   62.     // Specify the message recipients.
   63.     $mail->addAddress($recipient);
   64.     // You can also add CC, BCC, and additional To recipients here.
   65. 
   66.     // Specify the content of the message.
   67.     $mail->isHTML(true);
   68.     $mail->Subject    = $subject;
   69.     $mail->Body       = $bodyHtml;
   70.     $mail->AltBody    = $bodyText;
   71.     $mail->Send();
   72.     echo "Email sent!" , PHP_EOL;
   73. } catch (phpmailerException $e) {
   74.     echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
   75. } catch (Exception $e) {
   76.     echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
   77. }
   78. function fetchSMTPPasswordFromSecureStorage() {
   79. /* IMPLEMENT THIS METHOD */
   80. // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   81. }
   82. 
   83. ?>
   ```

1. Di **amazon-ses-smtp-sample.php**, ganti yang berikut ini dengan nilai Anda sendiri:
   + *sender@example.com*— Ganti dengan alamat email yang telah Anda verifikasi dengan Amazon SES. Untuk informasi selengkapnya, lihat [Identitas terverifikasi](verify-addresses-and-domains.md). Alamat email di Amazon SES peka huruf besar kecil. Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + *recipient@example.com*— Ganti dengan alamat penerima. Jika akun Anda masih berada di sandbox, Anda harus memverifikasi alamat ini sebelum menggunakannya. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + *smtp\$1username*— Ganti dengan kredensi nama pengguna SMTP Anda, yang Anda peroleh dari halaman [Pengaturan SMTP konsol](https://console.aws.amazon.com/ses/home?#smtp-settings:) Amazon SES. Kredensial ini **tidak** sama dengan access key ID AWS Anda. Perhatikan bahwa kredensial nama pengguna SMTP Anda adalah string 20 karakter huruf dan angka, bukan nama yang dapat dimengerti.
   + *smtp\$1password*— Melaksanakan ``fetchSMTPPasswordFromSecureStorage`` untuk mengambil kata sandi.
   + (Opsional) *ConfigSet* - Jika Anda ingin menggunakan set konfigurasi saat mengirim email ini, ganti nilai ini dengan nama set konfigurasi. Untuk informasi selengkapnya tentang set konfigurasi, lihat [Mengelola set konfigurasi di Amazon SES](using-configuration-sets.md).
   + (Opsional) *email-smtp.us-west-2.amazonaws.com* - Jika Anda ingin menggunakan titik akhir SMTP Amazon SES di Wilayah selain AS Barat (Oregon), ganti ini dengan titik akhir SMTP Amazon SES di Wilayah yang ingin Anda gunakan. Untuk daftar titik akhir URLs SMTP di mana Amazon Wilayah AWS SES tersedia, lihat Amazon [Simple Email Service (Amazon SES) di](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region). *Referensi Umum AWS*

1. Simpan **amazon-ses-smtp-sample.php**.

1. Untuk menjalankan program, buka prompt perintah di direktori yang sama **amazon-ses-smtp-sampledengan.php**, lalu ketik**php amazon-ses-smtp-sample.php**.

1. Tinjau output. Jika email berhasil dikirim, konsol menampilkan *“Email dikirim\$1”* Jika tidak, ini akan menampilkan pesan kesalahan.

1. Masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------

# Mengintegrasikan Amazon SES dengan server email yang ada
<a name="send-email-smtp-existing-server"></a>

Jika saat ini Anda mengelola server email Anda sendiri, Anda dapat menggunakan titik akhir SMTP Amazon SES untuk mengirim semua email keluar Anda ke Amazon SES. Klien email dan aplikasi yang sudah ada tidak perlu diubah; perubahan pada Amazon SES akan terlihat.

Beberapa agen transfer surat (MTAs) mendukung pengiriman email melalui relay SMTP. Bagian ini memberikan panduan umum tentang cara mengkonfigurasi beberapa populer MTAs untuk mengirim email menggunakan antarmuka Amazon SES SMTP.

Titik akhir SMTP Amazon SES mengharuskan semua koneksi untuk dienkripsi menggunakan Keamanan Lapisan Pengangkutan (TLS).

**Topics**
+ [Mengintegrasikan Amazon SES dengan Postfix](postfix.md)
+ [Mengintegrasikan Amazon SES dengan Sendmail](send-email-sendmail.md)
+ [Mengintegrasikan Amazon SES dengan Microsoft Windows Server IIS SMTP](send-email-windows-server.md)

# Mengintegrasikan Amazon SES dengan Postfix
<a name="postfix"></a>

Postfix adalah pilihan lain untuk Agen Transfer Pesan Sendmail (MTA) yang digunakan secara luas. Untuk informasi tentang Postfix, buka [http://www.postfix.org](http://www.postfix.org). Prosedur di topik ini akan berfungsi dengan Linux, macOS, atau Unix.

**catatan**  
Postfix adalah aplikasi pihak ke tiga, dan tidak dikembangkan atau didukung oleh Amazon Web Services. Prosedur di bagian ini disediakan hanya untuk tujuan informasi saja, dan dapat berubah tanpa pemberitahuan.

## Prasyarat
<a name="send-email-postfix-prereqs"></a>

Sebelum Anda menyelesaikan prosedur dalam bagian ini, Anda harus melakukan tugas berikut:
+ Copot pemasangan aplikasi Sendmail jika diinstal pada sistem Anda. Prosedur untuk menyelesaikan langkah ini bervariasi tergantung pada sistem operasi yang Anda gunakan.
**penting**  
Berikut referensi ke *sendmail* mengacu pada perintah Postfix`sendmail`, jangan bingung dengan aplikasi Sendmail.
+ Instal Postfix. Prosedur untuk menyelesaikan langkah ini bervariasi tergantung pada sistem operasi yang Anda gunakan.
+ Instal paket autentikasi SASL. Prosedur untuk menyelesaikan langkah ini bervariasi tergantung pada sistem operasi yang Anda gunakan. Misalnya, jika Anda menggunakan sistem RedHat berbasis, Anda harus menginstal `cyrus-sasl-plain` paket. Jika Anda menggunakan sistem berbasis Debian atau Ubuntu, Anda harus menginstal paket `libsasl2-modules`.
+ Verifikasi alamat email atau domain yang akan digunakan untuk mengirim email. Untuk informasi lebih lanjut, lihat [Membuat identitas alamat email](creating-identities.md#verify-email-addresses-procedure).
+ Jika akun Anda masih berada di sandbox, Anda hanya dapat mengirim email ke alamat email terverifikasi. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md).

## Mengonfigurasi Postfix
<a name="send-email-postfix"></a>

Selesaikan prosedur berikut untuk mengonfigurasi server surat Anda untuk mengirim email melalui Amazon SES menggunakan Postfix.

**Untuk mengonfigurasi Postfix**

1. Di baris perintah, ketik perintah berikut:

   ```
   sudo postconf -e "relayhost = [email-smtp.us-west-2.amazonaws.com]:587" \
   "smtp_sasl_auth_enable = yes" \
   "smtp_sasl_security_options = noanonymous" \
   "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
   "smtp_use_tls = yes" \
   "smtp_tls_security_level = secure" \
   "smtp_tls_note_starttls_offer = yes"
   ```
**catatan**  
Jika Anda menggunakan Amazon SES di AWS Wilayah selain AS Barat (Oregon), ganti *email-smtp.us-west-2.amazonaws.com* perintah sebelumnya dengan titik akhir SMTP Wilayah yang sesuai. Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

1. Di editor teks, buka file `/etc/postfix/master.cf`. Cari entri berikut:

   ```
   -o smtp_fallback_relay=
   ```

   Jika Anda menemukan entri ini, berikan komentar dengan menempatkan karakter `#` (hash) di awal baris. Simpan dan tutup file .

   Atau, jika entri ini tidak ada, lanjutkan ke langkah berikutnya.

1. Di editor teks, buka file `/etc/postfix/sasl_passwd`. Jika dile tersebut belum ada, buat file tersebut.

1. Tambahkan baris berikut ke `/etc/postfix/sasl_passwd`:

   ```
   [email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
   ```
**catatan**  
Ganti *SMTPUSERNAME* dan *SMTPPASSWORD* dengan kredensyal masuk SMTP Anda. Kredensi masuk SMTP Anda tidak sama dengan ID kunci AWS akses dan kunci akses rahasia Anda. Untuk informasi selengkapnya tentang jenis kredensial, lihat [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md).  
Jika Anda menggunakan Amazon SES di AWS Wilayah selain AS Barat (Oregon), ganti *email-smtp.us-west-2.amazonaws.com* contoh sebelumnya dengan titik akhir SMTP Wilayah yang sesuai. Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

   Simpan dan tutup `sasl_passwd`.

1. Pada prompt perintah, ketik perintah berikut untuk membuat file basis data hashmap yang berisi kredensial SMTP Anda:

   ```
   sudo postmap hash:/etc/postfix/sasl_passwd
   ```

1. (Opsional) File `/etc/postfix/sasl_passwd` dan `/etc/postfix/sasl_passwd.db` yang Anda buat di langkah-langkah sebelumnya tidak dienkripsi. Karena file-file ini berisi kredensial SMTP Anda, kami sarankan Anda mengubah kepemilikan file dan izin untuk membatasi akses ke file tersebut. Untuk membatasi akses ke file-file ini:

   1. Pada prompt perintah, ketik perintah berikut untuk mengubah kepemilikan file:

      ```
      sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

   1. Pada prompt perintah, ketik perintah berikut untuk mengubah hak izin file sehingga hanya pengguna root saja yang dapat membaca atau menulis pada file tersebut:

      ```
      sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

1. Beritahu Postfix tempat untuk menemukan sertifikat CA (diperlukan untuk memverifikasi sertifikat server Amazon SES). Perintah yang Anda gunakan dalam langkah ini bervariasi berdasarkan sistem operasi Anda.
   + Jika Anda menggunakan Amazon Linux, Red Hat Enterprise Linux, atau distribusi terkait, ketik perintah berikut: 

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```
   + Jika Anda menggunakan Ubuntu atau distribusi terkait, ketik perintah berikut:

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
     ```
   + Jika Anda menggunakan macOS, Anda dapat membuat sertifikat dari rantai kunci sistem. Untuk menghasilkan sertifikat, ketik perintah berikut pada baris perintah:

     ```
     sudo security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /etc/ssl/certs/ca-bundle.crt > /dev/null
     ```

     Setelah Anda membuat sertifikat, ketik perintah berikut:

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```

1. Ketik perintah berikut untuk memulai server Postfix (atau untuk memuat ulang pengaturan konfigurasi jika server sudah berjalan):

   ```
   sudo postfix start; sudo postfix reload
   ```

1. Kirim email percobaan dengan mengetik berikut pada baris perintah, tekan Enter setelah setiap baris. Ganti *sender@example.com* dengan alamat email Dari Anda. Alamat Pengirim harus diverifikasi untuk digunakan dengan Amazon SES. Ganti *recipient@example.com* dengan alamat tujuan. Jika akun Anda masih berada di sandbox, alamat penerima juga harus diverifikasi. Akhirnya, baris akhir pesan harus berisi periode tunggal (.) tanpa konten lain.

   ```
   sendmail -f sender@example.com recipient@example.com
   From: Sender Name <sender@example.com>
   Subject: Amazon SES Test                
   This message was sent using Amazon SES.                
   .
   ```

1. Periksa kotak pesan yang terkait dengan alamat penerima. Jika email tidak diterima, periksa folder email sampah Anda. Jika Anda masih tidak dapat menemukan email, periksa catatan surat di sistem yang digunakan untuk mengirim email (biasanya terletak di `/var/log/maillog`) untuk informasi selengkapnya.

## Contoh penggunaan lanjutan
<a name="send-email-postfix-advanced"></a>

Contoh ini menunjukkan cara mengirim email yang menggunakan [set konfigurasi](using-configuration-sets.md), dan yang menggunakan pengodean MIME-multipart untuk mengirim teks biasa dan versi HTML pesan, bersama dengan lampiran. Informasi ini juga mencakup [tanda tautan](faqs-metrics.md#sending-metric-faqs-clicks-q5), yang dapat digunakan untuk mengategorikan peristiwa klik. Isi email ditentukan di file eksternal, sehingga Anda tidak harus secara manual mengetik perintah di sesi Postfix.

**Untuk mengirim email beberapa bagian MIME menggunakan Postfix**

1. Di editor teks, buat file baru bernama `mime-email.txt`.

1. Di file teks, tempelkan konten berikut, ganti nilai merah dengan nilai yang sesuai untuk akun Anda:

   ```
   X-SES-CONFIGURATION-SET: ConfigSet
   From:Sender Name <sender@example.com>
   Subject:Amazon SES Test
   MIME-Version: 1.0
   Content-Type: multipart/mixed; boundary="YWVhZDFlY2QzMGQ2N2U0YTZmODU"
   
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: multipart/alternative; boundary="3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ"
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/plain; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   Amazon SES Test
   
   This message was sent from Amazon SES using the SMTP interface.
   
   For more information, see:
   http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/html; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   <html>
     <head>
   </head>
     <body>
       <h1>Amazon SES Test</h1>
         <p>This message was sent from Amazon SES using the SMTP interface.</p>
         <p>For more information, see
         <a ses:tags="samplekey0:samplevalue0;samplekey1:samplevalue1;" 
         href="http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html">
         Using the Amazon SES SMTP Interface to Send Email</a> in the <em>Amazon SES
         Developer Guide</em>.</p>
     </body>
   </html>
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ--
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: application/octet-stream
   MIME-Version: 1.0
   Content-Transfer-Encoding: base64
   Content-Disposition: attachment; filename="customers.txt"
   
   SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENh
   bmFkYQo5MjM4OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixV
   bml0ZWQgU3RhdGVzCjI4OTMsQW5heWEsSXllbmdhcixJbmRpYQ==
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU--
   ```

   Simpan dan tutup file.

1. Di baris perintah, ketik perintah berikut. Ganti *sender@example.com* dengan alamat email Anda, dan ganti *recipient@example.com* dengan alamat email penerima.

   ```
   sendmail -f sender@example.com recipient@example.com < mime-email.txt
   ```

   Jika perintah berhasil berjalan, perintah keluar tanpa memberikan output apa pun.

1. Periksa email di kotak masuk Anda. Jika pesan tidak terkirim, periksa log surat sistem Anda.

# Mengintegrasikan Amazon SES dengan Sendmail
<a name="send-email-sendmail"></a>

Sendmail dirilis pada awal 1980-an, dan telah terus ditingkatkan sejak saat itu. Ini adalah agen transfer pesan (MTA) yang fleksibel dan dapat dikonfigurasi dengan komunitas pengguna yang besar. Sendmail diakuisisi oleh Proofpoint pada tahun 2013, namun Proofpoint terus menawarkan versi sumber terbuka Sendmail. Anda dapat mengunduh [versi sumber terbuka Sendmail](https://www.proofpoint.com/us/open-source-email-solution) dari situs web Proofpoint, atau melalui manajer paket dari sebagian besar distribusi Linux.

Prosedur di bagian ini menunjukkan cara mengonfigurasi Sendmail untuk mengirim email melalui Amazon SES. Prosedur ini diuji pada server yang menjalankan Ubuntu 18.04.2 LTS.

**catatan**  
Sendmail adalah aplikasi pihak ke tiga, dan tidak dikembangkan atau didukung oleh Amazon Web Services. Prosedur di bagian ini disediakan hanya untuk tujuan informasi saja, dan dapat berubah tanpa pemberitahuan.

## Prasyarat
<a name="send-email-sendmail-prerequisites"></a>

Sebelum menyelesaikan prosedur di bagian ini, Anda harus menyelesaikan langkah-langkah berikut:
+ Instal paket Sendmail di server Anda. 
**catatan**  
Tergantung pada distribusi sistem operasi yang Anda gunakan, Anda mungkin juga perlu menginstal paket berikut: `sendmail-cf`, `m4`, dan `cyrus-sasl-plain`.
+ Verifikasi identitas untuk digunakan sebagai alamat Dari Anda. Untuk informasi lebih lanjut, lihat [Membuat identitas alamat email](creating-identities.md#verify-email-addresses-procedure).

  Jika akun Anda berada di sandbox Amazon SES, Anda juga harus memverifikasi alamat tujuan pengiriman email. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md).

Jika Anda menggunakan Amazon SES untuk mengirim email dari instans Amazon EC2, Anda juga harus menyelesaikan langkah-langkah berikut:
+ Anda mungkin perlu menetapkan Alamat IP Elastis untuk instans Amazon EC2 Anda agar menerima penyedia email untuk menerima email Anda. Untuk informasi selengkapnya, lihat [Alamat IP Elastis Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) di Panduan Pengguna *Amazon EC2*.
+ Amazon Elastic Compute Cloud (Amazon EC2) membatasi lalu lintas email melalui port 25 secara default. Untuk menghindari waktu habis saat mengirim email melalui titik akhir SMTP dari Amazon EC2, Anda dapat meminta pembatasan ini dihapus. Untuk informasi selengkapnya, lihat [Bagaimana cara menghapus pembatasan pada port 25 dari instans AWS Lambda atau fungsi Amazon EC2 saya](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? di pusat AWS pengetahuan.

  Atau, Anda dapat mengubah prosedur di bagian ini untuk menggunakan port 587 bukan port 25.

## Mengonfigurasi Sendmail
<a name="send-email-sendmail-procedure"></a>

Selesaikan langkah-langkah di bagian ini untuk mengonfigurasi Sendmail untuk mengirim email menggunakan Amazon SES.

**penting**  
Prosedur di bagian ini mengasumsikan bahwa Anda ingin menggunakan Amazon SES di AS Barat (Oregon). Wilayah AWS Jika Anda ingin menggunakan Wilayah yang berbeda, ganti semua instans *email-smtp.us-west-2.amazonaws.com* di prosedur ini dengan titik akhir SMTP dari wilayah yang diinginkan. Untuk daftar titik akhir URLs SMTP di mana Amazon Wilayah AWS SES tersedia, lihat Amazon [Simple Email Service (Amazon SES) di](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region). *Referensi Umum AWS*

**Untuk mengonfigurasi Sendmail**

1. Di editor file, buka file `/etc/mail/authinfo`. Jika file tidak ditemukan, buatlah.

   Tambahkan baris berikut ke*/etc/mail/authinfo*:

   ```
   AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"
   ```

   Pada contoh sebelumnya, lakukan perubahan berikut:
   + Ganti *email-smtp.us-west-2.amazonaws.com* dengan endpoint Amazon SES SMTP yang ingin Anda gunakan.
   + Ganti *smtpUsername* dengan nama pengguna Amazon SES SMTP Anda.
   + Ganti *smtpPassword* dengan kata sandi SMTP Amazon SES Anda.
**catatan**  
Kredensi masuk SMTP Anda berbeda dari ID Kunci AWS Akses dan Kunci Akses Rahasia Anda. Untuk informasi selengkapnya tentang mendapatkan kredenal masuk SMTP Anda, lihat. [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md)

   Setelah selesai, simpan `authinfo`.

1. Di baris perintah, masukkan perintah berikut untuk menghasilkan file `/etc/mail/authinfo.db`:

   ```
   sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
   ```

1. Di baris perintah, ketik perintah berikut untuk menambahkan dukungan untuk menyampaikan ke titik akhir Amazon SES SMTP.

   ```
   sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'
   ```

   Pada perintah sebelumnya, ganti *email-smtp.us-west-2.amazonaws.com* dengan alamat titik akhir SMTP Amazon SES yang ingin Anda gunakan.

1. Pada baris perintah, ketik perintah berikut untuk meregenerasi*/etc/mail/access.db*:

   ```
   sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
   ```

1. Di baris perintah, ketik perintah berikut untuk membuat backup file `sendmail.cf` dan `sendmail.mc`:

   ```
   sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
   ```

1. Tambahkan baris berikut ke file*/etc/mail/sendmail.mc* sebelum definisi apa pun`MAILER()`.

   ```
   define(`SMART_HOST', `email-smtp.us-west-2.amazonaws.com')dnl
   define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl
   define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
   FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl
   MASQUERADE_AS(`example.com')dnl
   FEATURE(masquerade_envelope)dnl
   FEATURE(masquerade_entire_domain)dnl
   ```

   Di teks sebelumnya, lakukan hal berikut:
   + Ganti *email-smtp.us-west-2.amazonaws.com* dengan endpoint Amazon SES SMTP yang ingin Anda gunakan.
   + Ganti *example.com* dengan domain yang ingin Anda gunakan untuk mengirim email.

   Setelah selesai, simpan file.
**catatan**  
Amazon EC2 membatasi komunikasi melalui port 25 secara default. Jika Anda menggunakan Sendmail di instans Amazon EC2, Anda harus menyelesaikan [Permintaan untuk Menghapus Batas Pengiriman Email](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request).

1. Di baris perintah, ketik perintah berikut untuk membuat *sendmail.cf* yang dapat ditulis:

   ```
   sudo chmod 666 /etc/mail/sendmail.cf
   ```

1. Di baris perintah, ketik perintah berikut untuk menghasilkan kembali *sendmail.cf*:

   ```
   sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
   ```
**catatan**  
Jika Anda mengalami kesalahan seperti "Perintah tidak ditemukan" dan "Tidak ada file atau direktori tersebut," pastikan bahwa paket `m4` dan `sendmail-cf` terinstal di sistem Anda.

1. Di baris perintah, ketik perintah berikut untuk mengatur ulang izin *sendmail.cf* menjadi hanya baca:

   ```
   sudo chmod 644 /etc/mail/sendmail.cf
   ```

1. Di baris perintah, ketik perintah berikut untuk memulai kembali Sendmail:

   ```
   sudo /etc/init.d/sendmail restart
   ```

   *Bergantung pada versi Linux atau Sendmail, jika hal di atas tidak berfungsi, coba yang berikut ini:*

   ```
   sudo su service sendmail restart
   ```

1. Selesaikan langkah-langkah berikut untuk mengirim email percobaan:

   1. Di baris perintah, masukkan perintah berikut.

      ```
      /usr/sbin/sendmail -vf sender@example.com recipient@example.com
      ```

      Ganti *sender@example.com* dengan alamat email Dari Anda. Ganti *recipient@example.com* dengan alamat To. Setelah selesai, tekan Enter.

   1. Masukkan konten pesan berikut. Tekan Enter di akhir setiap baris.

      ```
      From: sender@example.com
      To: recipient@example.com
      Subject: Amazon SES test email
      
      This is a test message sent from Amazon SES using Sendmail.
      ```

      Setelah selesai memasukkan konten email, tekan Ctrl\$1D untuk mengirimkannya.

1. Periksa email di klien email penerima. Jika Anda tidak dapat menemukan email, periksa folder surat sampah. Jika Anda masih tidak dapat menemukan email tersebut, periksa log Sendmail di server surat Anda. Log sering terletak di*/var/log/mail.log* atau*/var/log/maillog*. 

# Mengintegrasikan Amazon SES dengan Microsoft Windows Server IIS SMTP
<a name="send-email-windows-server"></a>

Anda dapat mengonfigurasi server SMTP Microsoft Windows Server IIS untuk mengirim email melalui Amazon SES. Instruksi ini ditulis menggunakan Microsoft Windows Server 2022 pada instans Amazon EC2. Anda dapat menggunakan konfigurasi yang sama di Microsoft Windows Server 2016.

**catatan**  
Windows Server adalah aplikasi pihak ke tiga, dan tidak dikembangkan atau didukung oleh Amazon Web Services. Prosedur di bagian ini disediakan hanya untuk tujuan informasi saja, dan dapat berubah tanpa pemberitahuan.

**Untuk mengintegrasikan server SMTP Microsoft Windows Server IIS dengan Amazon SES**

1. Pertama, atur Microsoft Windows Server 2022 menggunakan instruksi berikut.

   1. Dari [konsol manajemen Amazon EC2](https://console.aws.amazon.com/ec2/home), luncurkan instans Amazon EC2 Basis Microsoft Windows Server 2022 baru.

   1. Hubungkan ke instans dan masuk menggunakan Remote Desktop dengan mengikuti petunjuk di [Memulai dengan Instans Windows Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2Win_GetStarted.html).

   1. Luncurkan Dasbor Pengelola Server.

   1. Instal peran **Server Web**. Pastikan untuk menyertakan **alat Kompatibilitas Manajemen IIS 10** (opsi di bawah kotak centang **Server Web**).

   1. Instal fitur **Server SMTP**.

1. Selanjutnya, konfigurasikan layanan SMTP IIS menggunakan petunjuk berikut.

   1.  Mengembalikan ke Dasbor Pengelola Server.

   1. Dari menu **Tools**, pilih **Internet Information Services (IIS) 10.0 Manager**.

   1. Klik kanan **Server Virtual SMTP \$11** lalu pilih **Properti**.

   1. Di tab **Akses**, di bawah **Pembatasan Relay**, pilih **Relay**.

   1. Di kotak dialog **Pembatasan Relay**, pilih **Tambahkan**.

   1. Di bawah **Komputer Tunggal**, masukkan **127.0.0.1** sebagai alamat IP. Sekarang Anda telah diberi akses ke server ini untuk relay email ke Amazon SES melalui layanan SMTP IIS.

      Di prosedur ini, kita beranggapan bahwa email Anda dihasilkan di server ini. Jika aplikasi yang menghasilkan email berjalan di server terpisah, Anda perlu memberikan akses relay untuk server tersebut di SMTP IIS.
**catatan**  
Untuk memperpanjang relay SMTP ke subnet privat, untuk **Pembatasan Relay**, gunakan **Komputer Tunggal** 127.0.0.1 dan **Grup Komputer** 172.1.1.0 - 255.255.255.0 (di bagian netmask). Untuk **Koneksi**, gunakan **Komputer Tunggal** 127.0.0.1 dan **Grup Komputer** 172.1.1.0 - 255.255.255.0 (di bagian netmask).

1. Terakhir, konfigurasikan server untuk mengirim email melalui Amazon SES menggunakan petunjuk berikut.

   1. Kembali ke kotak dialog **Properti Server Virtual SMTP \$11** lalu pilih tab **Penyampaian**.

   1. Di tab **Penyampaian**, pilih **Keamanan Outbound**.

   1. Pilih **Otentikasi Dasar**, lalu masukkan kredenal SMTP Amazon SES Anda. Anda dapat memperoleh kredensial ini dari konsol Amazon SES menggunakan prosedur di [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md).
**penting**  
Kredensi SMTP Anda tidak sama dengan ID kunci AWS akses dan kunci akses rahasia Anda. Jangan mencoba menggunakan AWS kredensil Anda untuk mengautentikasi diri Anda terhadap titik akhir SMTP. Untuk informasi selengkapnya tentang kredensial, lihat [Tipe kredensial Amazon SES](send-email-concepts-credentials.md).

   1. Pastikan bahwa **Enkripsi TLS** dipilih.

   1. Kembali ke tab **Penyampaian**.

   1. Pilih **Koneksi Outbound**.

   1. Di kotak dialog **Koneksi Outbound**, pastikan bahwa port adalah 25 atau 587. 

   1. Pilih **Lanjutan**.

   1. Untuk nama **Host pintar**, masukkan titik akhir Amazon SES yang akan Anda gunakan (misalnya, *email-smtp.us-west-2.amazonaws.com*). Untuk daftar titik akhir URLs Wilayah AWS tempat Amazon SES tersedia, lihat [Amazon Simple Email Service (Amazon SES](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)) di. *Referensi Umum AWS*

   1.  Mengembalikan ke Dasbor Pengelola Server.

   1. Di Dasbor Manager Server, klik kanan **Server Virtual SMTP \$11** lalu mulai ulang layanan untuk mengambil konfigurasi baru.

   1. Kirim email melalui server ini. Anda dapat memeriksa header pesan untuk mengonfirmasi bahwa pengiriman dilakukan melalui Amazon SES.

# Menguji koneksi Anda ke antarmuka SMTP Amazon SES menggunakan baris perintah
<a name="send-email-smtp-client-command-line"></a>

Anda dapat menggunakan metode yang dijelaskan di bagian ini dari baris perintah untuk menguji koneksi Anda ke titik akhir SMTP Amazon SES, memvalidasi kredensial SMTP, dan memecahkan masalah koneksi. Prosedur ini menggunakan alat dan pustaka yang termasuk dengan sistem operasi yang paling umum.

Untuk informasi tambahan tentang pemecahan masalah koneksi SMTP, lihat [Masalah SMTP Amazon SES](troubleshoot-smtp.md).

## Prasyarat
<a name="send-email-smtp-client-command-line-prereqs"></a>

Ketika Anda terhubung ke antarmuka SMTP Amazon SES, Anda harus menyediakan satu set kredensial SMTP. Kredensyal SMTP ini berbeda dari kredensyal standar Anda. AWS Dua tipe kredensial tidak dapat dipertukarkan. Untuk informasi selengkapnya tentang mendapatkan kredensial SMTP Anda, lihat [Mendapatkan kredensial SMTP Amazon SES](smtp-credentials.md).

## Menguji koneksi Anda ke antarmuka SMTP Amazon SES
<a name="send-email-smtp-client-command-line-testing"></a>

Anda dapat menggunakan baris perintah untuk menguji koneksi Anda ke antarmuka SMTP Amazon SES tanpa mengautentikasi atau mengirim pesan apa pun. Prosedur ini berguna untuk memecahkan masalah konektivitas dasar. Jika koneksi pengujian Anda gagal, lihat[Masalah SMTP](troubleshoot-smtp.md).

Bagian ini mencakup prosedur untuk menguji koneksi Anda menggunakan OpenSSL (yang disertakan dengan sebagian besar distribusi Linux, macOS, dan Unix, dan juga tersedia untuk Windows) dan `Test-NetConnection` cmdlet PowerShell di (yang disertakan dengan versi Windows terbaru).

------
#### [ Linux, macOS, or Unix ]

Ada dua cara untuk terhubung ke antarmuka SMTP Amazon SES dengan OpenSSL: menggunakan SSL eksplisit melalui port 587, atau menggunakan SSL implisit melalui port 465.

**Untuk terhubung ke antarmuka SMTP menggunakan SSL eksplisit**
+ Di baris perintah, masukkan perintah berikut untuk menghubungkan ke server SMTP Amazon SES:

  ```
  openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
  ```

  Pada perintah sebelumnya, ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk Wilayah Anda. AWS Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

  Jika koneksi berhasil, Anda akan menemukan output yang serupa dengan berikut ini:

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  250 Ok
  ```

  Koneksi secara otomatis ditutup setelah tidak aktif selama sekitar 10 detik.

Atau, Anda dapat menggunakan SSL implisit untuk terhubung ke antarmuka SMTP melalui port 465.

**Untuk terhubung ke antarmuka SMTP menggunakan SSL implisit**
+ Di baris perintah, masukkan perintah berikut untuk menghubungkan ke server SMTP Amazon SES:

  ```
  openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
  ```

  Pada perintah sebelumnya, ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk Wilayah Anda. AWS Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

  Jika koneksi berhasil, Anda akan menemukan output yang serupa dengan berikut ini:

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-VCSHDP1YZ A1b2C3d4E5f6G7h8I9j0
  ```

  Koneksi secara otomatis ditutup setelah tidak aktif selama sekitar 10 detik.

------
#### [ PowerShell ]

Anda dapat menggunakan [Test- NetConnection](https://docs.microsoft.com/en-us/powershell/module/nettcpip/test-netconnection) cmdlet in PowerShell untuk terhubung ke server SMTP Amazon SES.

**catatan**  
Cmdlet `Test-NetConnection` dapat menentukan apakah komputer Anda dapat terhubung ke titik akhir SMTP Amazon SES. Namun, ini tidak menguji apakah komputer Anda dapat membuat koneksi SSL implisit atau eksplisit ke titik akhir SMTP. Untuk menguji koneksi SSL, Anda dapat menginstal OpenSSL untuk Windows untuk mengirim email pengujian.

**Untuk terhubung ke antarmuka SMTP menggunakan cmdlet `Test-NetConnection`**
+ Masuk PowerShell, masukkan perintah berikut untuk terhubung ke server SMTP Amazon SES:

  ```
  Test-NetConnection -Port 587 -ComputerName email-smtp.us-west-2.amazonaws.com
  ```

  Pada perintah sebelumnya, ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk AWS Wilayah Anda, dan ganti *587* dengan nomor port. Untuk informasi selengkapnya tentang titik akhir wilayah di Amazon SES, lihat [Wilayah dan Amazon SES](regions.md).

  Jika koneksi berhasil, Anda akan menemukan output yang serupa dengan contoh berikut:

  ```
  ComputerName     : email-smtp.us-west-2.amazonaws.com
  RemoteAddress    : 198.51.100.126
  RemotePort       : 587
  InterfaceAlias   : Ethernet
  SourceAddress    : 203.0.113.46
  TcpTestSucceeded : True
  ```

------

## Menggunakan baris perintah untuk mengirim email menggunakan antarmuka SMTP Amazon SES
<a name="send-email-using-openssl"></a>

Anda juga dapat menggunakan baris perintah untuk mengirim pesan menggunakan antarmuka SMTP Amazon SES. Prosedur ini berguna untuk menguji kredensial SMTP dan untuk menguji kemampuan penerima tertentu untuk menerima pesan yang Anda kirim dengan menggunakan Amazon SES.

------
#### [ Linux, macOS, or Unix ]

Saat pengirim email terhubung ke server SMTP, klien mengeluarkan set permintaan standar, dan server membalas setiap permintaan dengan respons standar. Serangkaian permintaan dan respons ini disebut *Percakapan SMTP*. Ketika Anda terhubung ke server SMTP Amazon SES menggunakan OpenSSL, server mengharapkan percakapan SMTP terjadi.

Ketika Anda menggunakan OpenSSL untuk terhubung ke antarmuka SMTP, Anda harus mengodekan kredensial SMTP Anda menggunakan pengodean base64. Bagian ini mencakup prosedur untuk pengodean kredensial Anda menggunakan base64.

**Untuk mengirim email dari baris perintah menggunakan antarmuka SMTP**

1. Masukkan yang berikut ini di baris perintah dan ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk Anda. Wilayah AWS Untuk informasi lebih lanjut, lihat[Wilayah dan Amazon SES](regions.md). :

   ```
    1. #!/bin/bash
    2. 
    3. # Prompt user to provide following information
    4. read -p "Configuration set: " CONFIGSET
    5. read -p "Enter SMTP username: " SMTPUsername
    6. read -p "Enter SMTP password: " SMTPPassword
    7. read -p "Sender email address: " MAILFROM
    8. read -p "Receiver email address: " RCPT
    9. read -p "Email subject: " SUBJECT
   10. read -p "Message to send: " DATA
   11. 
   12. echo
   13. 
   14. # Encode SMTP username and password using base64
   15. EncodedSMTPUsername=$(echo -n "$SMTPUsername" | openssl enc -base64)
   16. EncodedSMTPPassword=$(echo -n "$SMTPPassword" | openssl enc -base64)
   17. 
   18. # Construct the email
   19. Email="EHLO example.com
   20. AUTH LOGIN
   21. $EncodedSMTPUsername
   22. $EncodedSMTPPassword
   23. MAIL FROM: $MAILFROM
   24. RCPT TO: $RCPT
   25. DATA
   26. X-SES-CONFIGURATION-SET: $CONFIGSET
   27. From: $MAILFROM
   28. To: $RCPT
   29. Subject: $SUBJECT
   30. 
   31. $DATA
   32. .
   33. QUIT"
   34. 
   35. echo "$Email" | openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
   ```

1. Pada prompt untuk setiap variabel, masukkan nilai Anda.

1. 
   + Untuk mengirim menggunakan SSL implisit melalui port 465, gunakan:

     ```
     openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
     ```

   Jika pesan diterima oleh Amazon SES, Anda akan menemukan output yang menyerupai contoh berikut:

   ```
   250 Ok 01010160d7de98d8-21e57d9a-JZho-416c-bbe1-8ebaAexample-000000
   ```

   String angka dan teks yang mengikuti `250 Ok` adalah ID pesan email.
**catatan**  
Koneksi ditutup secara otomatis setelah tidak aktif selama sekitar 10 detik.

------
#### [ PowerShell ]

Anda dapat menggunakan [Net.Mail. SmtpClient](https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8)kelas untuk mengirim email menggunakan SSL eksplisit melalui port 587.

**catatan**  
Kelas `Net.Mail.SmtpClient` telah secara resmi usang, dan Microsoft merekomendasikan Anda menggunakan pustaka pihak ke tiga. Kode ini hanya ditujukan untuk tujuan pengujian saja, dan tidak boleh digunakan untuk beban kerja produksi.

**Untuk mengirim email melalui PowerShell menggunakan SSL eksplisit**

1. Di editor teks, buat file baru. Tempel kode berikut ke file:

   ```
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $SMTPClient = New-Object Net.Mail.SmtpClient($Server, $Port)
       $SMTPClient.EnableSsl = $true
       $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Credentials.Username, $Credentials.Password);
   
       try {
           Write-Output "Sending message..."
           $SMTPClient.Send($Sender, $Recipient, $Subject, $Body)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 587
   
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (explicit SSL, port 587)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   Setelah selesai, simpan file sebagai `SendEmail.ps1`.

1. Buat perubahan berikut ke file yang Anda buat di langkah sebelumnya:
   + Ganti *sender@example.com* dengan alamat email tempat Anda ingin mengirim pesan.
   + Ganti *recipient@example.com* dengan alamat email yang ingin Anda kirimi pesan.
   + Ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk Wilayah Anda. AWS Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

1. Di PowerShell, masukkan perintah berikut:

   ```
   .\path\to\SendEmail.ps1
   ```

   Pada perintah sebelumnya, ganti *path\$1to\$1SendEmail.ps1* dengan path ke file yang Anda buat di langkah 1.

1. Saat diminta, masukkan nama pengguna dan kata sandi SMTP Anda.

Atau, Anda dapat menggunakan [System.Web.Mail. SmtpMail](https://docs.microsoft.com/en-us/dotnet/api/system.web.mail.smtpmail?view=netframework-4.8)kelas untuk mengirim email menggunakan SSL implisit melalui port 465.

**catatan**  
Kelas `System.Web.Mail.SmtpMail` telah secara resmi usang, dan Microsoft merekomendasikan Anda menggunakan pustaka pihak ke tiga. Kode ini hanya ditujukan untuk tujuan pengujian saja, dan tidak boleh digunakan untuk beban kerja produksi.

**Untuk mengirim email melalui PowerShell menggunakan SSL implisit**

1. Di editor teks, buat file baru. Tempel kode berikut ke file:

   ```
   [System.Reflection.Assembly]::LoadWithPartialName("System.Web") > $null
   
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $mail = New-Object System.Web.Mail.MailMessage
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", $Server)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", $Port)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", $true)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", $Credentials.UserName)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", $Credentials.Password)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", $timeout / 1000)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
   
       $mail.From = $Sender
       $mail.To = $Recipient
       $mail.Subject = $Subject
       $mail.Body = $Body
   
       try {
           Write-Output "Sending message..."
           [System.Web.Mail.SmtpMail]::Send($mail)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 465
       
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (implicit SSL, port 465)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   Setelah selesai, simpan file sebagai `SendEmail.ps1`.

1. Buat perubahan berikut ke file yang Anda buat di langkah sebelumnya:
   + Ganti *sender@example.com* dengan alamat email tempat Anda ingin mengirim pesan.
   + Ganti *recipient@example.com* dengan alamat email yang ingin Anda kirimi pesan.
   + Ganti *email-smtp.us-west-2.amazonaws.com* dengan URL titik akhir SMTP Amazon SES untuk Wilayah Anda. AWS Untuk informasi selengkapnya, lihat [Wilayah dan Amazon SES](regions.md).

1. Di PowerShell, masukkan perintah berikut:

   ```
   .\path\to\SendEmail.ps1
   ```

   Pada perintah sebelumnya, ganti *path\$1to\$1SendEmail.ps1* dengan path ke file yang Anda buat di langkah 1.

1. Saat diminta, masukkan nama pengguna dan kata sandi SMTP Anda.

------

# Menggunakan API Amazon SES untuk mengirim email
<a name="send-email-api"></a>

Untuk mengirim email produksi melalui Amazon SES, Anda dapat menggunakan antarmuka Protokol Transfer Surat Sederhana (SMTP) atau API Amazon SES. Untuk informasi selengkapnya tentang antarmuka SMTP, lihat [Menggunakan antarmuka SMTP Amazon SES untuk mengirim email](send-email-smtp.md). Bagian ini menjelaskan cara mengirim email dengan menggunakan API. 

Ketika Anda mengirim email menggunakan API, Anda menentukan isi pesan, dan Amazon SES menyusun email MIME untuk Anda. Atau, Anda dapat menyusun email sendiri sehingga Anda memiliki kendali penuh atas isi pesan. Untuk informasi selengkapnya tentang API, lihat [Referensi API Amazon Simple Email Service](https://docs.aws.amazon.com/ses/latest/APIReference/). Untuk daftar titik akhir URLs Wilayah AWS tempat Amazon SES tersedia, lihat [titik akhir dan kuota Layanan Email Sederhana Amazon](https://docs.aws.amazon.com/general/latest/gr/ses.html) di. *Referensi Umum AWS*

Anda dapat memanggil API dengan cara berikut:
+ **Buat permintaan HTTPS langsung—**Ini adalah metode yang paling canggih, karena Anda harus secara manual menangani autentikasi dan menandatangani permintaan Anda, lalu secara manual membuat permintaan. Untuk informasi tentang API Amazon SES, lihat halaman [Selamat Datang](https://docs.aws.amazon.com/ses/latest/APIReference-V2/Welcome.html) di *Referensi API v2*.
+ **Gunakan AWS SDK-**AWS SDKs membuatnya mudah untuk mengakses APIs untuk beberapa AWS layanan, termasuk Amazon SES. Ketika Anda menggunakan SDK, fungsi autentikasi, permintaan penandatanganan, logika percobaan ulang, penanganan kesalahan, dan fungsi tingkat rendah lainnya akan terurus sehingga Anda dapat fokus untuk membangun aplikasi yang menyenangkan pelanggan Anda.
+ **Gunakan antarmuka baris perintah—**[AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat baris perintah untuk Amazon SES. Kami juga menawarkan [AWS Alat PowerShell untuk](https://aws.amazon.com/powershell/) mereka yang membuat skrip di PowerShell lingkungan.

Terlepas dari apakah Anda mengakses Amazon SES API secara langsung atau tidak langsung melalui AWS SDK, AWS Command Line Interface atau AWS Alat untuk PowerShell, Amazon SES API menyediakan dua cara berbeda bagi Anda untuk mengirim email, tergantung pada seberapa besar kontrol yang Anda inginkan atas komposisi pesan email:
+ **Diformat—**Amazon SES menyusun dan mengirimkan pesan email yang diformat dengan benar. Anda hanya perlu menyediakan alamat "Dari:" dan "Kepada:", subjek, dan badan pesan. Amazon SES mengurus semua sisanya. Untuk informasi lebih lanjut, lihat [Mengirim email terformat menggunakan API Amazon SES](send-email-formatted.md).
+ **Mentah—**Anda secara manual menulis dan mengirim pesan email, menentukan header email Anda sendiri dan tipe MIME. Jika Anda berpengalaman dalam memformat email Anda sendiri, antarmuka mentah memberi Anda kendali lebih besar atas komposisi pesan Anda. Untuk informasi lebih lanjut, lihat [Mengirim email mentah menggunakan Amazon SES API v2](send-email-raw.md).

**Topics**
+ [Mengirim email terformat menggunakan API Amazon SES](send-email-formatted.md)
+ [Mengirim email mentah menggunakan Amazon SES API v2](send-email-raw.md)
+ [Menggunakan template untuk mengirim email yang dipersonalisasi dengan Amazon SES API](send-personalized-email-api.md)
+ [Mengirim email melalui Amazon SES menggunakan AWS SDK](send-an-email-using-sdk-programmatically.md)
+ [Pengkodean konten yang didukung oleh Amazon SES](content-encodings.md)

# Mengirim email terformat menggunakan API Amazon SES
<a name="send-email-formatted"></a>

Anda dapat mengirim email yang diformat dengan menggunakan Konsol Manajemen AWS atau dengan memanggil Amazon SES API melalui aplikasi secara langsung, atau tidak langsung melalui AWS SDK, file, atau file AWS Command Line Interface. AWS Tools for Windows PowerShell

API Amazon SES menyediakan tindakan `SendEmail`, yang memungkinkan Anda menulis dan mengirim email terformat. `SendEmail` memerlukan alamat Dari:, alamat Kepada:, subjek pesan, dan badan pesan—teks, HTML, atau keduanya. Untuk informasi selengkapnya, lihat [SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html)(Referensi API) atau [SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)(Referensi API v2).

**catatan**  
String alamat email harus 7-bit ASCII. Jika Anda ingin mengirim ke atau dari alamat email yang berisi karakter Unicode di bagian domain alamat, Anda harus mengodekan domain menggunakan Punycode. Untuk informasi lebih lanjut, lihat [RFC 3492](https://tools.ietf.org/html/rfc3492).

Untuk contoh cara menulis pesan yang diformat menggunakan berbagai bahasa pemrograman, lihat. [Contoh kode](send-an-email-using-sdk-programmatically.md#send-an-email-using-sdk-programmatically-examples)

Untuk tips tentang cara meningkatkan kecepatan pengiriman email ketika Anda melakukan beberapa panggilan ke `SendEmail`, lihat [Meningkatkan throughput dengan Amazon SES](troubleshoot-throughput-problems.md).

# Mengirim email mentah menggunakan Amazon SES API v2
<a name="send-email-raw"></a>

Anda dapat menggunakan `SendEmail` operasi Amazon SES API v2 dengan jenis konten yang ditentukan `raw` untuk mengirim pesan yang disesuaikan ke penerima menggunakan format email mentah.

## Tentang bidang header email
<a name="send-email-raw-headers"></a>

Protokol Transfer Surat Sederhana (SMTP) menentukan bagaimana pesan email akan dikirim dengan menentukan envelope surat dan beberapa parameternya, tetapi tidak peduli dengan isi pesannya. Sebaliknya, Format Pesan Internet ([RFC 5322](https://www.ietf.org/rfc/rfc5322.txt)) menentukan bagaimana pesan yang akan disusun.

Dengan spesifikasi Format Pesan Internet, setiap pesan email terdiri dari header dan badan. Header terdiri dari metadata pesan, dan badan berisi pesan itu sendiri. Untuk informasi selengkapnya tentang header dan badan email, lihat [Format email dan Amazon SES](send-email-concepts-email-format.md).

## Menggunakan konstruksi pesan MIME email mentah
<a name="send-email-raw-mime"></a>

Protokol SMTP awalnya dirancang untuk mengirim pesan email yang hanya berisi karakter 7-bit ASCII. Spesifikasi ini membuat SMTP tidak cukup untuk pengodean teks non-ASCII (seperti Unicode), konten biner, atau lampiran. Standar Multipurpose Internet Mail Extensions (MIME) dikembangkan untuk memungkinkan mengirim banyak tipe konten lain menggunakan SMTP.

Standar MIME bekerja dengan memecah badan pesan menjadi beberapa bagian dan kemudian menentukan apa yang harus dilakukan untuk setiap bagian. Misalnya, salah satu bagian dari badan pesan email mungkin berupa teks biasa, sementara yang lain mungkin HTML. Selain itu, MIME mengizinkan pesan email untuk berisi satu lampiran atau lebih. Penerima pesan dapat melihat lampiran dari dalam klien email mereka, atau mereka dapat menyimpan lampiran.

Header dan konten pesan dipisahkan oleh baris kosong. Setiap bagian dari email dipisahkan oleh batas, string karakter yang menunjukkan awal dan akhir dari setiap bagian.

Pesan multipart dalam contoh berikut berisi teks dan bagian HTML, dan lampiran. Lampiran harus ditempatkan tepat di bawah [header lampiran](#send-email-mime-encoding-files) dan paling sering dikodekan `base64` seperti yang ditunjukkan dalam contoh ini.

```
 1. From: "Sender Name" <sender@example.com>
 2. To: recipient@example.com
 3. Subject: Customer service contact info
 4. Content-Type: multipart/mixed;
 5.     boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
 6. 
 7. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
 8. Content-Type: multipart/alternative;
 9.     boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
10. 
11. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
12. Content-Type: text/plain; charset=iso-8859-1
13. Content-Transfer-Encoding: quoted-printable
14. 
15. Please see the attached file for a list of customers to contact.
16. 
17. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
18. Content-Type: text/html; charset=iso-8859-1
19. Content-Transfer-Encoding: quoted-printable
20. 
21. <html>
22. <head></head>
23. <body>
24. <h1>Hello!</h1>
25. <p>Please see the attached file for a list of customers to contact.</p>
26. </body>
27. </html>
28. 
29. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
30. 
31. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
32. Content-Type: text/plain; name="customers.txt"
33. Content-Description: customers.txt
34. Content-Disposition: attachment;filename="customers.txt";
35.     creation-date="Sat, 05 Aug 2017 19:35:36 GMT";
36. Content-Transfer-Encoding: base64
37. 
38. SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENhbmFkYQo5MjM4
39. OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixVbml0ZWQgU3RhdGVzCjI4OTMs
40. QW5heWEsSXllbmdhcixJbmRpYQ==
41. 
42. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
```

Tipe konten untuk pesan adalah `multipart/mixed`, menunjukkan bahwa pesan memiliki banyak bagian (di contoh ini, badan dan lampiran), dan klien penerima harus menangani setiap bagian secara terpisah.

Nest yang dilakukan dalam bagian badan adalah bagian kedua yang menggunakan tipe konten `multipart/alternative`. Tipe konten ini menunjukkan bahwa setiap bagian berisi versi alternatif dari konten yang sama (di kasus ini, versi teks dan versi HTML). Jika klien email penerima dapat menampilkan konten HTML, maka versi HTML badan pesan akan ditunjukkan. Jika klien email penerima dapat tidak menampilkan konten HTML, maka versi teks biasa badan pesan akan ditunjukkan.

Kedua versi pesan juga berisi lampiran (di kasus ini, file teks pendek yang berisi beberapa nama pelanggan).

Ketika Anda melakukan nest pada bagian MIME dalam bagian lain, seperti di contoh ini, bagian yang di-nest harus menggunakan parameter `boundary` yang berbeda dengan parameter `boundary` di bagian induk. Batas-batas ini harus berupa string unik karakter. Untuk menentukan batas antara bagian MIME, ketik dua tanda hubung (--) diikuti oleh string batas. Di akhir bagian MIME, tempatkan dua tanda hubung di bagian awal dan akhir string batas.

**catatan**  
Sebuah pesan tidak dapat memiliki lebih dari 500 bagian MIME.

### Pengkodean MIME
<a name="send-email-mime-encoding"></a>

Untuk menjaga kompatibilitas dengan sistem yang lebih lama, Amazon SES menerima pembatasan 7-bit ASCII SMTP sebagaimana ditentukan di [RFC 2821](https://tools.ietf.org/html/rfc2821). Jika Anda ingin mengirim konten yang berisi karakter non-ASCII, Anda harus mengodekan karakter tersebut ke dalam format yang menggunakan karakter 7-bit ASCII.

#### Alamat email
<a name="send-email-mime-encoding-addresses"></a>

String alamat email harus 7-bit ASCII. Jika Anda ingin mengirim ke atau dari alamat email yang berisi karakter Unicode di bagian domain alamat, Anda harus mengodekan domain menggunakan Punycode. Punycode tidak diizinkan di bagian lokal dari alamat email (bagian sebelum tanda @) atau dalam nama "friendly from". Jika Anda ingin menggunakan karakter Unicode dalam nama “ramah dari”, Anda harus menyandikan nama “ramah dari” menggunakan sintaks kata yang dikodekan MIME, seperti yang dijelaskan di bagian ini. Untuk informasi selengkapnya tentang Punycode, lihat [RFC 3492](http://tools.ietf.org/html/rfc3492).

**catatan**  
Aturan ini hanya berlaku untuk alamat email yang Anda tentukan di envelope pesan, bukan header pesan. Saat Anda menggunakan `SendEmail` operasi Amazon SES API v2, alamat yang Anda tentukan dalam `Destinations` parameter `Source` dan menentukan pengirim dan penerima amplop, masing-masing.

#### Header email
<a name="send-email-mime-encoding-headers"></a>

Untuk mengodekan header pesan, gunakan sintaksis MIME encoded-word. Sintaksis kata dikodekan MIME menggunakan format berikut:

```
=?charset?encoding?encoded-text?=
```

Nilai `encoding` dapat berupa `Q` atau `B`. Jika nilai pengodean adalah `Q`, maka nilai `encoded-text` harus menggunakan Q-encoding. Jika nilai pengodean adalah `B`, maka nilai `encoded-text` harus menggunakan pengodean base64.

Misalnya, jika Anda ingin menggunakan string "Як ти поживаєш?" di baris subjek email, Anda dapat menggunakan salah satu pengodean berikut:
+ **Pengkodean Q**

  ```
  =?utf-8?Q?=D0=AF=D0=BA_=D1=82=D0=B8_=D0=BF=D0=BE=D0=B6=D0=B8=D0=B2=D0=B0=D1=94=D1=88=3F?=
  ```
+ **Pengkodean Base64**

  ```
  =?utf-8?B?0K/QuiDRgtC4INC/0L7QttC40LLQsNGU0Yg/?=
  ```

Untuk informasi selengkapnya tentang Q-encoding, lihat [RFC 2047](https://tools.ietf.org/html/rfc2047). Untuk informasi selengkapnya tentang pengodean base64, lihat [RFC 2045](https://tools.ietf.org/html/rfc2045).

#### Badan pesan
<a name="send-email-mime-encoding-body"></a>

Untuk mengodekan badan pesan, Anda dapat menggunakan pengodean quoted-printable atau pengodean base64. Kemudian, gunakan header `Content-Transfer-Encoding` untuk menunjukkan skema pengodean yang Anda gunakan.

Sebagai contoh, asumsikan badan pesan Anda berisi teks berikut: 

१९७२ मे रे टॉमलिंसन ने पहला ई-मेल संदेश भेजा \$1 रे टॉमलिंसन ने ही सर्वप्रथम @ चिन्ह का चयन किया और इन्ही को ईमेल का आविष्कारक माना जाता है

Jika Anda memilih untuk mengodekan teks ini menggunakan pengodean base64, pertama tentukan header berikut:

```
Content-Transfer-Encoding: base64
```

Kemudian, di bagian badan email, sertakan teks yang dikodekan base64:

```
4KWn4KWv4KWt4KWoIOCkruClhyDgpLDgpYcg4KSf4KWJ4KSu4KSy4KS/4KSC4KS44KSoIOCkqOCl
hyDgpKrgpLngpLLgpL4g4KSILeCkruClh+CksiDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KS+
IHwg4KSw4KWHIOCkn+ClieCkruCksuCkv+CkguCkuOCkqCDgpKjgpYcg4KS54KWAIOCkuOCksOCl
jeCkteCkquCljeCksOCkpeCkriBAIOCkmuCkv+CkqOCljeCkuSDgpJXgpL4g4KSa4KSv4KSoIOCk
leCkv+Ckr+CkviDgpJTgpLAg4KSH4KSo4KWN4KS54KWAIOCkleCliyDgpIjgpK7gpYfgpLIg4KSV
4KS+IOCkhuCkteCkv+Ckt+CljeCkleCkvuCksOCklSDgpK7gpL7gpKjgpL4g4KSc4KS+4KSk4KS+
IOCkueCliAo=
```

**catatan**  
Di beberapa kasus, Anda dapat menggunakan `Content-Transfer-Encoding` 8bit di pesan yang Anda kirim menggunakan Amazon SES. Namun, jika Amazon SES harus membuat perubahan pada pesan Anda (misalnya, ketika Anda menggunakan [pelacakan buka dan klik](faqs-metrics.md)), konten yang 8-bit-encoded mungkin tidak muncul dengan benar saat diterima di kotak masuk penerima. Untuk alasan ini, Anda harus selalu mengodekan konten yang bukan ASCII 7-bit.

#### Lampiran file
<a name="send-email-mime-encoding-files"></a>

Untuk melampirkan file ke email, Anda harus mengodekan lampiran menggunakan pengodean base64. Lampiran biasanya ditempatkan di bagian pesan MIME khusus, yang mencakup header berikut:
+ **Content-Type** - Jenis file lampiran. Berikut ini adalah contoh deklarasi Tipe Konten MIME umum:
  + **File teks biasa** - `Content-Type: text/plain; name="sample.txt"`
  + Dokumen **Microsoft Word** — `Content-Type: application/msword; name="document.docx"`
  + **Gambar JPG** - `Content-Type: image/jpeg; name="photo.jpeg"`
+ **Content-Disposition** - Menentukan bagaimana klien email penerima harus menangani konten. Untuk lampiran, nilai ini adalah `Content-Disposition: attachment`.
+ **Content-Transfer-Encoding** — Skema yang digunakan untuk menyandikan lampiran. Untuk lampiran file, nilai ini hampir selalu `base64`.
+ **Lampiran yang dikodekan** — Anda harus menyandikan lampiran yang sebenarnya dan memasukkannya ke dalam badan di bawah header lampiran seperti yang [ditunjukkan](#send-email-raw-mime) pada contoh.

Amazon SES menerima tipe file yang paling umum. Untuk daftar tipe file yang tidak diterima Amazon SES, lihat [Jenis lampiran SES yang tidak didukung](attachments.md#mime-types).

## Mengirim email mentah menggunakan Amazon SES API v2
<a name="send-email-raw-api"></a>

Amazon SES API v2 menyediakan `SendEmail` tindakan, yang memungkinkan Anda menulis dan mengirim pesan email dalam format yang Anda tentukan saat Anda menyetel jenis konten menjadi sederhana, mentah, atau templat. Untuk deskripsi selengkapnya, lihat [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html). Contoh berikut akan menentukan jenis konten `raw` untuk mengirim pesan menggunakan format email mentah.

**catatan**  
Untuk tips tentang cara meningkatkan kecepatan pengiriman email ketika Anda melakukan beberapa panggilan ke `SendEmail`, lihat [Meningkatkan throughput dengan Amazon SES](troubleshoot-throughput-problems.md).

Badan pesan harus berisi pesan yang diformat dengan benar dan email mentah, dengan bidang header dan pengodean badan pesan yang sesuai. Meskipun pesan mentah mungkin dapat disusun secara manual dalam aplikasi, tapi akan jauh lebih mudah untuk melakukannya dengan menggunakan pustaka surat yang ada. 

------
#### [ Java ]

Contoh kode berikut menunjukkan bagaimana menggunakan [JavaMail](https://javaee.github.io/javamail/)perpustakaan dan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java)untuk menulis dan mengirim email mentah.

```
  1. package com.amazonaws.samples;
  2. 
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.PrintStream;
  6. import java.nio.ByteBuffer;
  7. import java.util.Properties;
  8. 
  9. // JavaMail libraries. Download the JavaMail API 
 10. // from https://javaee.github.io/javamail/
 11. import javax.activation.DataHandler;
 12. import javax.activation.DataSource;
 13. import javax.activation.FileDataSource;
 14. import javax.mail.Message;
 15. import javax.mail.MessagingException;
 16. import javax.mail.Session;
 17. import javax.mail.internet.AddressException;
 18. import javax.mail.internet.InternetAddress;
 19. import javax.mail.internet.MimeBodyPart;
 20. import javax.mail.internet.MimeMessage;
 21. import javax.mail.internet.MimeMultipart;
 22. 
 23. // AWS SDK libraries. Download the AWS SDK untuk Java // from https://aws.amazon.com/sdk-for-java
 24. import com.amazonaws.regions.Regions;
 25. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
 26. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
 27. import com.amazonaws.services.simpleemail.model.RawMessage;
 28. import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;
 29. 
 30. public class AmazonSESSample {
 31. 
 32. 	// Replace sender@example.com with your "From" address.
 33. 	// This address must be verified with Amazon SES.
 34. 	private static String SENDER = "Sender Name <sender@example.com>";
 35. 
 36. 	// Replace recipient@example.com with a "To" address. If your account 
 37. 	// is still in the sandbox, this address must be verified.
 38. 	private static String RECIPIENT = "recipient@example.com";
 39. 
 40. 	// Specify a configuration set. If you do not want to use a configuration
 41. 	// set, comment the following variable, and the 
 42. 	// ConfigurationSetName=CONFIGURATION_SET argument below.
 43. 	private static String CONFIGURATION_SET = "ConfigSet";
 44. 
 45. 	// The subject line for the email.
 46. 	private static String SUBJECT = "Customer service contact info";
 47. 
 48. 	// The full path to the file that will be attached to the email.
 49. 	// If you're using Windows, escape backslashes as shown in this variable.
 50. 	private static String ATTACHMENT = "C:\\Users\\sender\\customers-to-contact.xlsx";
 51. 
 52. 	// The email body for recipients with non-HTML email clients.
 53. 	private static String BODY_TEXT = "Hello,\r\n"
 54.                                         + "Please see the attached file for a list "
 55.                                         + "of customers to contact.";
 56. 
 57. 	// The HTML body of the email.
 58. 	private static String BODY_HTML = "<html>"
 59.                                         + "<head></head>"
 60.                                         + "<body>"
 61.                                         + "<h1>Hello!</h1>"
 62.                                         + "<p>Please see the attached file for a "
 63.                                         + "list of customers to contact.</p>"
 64.                                         + "</body>"
 65.                                         + "</html>";
 66. 
 67.     public static void main(String[] args) throws AddressException, MessagingException, IOException {
 68.             	
 69.     	Session session = Session.getDefaultInstance(new Properties());
 70.         
 71.         // Create a new MimeMessage object.
 72.         MimeMessage message = new MimeMessage(session);
 73.         
 74.         // Add subject, from and to lines.
 75.         message.setSubject(SUBJECT, "UTF-8");
 76.         message.setFrom(new InternetAddress(SENDER));
 77.         message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(RECIPIENT));
 78. 
 79.         // Create a multipart/alternative child container.
 80.         MimeMultipart msg_body = new MimeMultipart("alternative");
 81.         
 82.         // Create a wrapper for the HTML and text parts.        
 83.         MimeBodyPart wrap = new MimeBodyPart();
 84.         
 85.         // Define the text part.
 86.         MimeBodyPart textPart = new MimeBodyPart();
 87.         textPart.setContent(BODY_TEXT, "text/plain; charset=UTF-8");
 88.                 
 89.         // Define the HTML part.
 90.         MimeBodyPart htmlPart = new MimeBodyPart();
 91.         htmlPart.setContent(BODY_HTML,"text/html; charset=UTF-8");
 92.                 
 93.         // Add the text and HTML parts to the child container.
 94.         msg_body.addBodyPart(textPart);
 95.         msg_body.addBodyPart(htmlPart);
 96.         
 97.         // Add the child container to the wrapper object.
 98.         wrap.setContent(msg_body);
 99.         
100.         // Create a multipart/mixed parent container.
101.         MimeMultipart msg = new MimeMultipart("mixed");
102.         
103.         // Add the parent container to the message.
104.         message.setContent(msg);
105.         
106.         // Add the multipart/alternative part to the message.
107.         msg.addBodyPart(wrap);
108.         
109.         // Define the attachment
110.         MimeBodyPart att = new MimeBodyPart();
111.         DataSource fds = new FileDataSource(ATTACHMENT);
112.         att.setDataHandler(new DataHandler(fds));
113.         att.setFileName(fds.getName());
114.         
115.         // Add the attachment to the message.
116.         msg.addBodyPart(att);
117. 
118.         // Try to send the email.
119.         try {
120.             System.out.println("Attempting to send an email through Amazon SES "
121.                               +"using the AWS SDK for Java...");
122. 
123.             // Instantiate an Amazon SES client, which will make the service 
124.             // call with the supplied AWS credentials.
125.             AmazonSimpleEmailService client = 
126.                     AmazonSimpleEmailServiceClientBuilder.standard()
127.                     // Replace US_WEST_2 with the AWS Region you're using for
128.                     // Amazon SES.
129.                     .withRegion(Regions.US_WEST_2).build();
130.             
131.             // Print the raw email content on the console
132.             PrintStream out = System.out;
133.             message.writeTo(out);
134. 
135.             // Send the email.
136.             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
137.             message.writeTo(outputStream);
138.             RawMessage rawMessage = 
139.             		new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));
140. 
141.             SendRawEmailRequest rawEmailRequest = 
142.             		new SendRawEmailRequest(rawMessage)
143.             		    .withConfigurationSetName(CONFIGURATION_SET);
144.             
145.             client.sendRawEmail(rawEmailRequest);
146.             System.out.println("Email sent!");
147.         // Display an error if something goes wrong.
148.         } catch (Exception ex) {
149.           System.out.println("Email Failed");
150.             System.err.println("Error message: " + ex.getMessage());
151.             ex.printStackTrace();
152.         }
153.     }
154. }
```

------
#### [ Python ]

Contoh kode berikut ini menunjukkan cara menggunakan paket [Phyton email.mim](https://docs.python.org/3.8/library/email.mime.html) dan [AWS SDK for Python (Boto)](https://aws.amazon.com/sdk-for-python) untuk menulis dan mengirim email mentah.

```
 1. import json
 2. import boto3
 3. from botocore.exceptions import ClientError
 4. from email.mime.multipart import MIMEMultipart
 5. from email.mime.text import MIMEText
 6. from email.mime.application import MIMEApplication
 7. import os
 8. 
 9. def boto3_rawemailv2():
10.     SENDER = "Sender <sender@example.com>"
11.     RECIPIENT = "recipient@example.com"
12.     CONFIGURATION_SET = "ConfigSet"
13.     AWS_REGION = "us-east-1"
14.     SUBJECT = "Customer service contact info"
15.     ATTACHMENT = "path/to/customers-to-contact.xlsx"
16.     BODY_TEXT = "Hello,\r\nPlease see the attached file for a list of customers to contact."
17. 
18.     # The HTML body of the email.
19.     BODY_HTML = """\
20.     <html>
21.     <head/>
22.     <body>
23.     <h1>Hello!</h1>
24.     <p>Please see the attached file for a list of customers to contact.</p>
25.     </body>
26.     </html>
27.     """
28. 
29.     # The character encoding for the email.
30.     CHARSET = "utf-8"
31.     msg = MIMEMultipart('mixed')
32.     # Add subject, from and to lines.
33.     msg['Subject'] = SUBJECT 
34.     msg['From'] = SENDER 
35.     msg['To'] = RECIPIENT
36.     
37.     # Create a multipart/alternative child container.
38.     msg_body = MIMEMultipart('alternative')
39.     
40.     # Encode the text and HTML content and set the character encoding. This step is
41.     # necessary if you're sending a message with characters outside the ASCII range.
42.     textpart = MIMEText(BODY_TEXT.encode(CHARSET), 'plain', CHARSET)
43.     htmlpart = MIMEText(BODY_HTML.encode(CHARSET), 'html', CHARSET)
44.     
45.     # Add the text and HTML parts to the child container.
46.     msg_body.attach(textpart)
47.     msg_body.attach(htmlpart)
48.     
49.     # Define the attachment part and encode it using MIMEApplication.
50.     att = MIMEApplication(open(ATTACHMENT, 'rb').read())
51.     
52.     # Add a header to tell the email client to treat this part as an attachment,
53.     # and to give the attachment a name.
54.     att.add_header('Content-Disposition','attachment',filename=os.path.basename(ATTACHMENT))
55.     
56.     # Attach the multipart/alternative child container to the multipart/mixed
57.     # parent container.
58.     msg.attach(msg_body)
59.     msg.attach(att)
60. 
61.     #changes start from here
62.     strmsg = str(msg)
63.     body = bytes (strmsg, 'utf-8')
64. 
65. 
66. 
67.     
68.     client = boto3.client('sesv2')
69.     response = client.send_email(
70.     FromEmailAddress=SENDER,
71.     Destination={
72.         'ToAddresses': [RECIPIENT]
73.     },
74.     Content={
75.         'Raw': {
76.             'Data': body
77.         }
78.     }
79.     )
80.     print(response)
81. boto3_rawemailv2 ()
```

------

# Menggunakan template untuk mengirim email yang dipersonalisasi dengan Amazon SES API
<a name="send-personalized-email-api"></a>

Di Amazon SES Anda dapat mengirim email template baik dengan menggunakan template yang *disimpan atau dengan menggunakan template* *inline*.
+ **Template tersimpan** - Mengacu pada [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html)sumber daya yang dibuat dan disimpan di SES dengan menggunakan `CreateEmailTemplate` operasi di Amazon SES v2 API. Template berisi subjek dan isi email yang berisi variabel (placeholder) sejalan dengan konten tertulis. Nama template yang disimpan dan data dinamis ke variabel placeholder dalam template disediakan saat memanggil operasi API `SendEmail` atau `SendBulkEmail` v2.

  *Template yang disimpan* dapat dengan mudah digunakan kembali dan dapat menghemat waktu dan tenaga Anda saat mengirim jenis email yang serupa. Alih-alih membuat setiap email dari awal, Anda hanya perlu membuat struktur dasar dan desain sekali, lalu cukup perbarui konten dinamis dalam template.
+ **Template sebaris** — `Template` Sumber daya tidak digunakan, melainkan subjek dan isi email yang berisi variabel (placeholder) sejalan dengan konten tertulis bersama dengan nilai untuk variabel placeholder tersebut disediakan saat memanggil operasi API atau v2. `SendEmail` `SendBulkEmail`

  *Template inline* merampingkan proses pengiriman email massal dengan menghilangkan kebutuhan untuk mengelola sumber daya template di akun SES Anda dan menyederhanakan proses integrasi dengan memungkinkan Anda untuk memasukkan konten template langsung dalam logika aplikasi Anda. Mereka tidak dihitung terhadap batas 20.000 templat per. Wilayah AWS

Batasan berikut berlaku saat menggunakan *templat tersimpan*:
+ Anda dapat membuat hingga 20.000 template email di masing-masing Wilayah AWS.
+ Setiap templat dapat berukuran hingga 500KB, termasuk bagian teks dan HTML.

Batas berikut berlaku saat menggunakan *templat sebaris*:
+ Setiap file JSON input dapat berukuran hingga 1 MB, termasuk bagian teks dan HTML.

Berikut ini berlaku untuk *templat *tersimpan* dan sebaris*:
+ Tidak ada batasan jumlah variabel pengganti yang dapat digunakan.
+ Anda dapat mengirim email ke hingga 50 objek tujuan di setiap panggilan ke `SendBulkEmail` operasi. [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)Objek dapat berisi beberapa penerima yang didefinisikan dalam **ToAddresses**, **CcAddresses**, dan **BccAddresses**. Jumlah tujuan yang dapat Anda hubungi dalam satu panggilan ke API v2 mungkin dibatasi oleh tarif pengiriman maksimum akun Anda. Untuk informasi selengkapnya, lihat [Mengelola batas pengiriman Amazon SES Anda](manage-sending-quotas.md).

Bab ini mencakup prosedur dengan contoh untuk menggunakan *templat tersimpan dan templat* *sebaris*.

**catatan**  
Prosedur di bagian ini menganggap bahwa Anda telah menginstal dan mengonfigurasi AWS CLI. Untuk informasi selengkapnya tentang menginstal dan mengonfigurasi AWS CLI, lihat [Panduan AWS Command Line Interface Pengguna](https://docs.aws.amazon.com/cli/latest/userguide/).

## (Opsional) Bagian 1: Mengatur pemberitahuan acara Kegagalan Rendering
<a name="send-personalized-email-set-up-notifications"></a>

 Jika Anda mengirim email berisi konten personalisasi yang tidak valid, Amazon SES mungkin menerima pesan tersebut, namun tidak dapat mengirimkannya. Untuk alasan ini, jika Anda berencana untuk mengirim email yang dipersonalisasi, Anda harus mengonfigurasi SES untuk mengirim pemberitahuan peristiwa Kegagalan Rendering melalui Amazon SNS. Ketika Anda menerima notifikasi peristiwa Kegagalan Rendering, Anda dapat mengidentifikasi pesan yang berisi konten yang tidak valid, memperbaiki masalah, dan mengirim pesan kembali.

Prosedur di bagian ini bersifat opsional, namun sangat disarankan.

**Untuk mengonfigurasi notifikasi peristiwa Kegagalan Rendering**

1. Buat topik Amazon SNS. Untuk prosedur, lihat [Buat Topik](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) di *Panduan Developer Amazon Simple Notification Service*.

1. Langganan topik Amazon SNS. Misalnya, jika Anda ingin menerima notifikasi Kegagalan Rendering melalui email, berlangganan titik akhir email (yaitu, alamat email Anda) ke topik tersebut.

   Untuk prosedur, lihat [Berlangganan Topik](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) di *Panduan Developer Amazon Simple Notification Service*.

1. Selesaikan prosedur di [Siapkan tujuan peristiwa Amazon SNS untuk penerbitan peristiwa](event-publishing-add-event-destination-sns.md) untuk menyiapkan set konfigurasi Anda untuk mempublikasikan peristiwa Kegagalan Rendering ke topik Amazon SNS Anda.

## (Opsional) Bagian 2: Buat template email
<a name="send-personalized-email-create-template"></a>

Jika Anda berniat menggunakan *template yang disimpan*, bagian ini akan menunjukkan cara menggunakan operasi API [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html)SES v2 untuk membuat template. Anda dapat melewati langkah ini jika Anda ingin menggunakan *template inline*.

Prosedur ini menganggap Anda telah menginstal dan mengonfigurasi AWS CLI. Untuk informasi selengkapnya tentang menginstal dan mengonfigurasi AWS CLI, lihat [Panduan AWS Command Line Interface Pengguna](https://docs.aws.amazon.com/cli/latest/userguide/).

**Untuk membuat templat**

1. Dalam editor teks, buat file baru dan tempel kode berikut untuk menyesuaikannya sesuai kebutuhan.

   ```
   {
       "TemplateName": "MyTemplate",
       "TemplateContent": {
           "Subject": "Greetings, {{name}}!",
           "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
           "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
       }
   }
   ```

   Kode ini berisi properti berikut:
   + **TemplateName**— Nama sumber `Template` daya. Ketika Anda mengirim email, Anda merujuk ke nama ini.
   + **TemplateContent**— Sebuah wadah untuk atribut berikut:
     + **Subjek** - Baris subjek email. Properti ini mungkin berisi tanda pengganti. Tanda ini menggunakan format berikut: `{{tagname}}`. Ketika Anda mengirim email, Anda dapat menentukan nilai untuk `tagname` untuk setiap tujuan.
     + **Html—Tubuh** HTML dari email. Properti ini mungkin berisi tanda pengganti. Contoh sebelumnya mencakup dua tanda: `{{name}}` dan `{{favoriteanimal}}`.
     + **Teks** — Tubuh teks email. Penerima yang klien emailnya tidak menampilkan konten HTML akan melihat versi email ini. Properti ini juga dapat berisi tag pengganti.

1. Sesuaikan contoh sebelumnya sesuai dengan kebutuhan Anda, lalu simpan file sebagai *mytemplate.json*.

1. Pada baris perintah, ketik perintah berikut untuk membuat template baru menggunakan operasi API [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html)v2:

   ```
   aws sesv2 create-email-template --cli-input-json file://mytemplate.json
   ```

## Bagian 3: Kirim email yang dipersonalisasi
<a name="send-personalized-email-api-operations"></a>

Anda dapat menggunakan dua operasi API SES v2 berikut untuk mengirim email menggunakan *templat tersimpan atau templat* *sebaris*:
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)Operasi ini berguna untuk mengirim email yang disesuaikan ke objek tujuan tunggal. [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)Objek API v2 dapat berisi *ToAddresses*, *CcAddresses*, dan *BccAddresses*properti. Ini dapat digunakan dalam kombinasi apa pun dan dapat berisi satu atau lebih alamat email yang akan menerima email yang sama.
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)Operasi ini berguna untuk mengirim email unik ke beberapa objek tujuan dalam satu panggilan ke API v2.

Bagian ini memberikan contoh bagaimana menggunakan AWS CLI untuk mengirim email template menggunakan kedua operasi pengiriman ini.

### Mengirim email template ke objek tujuan tunggal
<a name="send-templated-email-single-destination"></a>

Anda dapat menggunakan [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)operasi untuk mengirim email ke satu atau beberapa penerima yang ditentukan dalam satu objek tujuan. Semua penerima di objek [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) akan menerima email yang sama.

**Untuk mengirim email template ke objek tujuan tunggal**

1. Bergantung pada apakah Anda ingin menggunakan templat *tersimpan atau templat* *sebaris*, pilih contoh kode masing-masing untuk ditempelkan ke editor teks, sesuaikan sesuai kebutuhan.

------
#### [ Stored template code example ]

   Perhatikan bahwa template yang Anda buat pada langkah sebelumnya *MyTemplate*, sedang direferensikan sebagai nilai untuk `TemplateName` parameter.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Kode ini berisi properti berikut:
   + **FromEmailAddress**— Alamat email pengirim.
   + **Tujuan** - Objek yang berisi penerima email yang ditentukan dalam *ToAddresses*, *CcAddresses*, dan *BccAddresses*properti. Ini dapat digunakan dalam kombinasi apa pun dan dapat berisi satu atau lebih alamat email yang akan menerima email yang sama.
   + **TemplateName**— Nama sumber `Template` daya untuk diterapkan ke email.
   + **TemplateData**— String JSON yang lolos yang berisi pasangan kunci-nilai. Kunci sesuai dengan variabel yang didefinisikan dalam `TemplateContent` properti dalam template yang disimpan, misalnya,`{{name}}`. Nilai mewakili konten yang menggantikan variabel.
   + **ConfigurationSetName**— Nama konfigurasi yang akan digunakan saat mengirim email.
**catatan**  
Kami merekomendasikan bahwa Anda menggunakan satu set konfigurasi yang dikonfigurasi untuk mempublikasikan Rendering kegagalan peristiwa untuk Amazon SNS. Untuk informasi selengkapnya, lihat [(Opsional) Bagian 1: Mengatur pemberitahuan acara Kegagalan Rendering](#send-personalized-email-set-up-notifications).

------
#### [ Inline template code example ]

   Perhatikan bahwa `TemplateContent` properti (yang biasanya akan didefinisikan dalam *template tersimpan*), sedang didefinisikan *sebaris* bersama dengan `TemplateData` properti yang membuat ini template *inline*.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Kode ini berisi properti berikut:
   + **FromEmailAddress**— Alamat email pengirim.
   + **Tujuan** - Objek yang berisi penerima email yang ditentukan dalam *ToAddresses*, *CcAddresses*, dan *BccAddresses*properti. Ini dapat digunakan dalam kombinasi apa pun dan dapat berisi satu atau lebih alamat email yang akan menerima email yang sama.
   + **TemplateContent**— Sebuah wadah untuk atribut berikut:
     + **Subjek** - Baris subjek email. Properti ini mungkin berisi tanda pengganti. Tanda ini menggunakan format berikut: `{{tagname}}`. Ketika Anda mengirim email, Anda dapat menentukan nilai untuk `tagname` untuk setiap tujuan.
     + **Html—Tubuh** HTML dari email. Properti ini mungkin berisi tanda pengganti. Contoh sebelumnya mencakup dua tanda: `{{name}}` dan `{{favoriteanimal}}`.
     + **Teks** — Tubuh teks email. Penerima yang klien emailnya tidak menampilkan konten HTML akan melihat versi email ini. Properti ini juga dapat berisi tag pengganti.
   + **TemplateData**— String JSON yang lolos yang berisi pasangan kunci-nilai. Kunci sesuai dengan variabel yang didefinisikan dalam `TemplateContent` properti dalam file ini, misalnya,`{{name}}`. Nilai mewakili konten yang menggantikan variabel.
   + **ConfigurationSetName**— Nama konfigurasi yang akan digunakan saat mengirim email.
**catatan**  
Kami merekomendasikan bahwa Anda menggunakan satu set konfigurasi yang dikonfigurasi untuk mempublikasikan Rendering kegagalan peristiwa untuk Amazon SNS. Untuk informasi selengkapnya, lihat [(Opsional) Bagian 1: Mengatur pemberitahuan acara Kegagalan Rendering](#send-personalized-email-set-up-notifications).

------

1. Sesuaikan contoh sebelumnya sesuai dengan kebutuhan Anda, lalu simpan file sebagai *myemail.json*.

1. Pada baris perintah, ketik perintah API v2 berikut untuk mengirim email:

   ```
   aws sesv2 send-email --cli-input-json file://myemail.json
   ```

### Mengirim email template ke beberapa objek tujuan
<a name="send-templated-email-multiple-destinations"></a>

Anda dapat menggunakan [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)operasi untuk mengirim email ke beberapa objek tujuan dalam satu panggilan ke SES v2 API. SES mengirimkan email unik ke penerima atau penerima di setiap [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)objek.

**Untuk mengirim email template ke beberapa objek tujuan**

1. Bergantung pada apakah Anda ingin menggunakan templat *tersimpan atau templat* *sebaris*, pilih contoh kode masing-masing untuk ditempelkan ke editor teks, sesuaikan sesuai kebutuhan.

------
#### [ Stored template code example ]

   Perhatikan bahwa template yang Anda buat pada langkah sebelumnya *MyTemplate*, sedang direferensikan sebagai nilai untuk `TemplateName` parameter.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Kode ini berisi properti berikut:
   + **FromEmailAddress**— Alamat email pengirim.
   + **DefaultContent**— Sebuah objek JSON yang berisi `TemplateName` dan `TemplateData` objek. 
   + **TemplateName**— Nama sumber `Template` daya untuk diterapkan ke email.
   + **TemplateData**— Berisi pasangan kunci-nilai yang akan digunakan jika `ReplacementEmailContent` objek berisi objek JSON kosong,`{}`, di properti. `ReplacementTemplateData`
   + **BulkEmailEntries**— Array yang berisi satu atau lebih `Destination` objek.
   + **Tujuan** - Objek yang berisi penerima email yang ditentukan dalam *ToAddresses*, *CcAddresses*, dan *BccAddresses*properti. Ini dapat digunakan dalam kombinasi apa pun dan dapat berisi satu atau lebih alamat email yang akan menerima email yang sama.
   + **ReplacementTemplateData**— String JSON yang lolos yang berisi pasangan kunci-nilai. Kunci sesuai dengan variabel dalam template, misalnya,`{{name}}`. Nilai-nilai menunjukkan konten yang menggantikan variabel di email. (Jika string JSON di sini kosong, ditunjukkan oleh`{}`, pasangan kunci-nilai didefinisikan dalam `TemplateData` properti dalam `DefaultContent` objek akan digunakan.)
   + **ConfigurationSetName**— Nama konfigurasi yang akan digunakan saat mengirim email.
**catatan**  
Kami merekomendasikan bahwa Anda menggunakan satu set konfigurasi yang dikonfigurasi untuk mempublikasikan Rendering kegagalan peristiwa untuk Amazon SNS. Untuk informasi selengkapnya, lihat [(Opsional) Bagian 1: Mengatur pemberitahuan acara Kegagalan Rendering](#send-personalized-email-set-up-notifications).

------
#### [ Inline template code example ]

   Perhatikan bahwa `TemplateContent` properti (yang biasanya akan didefinisikan dalam *template tersimpan*), sedang didefinisikan *sebaris* bersama dengan `TemplateData` properti yang membuat ini template *inline*.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Kode ini berisi properti berikut:
   + **FromEmailAddress**— Alamat email pengirim.
   + **DefaultContent**— Sebuah objek JSON yang berisi `TemplateContent` dan `TemplateData` objek. 
   + **TemplateContent**— Sebuah wadah untuk atribut berikut:
     + **Subjek** - Baris subjek email. Properti ini mungkin berisi tanda pengganti. Tanda ini menggunakan format berikut: `{{tagname}}`. Ketika Anda mengirim email, Anda dapat menentukan nilai untuk `tagname` untuk setiap tujuan.
     + **Html—Tubuh** HTML dari email. Properti ini mungkin berisi tanda pengganti. Contoh sebelumnya mencakup dua tanda: `{{name}}` dan `{{favoriteanimal}}`.
     + **Teks** — Tubuh teks email. Penerima yang klien emailnya tidak menampilkan konten HTML akan melihat versi email ini. Properti ini juga dapat berisi tag pengganti.
   + **TemplateData**— Berisi pasangan kunci-nilai yang akan digunakan jika `ReplacementEmailContent` objek berisi objek JSON kosong,`{}`, di properti. `ReplacementTemplateData`
   + **BulkEmailEntries**— Array yang berisi satu atau lebih `Destination` objek.
   + **Tujuan** - Objek yang berisi penerima email yang ditentukan dalam *ToAddresses*, *CcAddresses*, dan *BccAddresses*properti. Ini dapat digunakan dalam kombinasi apa pun dan dapat berisi satu atau lebih alamat email yang akan menerima email yang sama.
   + **ReplacementTemplateData**— String JSON yang lolos yang berisi pasangan kunci-nilai. Kunci sesuai dengan variabel yang didefinisikan dalam `TemplateContent` properti dalam file ini, misalnya,`{{name}}`. Nilai-nilai menunjukkan konten yang menggantikan variabel di email. (Jika string JSON di sini kosong, ditunjukkan oleh`{}`, pasangan kunci-nilai didefinisikan dalam `TemplateData` properti dalam `DefaultContent` objek akan digunakan.)
   + **ConfigurationSetName**— Nama konfigurasi yang akan digunakan saat mengirim email.
**catatan**  
Kami merekomendasikan bahwa Anda menggunakan satu set konfigurasi yang dikonfigurasi untuk mempublikasikan Rendering kegagalan peristiwa untuk Amazon SNS. Untuk informasi selengkapnya, lihat [(Opsional) Bagian 1: Mengatur pemberitahuan acara Kegagalan Rendering](#send-personalized-email-set-up-notifications).

------

1. Ubah nilai dalam kode di langkah sebelumnya untuk memenuhi kebutuhan Anda, lalu simpan file sebagai *mybulkemail.json*.

1. Pada baris perintah, ketik perintah API v2 berikut untuk mengirim email massal:

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

# Personalisasi email lanjutan
<a name="send-personalized-email-advanced"></a>

 Jika Anda menggunakan *template tersimpan*, yaitu, Anda telah membuat [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html)sumber daya di Amazon SES dengan menggunakan `CreateEmailTemplate` operasi dengan SES v2 API, Anda dapat memanfaatkan sistem Handlebars untuk membuat templat yang menyertakan fitur lanjutan, seperti atribut bersarang, iterasi array, pernyataan kondisional dasar, dan pembuatan paral sebaris. Bagian ini menyediakan contoh fitur ini.

Handlebar mencakup fitur tambahan di luar yang didokumentasikan di bagian ini. Untuk informasi lebih lanjut, lihat [Bantuan Bawaan](https://handlebarsjs.com/guide/builtin-helpers.html) di [handlebarsjs.com](http://handlebarsjs.com).

**catatan**  
SES tidak luput dari konten HTML saat merender template HTML untuk pesan. Ini berarti jika Anda menyertakan data yang dimasukkan pengguna, seperti dari formulir kontak, Anda harus menghindarinya di sisi klien.

**Topics**
+ [Menguraikan atribut yang di-nest](#send-personalized-email-advanced-nested)
+ [Pengulangan melalui daftar](#send-personalized-email-advanced-iterating)
+ [Menggunakan pernyataan persyaratan dasar](#send-personalized-email-advanced-conditionals)
+ [Membuat parsial inline](#send-personalized-email-advanced-inline-partials)

## Menguraikan atribut yang di-nest
<a name="send-personalized-email-advanced-nested"></a>

Handlebar mencakup dukungan untuk jalur yang di-nest sehingga mempermudah pengaturan data pelanggan yang rumit, dan kemudian data tersebut dapat dirujuk di templat email Anda.

Misalnya, Anda dapat mengatur data penerima ke dalam beberapa kategori umum. Dalam setiap kategori tersebut, Anda dapat menyertakan informasi detail. Contoh kode berikut menunjukkan contoh struktur untuk satu penerima:

```
{
  "meta":{
    "userId":"51806220607"
  },
  "contact":{
    "firstName":"Anaya",
    "lastName":"Iyengar",
    "city":"Bengaluru",
    "country":"India",
    "postalCode":"560052"
  },
  "subscription":[
    {
      "interest":"Sports"
    },
    {
      "interest":"Travel"
    },
    {
      "interest":"Cooking"
    }
  ]
}
```

Di templat email, Anda dapat merujuk ke atribut yang di-nest dengan memberikan nama atribut induk, diikuti oleh titik (.), diikuti dengan nama atribut yang Anda ingin sertakan nilainya. Misalnya, jika Anda menggunakan struktur data yang ditampilkan di contoh sebelumnya, dan Anda ingin menyertakan nama depan setiap penerima di templat email, masukkan teks berikut di templat email Anda: `Hello {{contact.firstName}}!`

Handlebar dapat mengurai jalur yang di-nest beberapa tingkat, yang berarti Anda memiliki fleksibilitas dalam penyusunan data templat.

## Pengulangan melalui daftar
<a name="send-personalized-email-advanced-iterating"></a>

Fungsi bantuan `each` mengulang melalui item di array. Kode berikut adalah contoh templat email yang menggunakan fungsi bantuan `each` untuk membuat daftar terperinci dari setiap kepentingan penerima.

```
{
  "Template": {
    "TemplateName": "Preferences",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>You have indicated that you are interested in receiving 
                   information about the following subjects:</p>
                 <ul>
                   {{#each subscription}}
                     <li>{{interest}}</li>
                   {{/each}}
                 </ul>
                 <p>You can change these settings at any time by visiting 
                    the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                    Preference Center</a>.</p>",
    "TextPart": "Your Preferences\n\nYou have indicated that you are interested in 
                 receiving information about the following subjects:\n
                 {{#each subscription}}
                   - {{interest}}\n
                 {{/each}}
                 \nYou can change these settings at any time by 
                 visiting the Preference Center at 
                 https://www.example.com/prefererences/i.aspx?id={{meta.userId}}"
  }
}
```

**penting**  
Di contoh kode sebelumnya, nilai-nilai atribut `HtmlPart` dan `TextPart` memiliki jeda baris agar contoh lebih mudah dibaca. File JSON untuk templat Anda tidak dapat berisi jeda baris dalam nilai-nilai ini. Jika Anda menyalin dan menempel contoh ini ke file JSON Anda sendiri, hapus jeda baris dan spasi ekstra dari bagian `HtmlPart` dan `TextPart` sebelum melanjutkan.

Setelah Anda membuat templat, Anda dapat menggunakan operasi `SendEmail` atau `SendBulkEmail` untuk mengirim email ke penerima menggunakan templat ini. Selama setiap penerima memiliki setidaknya satu nilai di objek `Interests`, penerima menerima email yang berisi daftar kepentingan terperinci mereka. Contoh berikut menunjukkan file JSON yang dapat digunakan untuk mengirim email ke beberapa penerima menggunakan templat sebelumnya:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Travel\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"},\"subscription\":[{\"interest\":\"Technology\"},{\"interest\":\"Politics\"}]}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

Ketika Anda mengirim email ke penerima yang tercantum di contoh sebelumnya menggunakan operasi `SendBulkEmail`, mereka menerima pesan yang menyerupai contoh yang ditunjukkan pada citra berikut:

![\[Preferences notification listing Sports, Travel, and Cooking as selected interests.\]](http://docs.aws.amazon.com/id_id/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## Menggunakan pernyataan persyaratan dasar
<a name="send-personalized-email-advanced-conditionals"></a>

Bagian ini dibangun di atas contoh yang dijelaskan di bagian sebelumnya. Contoh di bagian sebelumnya menggunakan bantuan `each` untuk mengulangi melalui daftar kepentingan. Namun, penerima yang kepentingannya tidak ditentukan menerima email yang berisi daftar kosong. Dengan menggunakan bantuan `{{if}}`, email dapat diberi format yang berbeda jika atribut tertentu hadir di data templat. Kode berikut menggunakan bantuan `{{if}}` untuk menampilkan daftar poin dari bagian sebelumnya jika array `Subscription` berisi nilai. Jika array kosong, blok teks yang berbeda ditampilkan.

```
{
  "Template": {
    "TemplateName": "Preferences2",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>Dear {{contact.firstName}},</p>
                 {{#if subscription}}
                   <p>You have indicated that you are interested in receiving 
                     information about the following subjects:</p>
                     <ul>
                     {{#each subscription}}
                       <li>{{interest}}</li>
                     {{/each}}
                     </ul>
                     <p>You can change these settings at any time by visiting 
                       the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                       Preference Center</a>.</p>
                 {{else}}
                   <p>Please update your subscription preferences by visiting 
                     the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                     Preference Center</a>.
                 {{/if}}",
    "TextPart": "Your Preferences\n\nDear {{contact.firstName}},\n\n
                 {{#if subscription}}
                   You have indicated that you are interested in receiving 
                   information about the following subjects:\n
                   {{#each subscription}}
                     - {{interest}}\n
                   {{/each}}
                   \nYou can change these settings at any time by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{else}}
                   Please update your subscription preferences by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{/if}}"
  }
}
```

**penting**  
Di contoh kode sebelumnya, nilai-nilai atribut `HtmlPart` dan `TextPart` memiliki jeda baris agar contoh lebih mudah dibaca. File JSON untuk templat Anda tidak dapat berisi jeda baris dalam nilai-nilai ini. Jika Anda menyalin dan menempel contoh ini ke file JSON Anda sendiri, hapus jeda baris dan spasi ekstra dari bagian `HtmlPart` dan `TextPart` sebelum melanjutkan.

Contoh berikut menunjukkan file JSON yang dapat digunakan untuk mengirim email ke beberapa penerima menggunakan templat sebelumnya:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences2",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"}}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

Di contoh ini, penerima yang data templatnya memiliki daftar kepentingan menerima email yang sama seperti contoh yang ditunjukkan di bagian sebelumnya. Penerima yang data templatnya tidak memiliki kepentingan apa pun, namun, menerima email yang menyerupai contoh yang ditunjukkan pada citra berikut:

![\[Email message with header "Your Preferences" and text about updating subscription preferences.\]](http://docs.aws.amazon.com/id_id/ses/latest/dg/images/send-personalized-email-advanced-condition-nointerest.png)


## Membuat parsial inline
<a name="send-personalized-email-advanced-inline-partials"></a>

Anda dapat menggunakan parsial inline untuk menyederhanakan templat yang mencakup string berulang. Sebagai contoh, Anda dapat membuat parsial inline yang mencakup nama depan penerima, dan, jika tersedia, nama belakang mereka dengan menambahkan kode berikut ke depan templat Anda:

```
{{#* inline \"fullName\"}}{{firstName}}{{#if lastName}} {{lastName}}{{/if}}{{/inline}}\n
```

**catatan**  
Karakter baris baru (`\n`) diperlukan untuk memisahkan blok `{{inline}}` dari konten di templat Anda. Baris baru tidak diberikan di output akhir.

Setelah Anda membuat parsial `fullName`, Anda dapat memasukkannya di mana saja di templat Anda dengan meletakkan tanda lebih besar-daripada (>) sebelum nama parsial lalu diikuti oleh spasi, seperti di contoh berikut: `{{> fullName}}`. Parsial inline tidak ditransfer antar bagian dari email. Misalnya, jika Anda ingin menggunakan parsial inline yang dama di kedua versi email HTML dan teks, Anda harus menentukannya di kedua bagian `HtmlPart` dan `TextPart`.

Anda juga dapat menggunakan parsial inline ketika mengulang melalui array. Anda dapat menggunakan kode berikut untuk membuat templat yang menggunakan parsial inline `fullName`. Di contoh ini, parsial inline berlaku untuk kedua nama penerima dan array nama lain:

```
{
  "Template": {
    "TemplateName": "Preferences3",
    "SubjectPart": "{{firstName}}'s Subscription Preferences",
    "HtmlPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 <h1>Hello {{> fullName}}!</h1>
                 <p>You have listed the following people as your friends:</p>
                 <ul>
                 {{#each friends}}
                   <li>{{> fullName}}</li>
                 {{/each}}</ul>",
    "TextPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 Hello {{> fullName}}! You have listed the following people 
                 as your friends:\n
                 {{#each friends}}
                   - {{> fullName}}\n
                 {{/each}}"
  }
}
```

**penting**  
Di contoh kode sebelumnya, nilai-nilai atribut `HtmlPart` dan `TextPart` memiliki jeda baris agar contoh lebih mudah dibaca. File JSON untuk templat Anda tidak dapat berisi jeda baris dalam nilai-nilai ini. Jika Anda menyalin dan menempel contoh ini ke file JSON Anda sendiri, hapus jeda baris dan spasi ekstra dari bagian ini.

# Mengelola templat email
<a name="send-personalized-email-manage-templates"></a>

Selain [membuat template email](send-personalized-email-api.md), Anda juga dapat menggunakan Amazon SES v2 API untuk memperbarui atau menghapus template yang ada, untuk daftar semua template yang ada, atau untuk melihat konten template. 

Bagian ini berisi prosedur untuk menggunakan AWS CLI untuk melakukan tugas-tugas yang terkait dengan template SES.

**catatan**  
Prosedur di bagian ini menganggap bahwa Anda telah menginstal dan mengonfigurasi AWS CLI. Untuk informasi selengkapnya tentang menginstal dan mengonfigurasi AWS CLI, lihat [Panduan AWS Command Line Interface Pengguna](https://docs.aws.amazon.com/cli/latest/userguide/).

## Melihat daftar templat email
<a name="send-personalized-email-manage-templates-list"></a>

Anda dapat menggunakan operasi [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html)SES v2 API untuk melihat daftar semua template email yang ada.

**Untuk melihat daftar templat email**
+ Di baris perintah, masukkan perintah berikut:

  ```
  aws sesv2 list-email-templates
  ```

  Jika ada template email yang ada di akun SES Anda di Wilayah saat ini, perintah ini mengembalikan respons yang menyerupai contoh berikut:

  ```
  {
      "TemplatesMetadata": [
          {
              "Name": "SpecialOffers",
              "CreatedTimestamp": "2020-08-05T16:04:12.640Z"
          },
          {
              "Name": "NewsAndUpdates",
              "CreatedTimestamp": "2019-10-03T20:03:34.574Z"
          }
      ]
  }
  ```

  Jika Anda belum membuat templat apa pun, perintah tersebut mengembalikan objek `TemplatesMetadata` dengan tanpa anggota.

## Melihat konten templat email tertentu
<a name="send-personalized-email-manage-templates-get"></a>

Anda dapat menggunakan operasi [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html)SES v2 API untuk melihat konten template email tertentu.

**Untuk melihat konten templat email**
+ Di baris perintah, masukkan perintah berikut:

  ```
  aws sesv2 get-email-template --template-name MyTemplate
  ```

  Pada perintah sebelumnya, ganti *MyTemplate* dengan nama template yang ingin Anda lihat.

  Jika nama template yang Anda berikan cocok dengan template yang ada di akun SES Anda, perintah ini mengembalikan respons yang menyerupai contoh berikut:

  ```
  {
      "Template": {
          "TemplateName": "TestMessage",
          "SubjectPart": "Amazon SES Test Message",
          "TextPart": "Hello! This is the text part of the message.",
          "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
      }
  }
  ```

  Jika nama template yang Anda berikan tidak cocok dengan template yang ada di akun SES Anda, perintah akan mengembalikan `NotFoundException` kesalahan.

## Menghapus templat email
<a name="send-personalized-email-manage-templates-delete"></a>

Anda dapat menggunakan operasi [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html)SES v2 API untuk menghapus template email tertentu.

**Untuk menghapus templat email**
+ Di baris perintah, masukkan perintah berikut:

  ```
  aws sesv2 delete-email-template --template-name MyTemplate
  ```

  Pada perintah sebelumnya, ganti *MyTemplate* dengan nama template yang ingin Anda hapus.

  Perintah ini tidak memberikan output apa pun. Anda dapat memverifikasi bahwa template telah dihapus dengan menggunakan [GetTemplate](#send-personalized-email-manage-templates-get)operasi.

## Memperbarui templat email
<a name="send-personalized-email-manage-templates-update"></a>

Anda dapat menggunakan operasi [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html)SES v2 API untuk memperbarui template email yang ada. Misalnya, operasi ini sangat membantu jika Anda ingin mengubah baris subjek templat email, atau jika Anda perlu mengubah badan pesan itu sendiri.

**Untuk memperbarui templat email**

1. Gunakan perintah `GetEmailTemplate` untuk mengambil templat yang ada dengan memasukkan perintah berikut di baris perintah:

   ```
   aws sesv2 get-email-template --template-name MyTemplate
   ```

   Pada perintah sebelumnya, ganti *MyTemplate* dengan nama template yang ingin Anda perbarui.

   Jika nama template yang Anda berikan cocok dengan template yang ada di akun SES Anda, perintah ini mengembalikan respons yang menyerupai contoh berikut:

   ```
   {
       "Template": {
           "TemplateName": "TestMessage",
           "SubjectPart": "Amazon SES Test Message",
           "TextPart": "Hello! This is the text part of the message.",
           "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
       }
   }
   ```

1. Di editor teks, buat file baru. Tempel output dari perintah sebelumnya ke dalam file.

1. Ubah templat sesuai kebutuhan. Setiap baris yang Anda hilangkan akan dihapus dari templat. Misalnya, jika Anda hanya ingin mengubah `SubjectPart` dari templat, Anda masih perlu menyertakan properti `TextPart` dan `HtmlPart`.

   Setelah selesai, simpan file sebagai `update_template.json`.

1. Di baris perintah, masukkan perintah berikut:

   ```
   aws sesv2 update-email-template --cli-input-json file://path/to/update_template.json
   ```

   Pada perintah sebelumnya, ganti *path/to/update\$1template.json* dengan path ke `update_template.json` file yang Anda buat pada langkah sebelumnya.

   Jika templat berhasil diperbarui, perintah ini tidak menyediakan output apa pun. Anda dapat memverifikasi bahwa template telah diperbarui dengan menggunakan [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html)operasi.

   Jika templat yang Anda tentukan tidak ada, perintah ini mengembalikan kesalahan `TemplateDoesNotExist`. Jika templat tidak berisi properti `TextPart` atau `HtmlPart` (atau keduanya), perintah ini mengembalikan kesalahan `InvalidParameterValue`. 

# Mengirim email melalui Amazon SES menggunakan AWS SDK
<a name="send-an-email-using-sdk-programmatically"></a>

Anda dapat menggunakan AWS SDK untuk mengirim email melalui Amazon SES. AWS SDKs tersedia untuk beberapa bahasa pemrograman. Untuk informasi lebih lanjut, lihat [Alat untuk Amazon Web Services](https://aws.amazon.com/tools/#sdk).

## Prasyarat
<a name="send-an-email-using-sdk-programmatically-prereqs"></a>

Prasyarat berikut harus diselesaikan untuk menyelesaikan salah satu contoh kode di bagian berikutnya:
+ Jika Anda belum melakukannya, selesaikan tugas di [Menyiapkan Amazon Simple Email Service](setting-up.md).
+ **Verifikasi alamat email Anda dengan Amazon SES**—Sebelum Anda dapat mengirim email dengan Amazon SES, Anda harus memverifikasi bahwa Anda memiliki alamat email pengirim. Jika akun Anda masih di sandbox Amazon SES, Anda juga harus memverifikasi alamat email penerima. Sebaiknya gunakan konsol Amazon SES untuk memverifikasi alamat email. Untuk informasi selengkapnya, lihat [Membuat identitas alamat email](creating-identities.md#verify-email-addresses-procedure). 
+ **Dapatkan AWS kredensialmu** —Anda memerlukan ID kunci AWS akses dan kunci akses AWS rahasia untuk mengakses Amazon SES menggunakan SDK. Anda dapat menemukan kredensial Anda dengan menggunakan halaman [Kredensial Keamanan](https://console.aws.amazon.com/iam/home?#security_credential) di Konsol Manajemen AWS. Untuk informasi selengkapnya tentang kredensial, lihat [Tipe kredensial Amazon SES](send-email-concepts-credentials.md).
+ **Buat file kredensial bersama**—Agar kode sampel di bagian ini berfungsi dengan baik, Anda harus membuat file kredensial bersama. Untuk informasi lebih lanjut, lihat [Membuat file kredensi bersama untuk digunakan saat mengirim email melalui Amazon SES menggunakan SDK AWS](create-shared-credentials-file.md).

## Contoh kode
<a name="send-an-email-using-sdk-programmatically-examples"></a>

**penting**  
Dalam tutorial berikut, Anda mengirim email ke diri Anda sendiri sehingga Anda dapat memeriksa apakah Anda sudah menerimanya. Untuk eksperimen atau pengujian beban lebih lanjut, gunakan simulator kotak surat Amazon SES. Email yang Anda kirim ke simulator kotak surat tidak dihitung terhadap kuota pengiriman atau kecepatan pentalan dan aduan Anda. Untuk informasi lebih lanjut, lihat [Menggunakan simulator kotak surat secara manual](send-an-email-from-console.md#send-email-simulator).

**Topics**

------
#### [ .NET ]

Prosedur berikut menunjukkan cara mengirim email melalui Amazon SES menggunakan [Visual Studio](https://www.visualstudio.com/) dan AWS SDK untuk .NET.

Solusi ini diuji dengan menggunakan komponen berikut:
+ Microsoft Visual Studio Community 2017, versi 15.4.0.
+ Microsoft .NET Framework versi 4.6.1.
+  AWSSDKPaket.Core (versi 3.3.19), diinstal menggunakan. NuGet
+ Itu AWSSDK. SimpleEmail paket (versi 3.3.6.1), diinstal menggunakan. NuGet

**Sebelum Anda memulai, lakukan tugas berikut:**
+ **Instal Visual Studio** —Visual Studio tersedia di [https://www.visualstudio.com/](https://www.visualstudio.com/).

**Untuk mengirim email menggunakan AWS SDK untuk .NET**

1. Buat proyek baru dengan melakukan langkah-langkah berikut:

   1. Mulai Visual Studio.

   1. Di menu **File**, pilih **Baru**, **Proyek**.

   1. Di jendela **Proyek Baru**, di panel sebelah kiri, perluas **Terinstal**, lalu perluas **Visual C\$1**.

   1. Di panel sebelah kanan, pilih **Aplikasi Konsol (.NET Framework)**.

   1. Untuk **Nama**, ketik **AmazonSESSample**, lalu pilih **OK**.

1. Gunakan NuGet untuk menyertakan paket Amazon SES dalam solusi Anda dengan menyelesaikan langkah-langkah berikut:

   1. Di panel **Solution Explorer**, klik kanan project Anda, lalu pilih **Manage NuGet ** Packages.

   1. Pada SESSample tab **NuGet: Amazon**, pilih **Browse**.

   1. Di kotak pencarian, ketik **AWSSDK.SimpleEmail**. 

   1. Pilih **AWSSDK. SimpleEmail**paket, dan kemudian pilih **Install**.

   1. Di jendela **Pratinjau Perubahan**, pilih **OK**.

1. Di tab **Program.cs**, tempel kode berikut:

   ```
    1. using Amazon;
    2. using System;
    3. using System.Collections.Generic;
    4. using Amazon.SimpleEmail;
    5. using Amazon.SimpleEmail.Model;
    6. 
    7. namespace AmazonSESSample 
    8. {
    9.     class Program
   10.     {
   11.         // Replace sender@example.com with your "From" address.
   12.         // This address must be verified with Amazon SES.
   13.         static readonly string senderAddress = "sender@example.com";
   14. 
   15.         // Replace recipient@example.com with a "To" address. If your account
   16.         // is still in the sandbox, this address must be verified.
   17.         static readonly string receiverAddress = "recipient@example.com";
   18. 
   19.         // The configuration set to use for this email. If you do not want to use a
   20.         // configuration set, comment out the following property and the
   21.         // ConfigurationSetName = configSet argument below. 
   22.         static readonly string configSet = "ConfigSet";
   23. 
   24.         // The subject line for the email.
   25.         static readonly string subject = "Amazon SES test (AWS SDK untuk .NET)";
   26. 
   27.         // The email body for recipients with non-HTML email clients.
   28.         static readonly string textBody = "Amazon SES Test (.NET)\r\n" 
   29.                                         + "This email was sent through Amazon SES "
   30.                                         + "using the AWS SDK untuk .NET.";
   31.         
   32.         // The HTML body of the email.
   33.         static readonly string htmlBody = @"<html>
   34. <head></head>
   35. <body>
   36.   <h1>Amazon SES Test (SDK untuk .NET)</h1>
   37.   <p>This email was sent with
   38.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   39.     <a href='https://aws.amazon.com/sdk-for-net/'> AWS SDK untuk .NET</a>.</p>
   40. </body>
   41. </html>";
   42. 
   43.         static void Main(string[] args)
   44.         {
   45.             // Replace USWest2 with the AWS Region you're using for Amazon SES.
   46.             // Acceptable values are EUWest1, USEast1, and USWest2.
   47.             using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2))
   48.             {
   49.                 var sendRequest = new SendEmailRequest
   50.                 {
   51.                     Source = senderAddress,
   52.                     Destination = new Destination
   53.                     {
   54.                         ToAddresses =
   55.                         new List<string> { receiverAddress }
   56.                     },
   57.                     Message = new Message
   58.                     {
   59.                         Subject = new Content(subject),
   60.                         Body = new Body
   61.                         {
   62.                             Html = new Content
   63.                             {
   64.                                 Charset = "UTF-8",
   65.                                 Data = htmlBody
   66.                             },
   67.                             Text = new Content
   68.                             {
   69.                                 Charset = "UTF-8",
   70.                                 Data = textBody
   71.                             }
   72.                         }
   73.                     },
   74.                     // If you are not using a configuration set, comment
   75.                     // or remove the following line 
   76.                     ConfigurationSetName = configSet
   77.                 };
   78.                 try
   79.                 {
   80.                     Console.WriteLine("Sending email using Amazon SES...");
   81.                     var response = client.SendEmail(sendRequest);
   82.                     Console.WriteLine("The email was sent successfully.");
   83.                 }
   84.                 catch (Exception ex)
   85.                 {
   86.                     Console.WriteLine("The email was not sent.");
   87.                     Console.WriteLine("Error message: " + ex.Message);
   88. 
   89.                 }
   90.             }
   91. 
   92.             Console.Write("Press any key to continue...");
   93.             Console.ReadKey();
   94.         }
   95.     }
   96. }
   ```

1. Di editor kode, lakukan hal berikut:
   + Ganti *sender@example.com* dengan alamat email “Dari:”. Alamat ini harus diverifikasi. Untuk informasi selengkapnya, lihat [Identitas terverifikasi di Amazon SES](verify-addresses-and-domains.md).
   + Ganti *recipient@example.com* dengan alamat “Ke:”. Jika akun Anda masih berada di sandbox, alamat ini juga harus diverifikasi.
   + Ganti *ConfigSet* dengan nama konfigurasi yang akan digunakan saat mengirim email ini.
   + Ganti *USWest2* dengan nama Wilayah AWS titik akhir yang Anda gunakan untuk mengirim email menggunakan Amazon SES. Untuk daftar wilayah di mana Amazon SES tersedia, lihat [Layanan Email Sederhana Amazon (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

   Setelah selesai, simpan `Program.cs`.

1. Bangun dan jalankan aplikasi dengan menyelesaikan langkah berikut:

   1. Di menu **Bangun**, pilih **Bangun Solusi**.

   1. Di menu **Debug**, pilih **Mulai Debugging**. Jendela konsol muncul.

1. Tinjau output dari konsol tersebut. Jika email berhasil dikirim, konsol tersebut akan menampilkan "`The email was sent successfully.`" 

1. Jika email berhasil dikirim, masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------
#### [ Java ]

Prosedur berikut menunjukkan cara menggunakan [Eclipse IDE untuk Pengembang Java EE](http://www.eclipse.org/) dan [AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html)untuk membuat proyek AWS SDK dan memodifikasi kode Java untuk mengirim email melalui Amazon SES. 

**Sebelum Anda memulai, lakukan tugas berikut:**
+ **Instal Eclipse**—Eclipse tersedia di [https://www.eclipse.org/downloads](https://www.eclipse.org/downloads). Kode dalam tutorial ini diuji menggunakan Eclipse Neon.3 (versi 4.6.3), menjalankan Lingkungan Waktu Aktif Java versi 1.8.
+ **Instal AWS Toolkit for Eclipse—Instruksi** [untuk menambahkan instalasi Eclipse Anda tersedia di /eclipse. AWS Toolkit for Eclipse https://aws.amazon.com](https://aws.amazon.com/eclipse) Kode di tutorial ini diuji menggunakan AWS Toolkit for Eclipse versi 2.3.1.

**Untuk mengirim email menggunakan AWS SDK untuk Java**

1. Buat Proyek AWS Java di Eclipse dengan melakukan langkah-langkah berikut:

   1. Mulai Eclipse.

   1. Di menu **File**, pilih **Baru**, lalu pilih **Lainnya**. Di jendela **Baru**, perluas folder **AWS**, lalu pilih **Java Project AWS **..

   1. Di kotak dialog **New AWS Java Project**, lakukan hal berikut:

      1. Untuk **Nama proyek**, ketik nama proyek.

      1. Di bawah **AWS SDK untuk Java Sampel**, pilih ** JavaMail Sampel Layanan Email Sederhana Amazon**.

      1. Pilih **Selesai**.

1. Di Eclipse, di panel **Penjelajah Paket**, perluas proyek Anda.

1. Di bawah proyek Anda, perluas folder `src/main/java`, perluas folder `com.amazon.aws.samples`, lalu klik dua kali `AmazonSESSample.java`.

1. Ganti seluruh konten `AmazonSESSample.java` dengan kode berikut:

   ```
    1. package com.amazonaws.samples;
    2. 
    3. import java.io.IOException;
    4. 
    5. import com.amazonaws.regions.Regions;
    6. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
    7. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
    8. import com.amazonaws.services.simpleemail.model.Body;
    9. import com.amazonaws.services.simpleemail.model.Content;
   10. import com.amazonaws.services.simpleemail.model.Destination;
   11. import com.amazonaws.services.simpleemail.model.Message;
   12. import com.amazonaws.services.simpleemail.model.SendEmailRequest; 
   13. 
   14. public class AmazonSESSample {
   15. 
   16.   // Replace sender@example.com with your "From" address.
   17.   // This address must be verified with Amazon SES.
   18.   static final String FROM = "sender@example.com";
   19. 
   20.   // Replace recipient@example.com with a "To" address. If your account
   21.   // is still in the sandbox, this address must be verified.
   22.   static final String TO = "recipient@example.com";
   23. 
   24.   // The configuration set to use for this email. If you do not want to use a
   25.   // configuration set, comment the following variable and the 
   26.   // .withConfigurationSetName(CONFIGSET); argument below.
   27.   static final String CONFIGSET = "ConfigSet";
   28. 
   29.   // The subject line for the email.
   30.   static final String SUBJECT = "Amazon SES test (AWS SDK untuk Java)";
   31.   
   32.   // The HTML body for the email.
   33.   static final String HTMLBODY = "<h1>Amazon SES test (AWS SDK untuk Java)</h1>"
   34.       + "<p>This email was sent with <a href='https://aws.amazon.com/ses/'>"
   35.       + "Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-java/'>" 
   36.       + "AWS SDK for Java</a>";
   37. 
   38.   // The email body for recipients with non-HTML email clients.
   39.   static final String TEXTBODY = "This email was sent through Amazon SES "
   40.       + "using the AWS SDK untuk Java.";
   41. 
   42.   public static void main(String[] args) throws IOException {
   43. 
   44.     try {
   45.       AmazonSimpleEmailService client = 
   46.           AmazonSimpleEmailServiceClientBuilder.standard()
   47.           // Replace US_WEST_2 with the AWS Region you're using for
   48.           // Amazon SES.
   49.             .withRegion(Regions.US_WEST_2).build();
   50.       SendEmailRequest request = new SendEmailRequest()
   51.           .withDestination(
   52.               new Destination().withToAddresses(TO))
   53.           .withMessage(new Message()
   54.               .withBody(new Body()
   55.                   .withHtml(new Content()
   56.                       .withCharset("UTF-8").withData(HTMLBODY))
   57.                   .withText(new Content()
   58.                       .withCharset("UTF-8").withData(TEXTBODY)))
   59.               .withSubject(new Content()
   60.                   .withCharset("UTF-8").withData(SUBJECT)))
   61.           .withSource(FROM)
   62.           // Comment or remove the next line if you are not using a
   63.           // configuration set
   64.           .withConfigurationSetName(CONFIGSET);
   65.       client.sendEmail(request);
   66.       System.out.println("Email sent!");
   67.     } catch (Exception ex) {
   68.       System.out.println("The email was not sent. Error message: " 
   69.           + ex.getMessage());
   70.     }
   71.   }
   72. }
   ```

1. Di `AmazonSESSample.java`, ganti berikut dengan nilai-nilai Anda sendiri:
**penting**  
Alamat email peka huruf besar kecil. Pastikan alamatnya sama persis dengan alamat yang Anda verifikasi.
   + `SENDER@EXAMPLE.COM`—Ganti dengan alamat email "Dari" Anda. Alamat ini harus diverifikasi sebelum Anda menjalankan program ini. Untuk informasi lebih lanjut, lihat [Identitas terverifikasi di Amazon SES](verify-addresses-and-domains.md).
   + `RECIPIENT@EXAMPLE.COM`—Ganti dengan alamat email "Kepada" Anda. Jika akun Anda masih berada di sandbox, Anda harus memverifikasi alamat ini sebelum menggunakannya. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md).
   + **(Opsional)`us-west-2`**—Jika Anda ingin menggunakan Amazon SES di Wilayah selain US West (Oregon), ganti ini dengan Wilayah yang ingin Anda gunakan. Untuk daftar Wilayah di mana Amazon SES tersedia, lihat [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

1. Simpan `AmazonSESSample.java`.

1. Untuk membangun proyek, pilih **Proyek** lalu pilih **Bangun Proyek**.
**catatan**  
Jika opsi ini dinonaktifkan, pembangunan otomatis dapat diaktifkan; jika demikian, lewati langkah ini.

1. Untuk memulai program dan mengirim email, pilih **Jalankan** lalu pilih **Jalankan** lagi.

1. Tinjau output dari panel konsol tersebut di Eclipse. Jika email berhasil dikirim, konsol tersebut akan menampilkan "`Email sent!`", Jika tidak, pesan kesalahan akan ditampilkan.

1. Jika email berhasil dikirim, masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------
#### [ PHP ]

Topik ini menunjukkan cara menggunakan [AWS SDK untuk PHP](https://aws.amazon.com/sdk-for-php/) untuk mengirim email melalui Amazon SES. 

**Sebelum Anda memulai, lakukan tugas berikut:**
+ **Instal PHP**—PHP tersedia di [http://php.net/downloads.php](http://php.net/downloads.php). Tutorial ini membutuhkan PHP versi 5.5 atau lebih tinggi. Setelah Anda memasang PHP, tambahkan jalur ke PHP di variabel lingkungan Anda, sehingga Anda dapat menjalankan PHP dari prompt perintah. Kode dalam tutorial ini diuji menggunakan PHP 7.2.7.
+ **Instal AWS SDK untuk PHP versi 3** —Untuk petunjuk unduhan dan penginstalan, lihat [AWS SDK untuk PHP dokumentasi](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html). Kode di tutorial ini diuji menggunakan SDK versi 3.64.13. 

**Untuk mengirim email melalui Amazon SES menggunakan AWS SDK untuk PHP**

1. Di editor teks, buat file bernama `amazon-ses-sample.php`. Tempel kode berikut:

   ```
    1. <?php
    2. 
    3. // If necessary, modify the path in the require statement below to refer to the 
    4. // location of your Composer autoload.php file.
    5. require 'vendor/autoload.php';
    6. 
    7. use Aws\Ses\SesClient;
    8. use Aws\Exception\AwsException;
    9. 
   10. // Create an SesClient. Change the value of the region parameter if you're 
   11. // using an AWS Region other than US West (Oregon). Change the value of the
   12. // profile parameter if you want to use a profile in your credentials file
   13. // other than the default.
   14. $SesClient = new SesClient([
   15.     'profile' => 'default',
   16.     'version' => '2010-12-01',
   17.     'region'  => 'us-west-2'
   18. ]);
   19. 
   20. // Replace sender@example.com with your "From" address.
   21. // This address must be verified with Amazon SES.
   22. $sender_email = 'sender@example.com';
   23. 
   24. // Replace these sample addresses with the addresses of your recipients. If
   25. // your account is still in the sandbox, these addresses must be verified.
   26. $recipient_emails = ['recipient1@example.com','recipient2@example.com'];
   27. 
   28. // Specify a configuration set. If you do not want to use a configuration
   29. // set, comment the following variable, and the
   30. // 'ConfigurationSetName' => $configuration_set argument below.
   31. $configuration_set = 'ConfigSet';
   32. 
   33. $subject = 'Amazon SES test (AWS SDK untuk PHP)';
   34. $plaintext_body = 'This email was sent with Amazon SES using the AWS SDK for PHP.' ;
   35. $html_body =  '<h1>AWS Amazon Simple Email Service Test Email</h1>'.
   36.               '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
   37.               'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
   38.               'AWS SDK untuk PHP</a>.</p>';
   39. $char_set = 'UTF-8';
   40. 
   41. try {
   42.     $result = $SesClient->sendEmail([
   43.         'Destination' => [
   44.             'ToAddresses' => $recipient_emails,
   45.         ],
   46.         'ReplyToAddresses' => [$sender_email],
   47.         'Source' => $sender_email,
   48.         'Message' => [
   49.           'Body' => [
   50.               'Html' => [
   51.                   'Charset' => $char_set,
   52.                   'Data' => $html_body,
   53.               ],
   54.               'Text' => [
   55.                   'Charset' => $char_set,
   56.                   'Data' => $plaintext_body,
   57.               ],
   58.           ],
   59.           'Subject' => [
   60.               'Charset' => $char_set,
   61.               'Data' => $subject,
   62.           ],
   63.         ],
   64.         // If you aren't using a configuration set, comment or delete the
   65.         // following line
   66.         'ConfigurationSetName' => $configuration_set,
   67.     ]);
   68.     $messageId = $result['MessageId'];
   69.     echo("Email sent! Message ID: $messageId"."\n");
   70. } catch (AwsException $e) {
   71.     // output error message if fails
   72.     echo $e->getMessage();
   73.     echo("The email was not sent. Error message: ".$e->getAwsErrorMessage()."\n");
   74.     echo "\n";
   75. }
   ```

1. Di `amazon-ses-sample.php`, ganti berikut dengan nilai-nilai Anda sendiri:
   + **`path_to_sdk_inclusion`**—Ganti dengan jalur yang diperlukan untuk memasukkan AWS SDK untuk PHP dalam program. Untuk informasi lebih lanjut, lihat [dokumentasi AWS SDK untuk PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html). 
   + **`sender@example.com`**—Ganti dengan alamat email yang telah Anda verifikasi dengan Amazon SES. Untuk informasi lebih lanjut, lihat [Identitas terverifikasi](verify-addresses-and-domains.md). Alamat email di Amazon SES peka huruf besar kecil. Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **`recipient1@example.com`,`recipient2@example.com`**—Ganti dengan alamat penerima Anda. Jika akun Anda masih berada di sandbox, alamat penerima Anda juga harus diverifikasi. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **`ConfigSet` (Opsional)**—Jika Anda ingin menggunakan set konfigurasi saat mengirim email ini, ganti nilai dengan nama set konfigurasi. Untuk informasi selengkapnya tentang set konfigurasi, lihat [Mengelola set konfigurasi di Amazon SES](using-configuration-sets.md).
   + **(Opsional)`us-west-2`**—Jika Anda ingin menggunakan Amazon SES di Wilayah selain US West (Oregon), ganti ini dengan Wilayah yang ingin Anda gunakan. Untuk daftar Wilayah di mana Amazon SES tersedia, lihat [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

1. Simpan `amazon-ses-sample.php`.

1. Untuk menjalankan program, buka prompt perintah di direktori yang sama seperti `amazon-ses-sample.php`, lalu ketik perintah berikut:

   ```
   $ php amazon-ses-sample.php
   ```

1. Tinjau output. Jika email berhasil dikirim, konsol tersebut akan menampilkan "`Email sent!`", Jika tidak, pesan kesalahan akan ditampilkan.
**catatan**  
Jika Anda mengalami kesalahan "cURL error 60: masalah Sertifikat SSL" ketika Anda menjalankan program, unduh paket CA terbaru seperti yang dijelaskan di [dokumentasi AWS SDK untuk PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/faq.html#what-do-i-do-about-a-curl-ssl-certificate-error). Kemudian, di `amazon-ses-sample.php`, tambahkan baris berikut ini ke array `SesClient::factory`, ganti `path_of_certs` dengan jalur ke paket CA yang Anda unduh, lalu kembali jalankan program.  

   ```
   1. 'http' => [
   2.    'verify' => 'path_of_certs\ca-bundle.crt'
   3. ]
   ```

1. Masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------
#### [ Ruby ]

Topik ini menunjukkan cara menggunakan [AWS SDK untuk Ruby](https://aws.amazon.com/sdk-for-ruby/) untuk mengirim email melalui Amazon SES. 

**Sebelum Anda memulai, lakukan tugas berikut:**
+ **Instal Ruby** [—Ruby tersedia di https://www.ruby-lang. org/en/downloads](https://www.ruby-lang.org/en/downloads/)/. Kode di tutorial ini diuji menggunakan Ruby 1.9.3. Setelah Anda meginstal Ruby, tambahkan jalur ke Ruby di variabel lingkungan Anda, sehingga Anda dapat menjalankan Ruby dari prompt perintah.
+ **Instal AWS SDK untuk Ruby** —Untuk petunjuk pengunduhan dan penginstalan, lihat [Menginstal AWS SDK untuk Ruby di](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/setup-install.html) *Panduan AWS SDK untuk Ruby Pengembang*. Kode sampel di tutorial ini diuji menggunakan AWS SDK untuk Ruby versi 2.9.36.
+ **Buat file kredensial bersama**—Agar kode sampel di bagian ini berfungsi dengan baik, Anda harus membuat file kredensial bersama. Untuk informasi selengkapnya, lihat [Membuat file kredensi bersama untuk digunakan saat mengirim email melalui Amazon SES menggunakan SDK AWS](create-shared-credentials-file.md).

**Untuk mengirim email melalui Amazon SES menggunakan AWS SDK untuk Ruby**

1. Di editor teks, buat file bernama `amazon-ses-sample.rb`. Tempel kode berikut ke file:

   ```
    1. require 'aws-sdk'
    2. 
    3. # Replace sender@example.com with your "From" address.
    4. # This address must be verified with Amazon SES.
    5. sender = "sender@example.com"
    6. 
    7. # Replace recipient@example.com with a "To" address. If your account 
    8. # is still in the sandbox, this address must be verified.
    9. recipient = "recipient@example.com"
   10. 
   11. # Specify a configuration set. If you do not want to use a configuration
   12. # set, comment the following variable and the 
   13. # configuration_set_name: configsetname argument below. 
   14. configsetname = "ConfigSet"
   15.   
   16. # Replace us-west-2 with the AWS Region you're using for Amazon SES.
   17. awsregion = "us-west-2"
   18. 
   19. # The subject line for the email.
   20. subject = "Amazon SES test (AWS SDK untuk Ruby)"
   21. 
   22. # The HTML body of the email.
   23. htmlbody =
   24.   '<h1>Amazon SES test (AWS SDK untuk Ruby)</h1>'\
   25.   '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'\
   26.   'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-ruby/">'\
   27.   'AWS SDK untuk Ruby</a>.'
   28. 
   29. # The email body for recipients with non-HTML email clients.  
   30. textbody = "This email was sent with Amazon SES using the AWS SDK untuk Ruby."
   31. 
   32. # Specify the text encoding scheme.
   33. encoding = "UTF-8"
   34. 
   35. # Create a new SES resource and specify a region
   36. ses = Aws::SES::Client.new(region: awsregion)
   37. 
   38. # Try to send the email.
   39. begin
   40. 
   41.   # Provide the contents of the email.
   42.   resp = ses.send_email({
   43.     destination: {
   44.       to_addresses: [
   45.         recipient,
   46.       ],
   47.     },
   48.     message: {
   49.       body: {
   50.         html: {
   51.           charset: encoding,
   52.           data: htmlbody,
   53.         },
   54.         text: {
   55.           charset: encoding,
   56.           data: textbody,
   57.         },
   58.       },
   59.       subject: {
   60.         charset: encoding,
   61.         data: subject,
   62.       },
   63.     },
   64.   source: sender,
   65.   # Comment or remove the following line if you are not using 
   66.   # a configuration set
   67.   configuration_set_name: configsetname,
   68.   })
   69.   puts "Email sent!"
   70. 
   71. # If something goes wrong, display an error message.
   72. rescue Aws::SES::Errors::ServiceError => error
   73.   puts "Email not sent. Error message: #{error}"
   74. 
   75. end
   ```

1. Di `amazon-ses-sample.rb`, ganti berikut dengan nilai-nilai Anda sendiri:
   + **`sender@example.com`**—Ganti dengan alamat email yang telah Anda verifikasi dengan Amazon SES. Untuk informasi lebih lanjut, lihat [Identitas terverifikasi](verify-addresses-and-domains.md). Alamat email di Amazon SES peka huruf besar kecil. Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **`recipient@example.com`**—Ganti dengan alamat penerima. Jika akun Anda masih berada di sandbox, Anda harus memverifikasi alamat ini sebelum menggunakannya. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **(Opsional)`us-west-2`**—Jika Anda ingin menggunakan Amazon SES di Wilayah selain US West (Oregon), ganti ini dengan Wilayah yang ingin Anda gunakan. Untuk daftar Wilayah di mana Amazon SES tersedia, lihat [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

1. Simpan `amazon-ses-sample.rb`.

1. Untuk menjalankan program, buka prompt perintah di direktori yang sama seperti `amazon-ses-sample.rb`, dan ketik **ruby amazon-ses-sample.rb**

1. Tinjau output. Jika email berhasil dikirim, konsol tersebut akan menampilkan "`Email sent!`", Jika tidak, pesan kesalahan akan ditampilkan.

1. Masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------
#### [ Python ]

Topik ini menunjukkan cara menggunakan [AWS SDK for Python (Boto)](https://aws.amazon.com/sdk-for-python/) untuk mengirim email melalui Amazon SES. 

**Sebelum Anda memulai, lakukan tugas berikut:**
+ **Verifikasi alamat email Anda dengan Amazon SES**—Sebelum Anda dapat mengirim email dengan Amazon SES, Anda harus memverifikasi bahwa Anda memiliki alamat email pengirim. Jika akun Anda masih di sandbox Amazon SES, Anda juga harus memverifikasi alamat email penerima. Sebaiknya gunakan konsol Amazon SES untuk memverifikasi alamat email. Untuk informasi selengkapnya, lihat [Membuat identitas alamat email](creating-identities.md#verify-email-addresses-procedure). 
+ **Dapatkan AWS kredensialmu** —Anda memerlukan ID kunci AWS akses dan kunci akses AWS rahasia untuk mengakses Amazon SES menggunakan SDK. Anda dapat menemukan kredensial Anda dengan menggunakan halaman Konsol Manajemen AWS[Kredensial Keamanan](https://console.aws.amazon.com/iam/home?#security_credential). Untuk informasi selengkapnya tentang jenis kredensial, lihat [Tipe kredensial Amazon SES](send-email-concepts-credentials.md).
+ **Instal Python —Python tersedia** [di thon.org/downloads/. https://www.py](https://www.python.org/downloads/) Kode di tutorial ini diuji menggunakan Python 2.7.6 dan Python 3.6.1. Setelah Anda menginstal Phyton, tambahkan jalur ke Phyton di variabel lingkungan Anda, sehingga Anda dapat menjalankan Phyton dari prompt perintah.
+ **Instal AWS SDK for Python (Boto)** —Untuk petunjuk unduhan dan penginstalan, lihat [AWS SDK for Python (Boto) dokumentasi](https://boto3.readthedocs.io/en/latest/guide/quickstart.html#installation). Kode sampel di tutorial ini diuji menggunakan SDK for Python versi 1.4.4.

**Untuk mengirim email melalui Amazon SES menggunakan SDK for Python**

1. Di editor teks, buat file bernama `amazon-ses-sample.py`. Tempel kode berikut ke file:

   ```
    1. import boto3
    2. from botocore.exceptions import ClientError
    3. 
    4. # Replace sender@example.com with your "From" address.
    5. # This address must be verified with Amazon SES.
    6. SENDER = "Sender Name <sender@example.com>"
    7. 
    8. # Replace recipient@example.com with a "To" address. If your account 
    9. # is still in the sandbox, this address must be verified.
   10. RECIPIENT = "recipient@example.com"
   11. 
   12. # Specify a configuration set. If you do not want to use a configuration
   13. # set, comment the following variable, and the 
   14. # ConfigurationSetName=CONFIGURATION_SET argument below.
   15. CONFIGURATION_SET = "ConfigSet"
   16. 
   17. # If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES.
   18. AWS_REGION = "us-west-2"
   19. 
   20. # The subject line for the email.
   21. SUBJECT = "Amazon SES Test (SDK for Python)"
   22. 
   23. # The email body for recipients with non-HTML email clients.
   24. BODY_TEXT = ("Amazon SES Test (Python)\r\n"
   25.              "This email was sent with Amazon SES using the "
   26.              "AWS SDK for Python (Boto)."
   27.             )
   28.             
   29. # The HTML body of the email.
   30. BODY_HTML = """<html>
   31. <head></head>
   32. <body>
   33.   <h1>Amazon SES Test (SDK for Python)</h1>
   34.   <p>This email was sent with
   35.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   36.     <a href='https://aws.amazon.com/sdk-for-python/'> AWS SDK for Python (Boto)</a>.</p>
   37. </body>
   38. </html>
   39.             """            
   40. 
   41. # The character encoding for the email.
   42. CHARSET = "UTF-8"
   43. 
   44. # Create a new SES resource and specify a region.
   45. client = boto3.client('ses',region_name=AWS_REGION)
   46. 
   47. # Try to send the email.
   48. try:
   49.     #Provide the contents of the email.
   50.     response = client.send_email(
   51.         Destination={
   52.             'ToAddresses': [
   53.                 RECIPIENT,
   54.             ],
   55.         },
   56.         Message={
   57.             'Body': {
   58.                 'Html': {
   59.                     'Charset': CHARSET,
   60.                     'Data': BODY_HTML,
   61.                 },
   62.                 'Text': {
   63.                     'Charset': CHARSET,
   64.                     'Data': BODY_TEXT,
   65.                 },
   66.             },
   67.             'Subject': {
   68.                 'Charset': CHARSET,
   69.                 'Data': SUBJECT,
   70.             },
   71.         },
   72.         Source=SENDER,
   73.         # If you are not using a configuration set, comment or delete the
   74.         # following line
   75.         ConfigurationSetName=CONFIGURATION_SET,
   76.     )
   77. # Display an error if something goes wrong.	
   78. except ClientError as e:
   79.     print(e.response['Error']['Message'])
   80. else:
   81.     print("Email sent! Message ID:"),
   82.     print(response['MessageId'])
   ```

1. Di `amazon-ses-sample.py`, ganti berikut dengan nilai-nilai Anda sendiri:
   + **`sender@example.com`**—Ganti dengan alamat email yang telah Anda verifikasi dengan Amazon SES. Untuk informasi lebih lanjut, lihat [Identitas terverifikasi](verify-addresses-and-domains.md). Alamat email di Amazon SES peka huruf besar kecil. Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **`recipient@example.com`**—Ganti dengan alamat penerima. Jika akun Anda masih berada di sandbox, Anda harus memverifikasi alamat ini sebelum menggunakannya. Untuk informasi lebih lanjut, lihat [Minta akses produksi (Pindah dari kotak pasir Amazon SES)](request-production-access.md). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.
   + **(Opsional)`us-west-2`**—Jika Anda ingin menggunakan Amazon SES di Wilayah selain US West (Oregon), ganti ini dengan Wilayah yang ingin Anda gunakan. Untuk daftar Wilayah di mana Amazon SES tersedia, lihat [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) di *Referensi Umum AWS*.

1. Simpan `amazon-ses-sample.py`.

1. Untuk menjalankan program, buka prompt perintah di direktori yang sama seperti `amazon-ses-sample.py`, lalu ketik **python amazon-ses-sample.py**.

1. Tinjau output. Jika email berhasil dikirim, konsol tersebut akan menampilkan "`Email sent!`", Jika tidak, pesan kesalahan akan ditampilkan.

1. Masuk ke klien email alamat penerima. Anda akan menemukan pesan yang Anda kirim.

------

# Membuat file kredensi bersama untuk digunakan saat mengirim email melalui Amazon SES menggunakan SDK AWS
<a name="create-shared-credentials-file"></a>

Prosedur berikut ini menunjukkan cara membuat file kredensial bersama di direktori beranda Anda. Agar kode sampel SDK berfungsi dengan baik, Anda harus membuat file ini.

1. Di editor teks, buat file baru. Di file, tempel kode berikut:

   ```
   1. [default]
   2. aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
   3. aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
   ```

1. Dalam file teks yang baru saja Anda buat, ganti `YOUR_AWS_ACCESS_KEY` dengan ID kunci AWS akses unik Anda, dan ganti `YOUR_AWS_SECRET_ACCESS_KEY` dengan kunci akses AWS rahasia unik Anda.

1. Simpan file tersebut. Tabel berikut menunjukkan lokasi dan nama file yang benar untuk sistem operasi Anda.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ses/latest/dg/create-shared-credentials-file.html)
**penting**  
Jangan sertakan ekstensi file saat menyimpan file kredensial.

# Pengkodean konten yang didukung oleh Amazon SES
<a name="content-encodings"></a>

Berikut ini disediakan untuk referensi.

Amazon SES mendukung pengkodean konten berikut:
+ `deflate`
+ `gzip`
+ `identity`

Amazon SES juga mendukung format header Accept-Encoding berikut, sesuai dengan spesifikasi [RFC](https://tools.ietf.org/html/rfc7231#section-5.3.4) 7231:
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Amazon SES dan protokol keamanan
<a name="security-protocols"></a>

Topik ini menjelaskan protokol keamanan yang dapat Anda gunakan ketika Anda terhubung ke Amazon SES, serta ketika Amazon SES mengirim email ke penerima.

## Pengirim email ke Amazon SES
<a name="security-client-to-ses"></a>

Protokol keamanan yang Anda gunakan untuk terhubung ke Amazon SES bergantung pada apakah Anda menggunakan API Amazon SES atau antarmuka SMTP Amazon SES, seperti yang dijelaskan berikutnya.

### HTTPS
<a name="security-client-to-ses-api"></a>

Jika Anda menggunakan Amazon SES API (baik secara langsung atau melalui AWS SDK), maka semua komunikasi dienkripsi oleh TLS melalui titik akhir Amazon SES HTTPS. Titik akhir Amazon SES HTTPS mendukung TLS 1.2 dan TLS 1.3.

### Antarmuka SMTP
<a name="security-client-to-ses-smtp"></a>

Jika Anda mengakses Amazon SES melalui antarmuka SMTP, Anda diminta untuk mengenkripsi koneksi Anda menggunakan Keamanan Lapisan Pengangkutan (TLS). Perhatikan bahwa TLS sering disebut dengan nama protokol pendahulunya, Lapisan Soket Aman (SSL).

Amazon SES mendukung dua mekanisme untuk membangun koneksi yang terenkripsi TLS: STARTTLS dan TLS Wrapper.
+ **STARTTLS**—STARTTLS adalah sarana untuk meningkatkan koneksi tidak terenkripsi ke koneksi terenkripsi. Ada beberapa Versi STARTTLS untuk berbagai protokol; versi SMTP ditentunkan di [RFC 3207](https://www.ietf.org/rfc/rfc3207.txt). Untuk koneksi STARTTLS, Amazon SES mendukung TLS 1.2 dan TLS 1.3.
+ **Wrapper TLS**—Wrapper TLS (juga dikenal sebagai SMTPS atau Protokol Handshake) adalah sarana untuk memulai koneksi terenkripsi tanpa terlebih dahulu membuat koneksi yang tidak terenkripsi. Dengan Wrapper TLS, titik akhir SMTP Amazon SES tidak melakukan negosiasi TLS: Klien bertanggung jawab untuk terhubung ke titik akhir menggunakan TLS, dan terus menggunakan TLS untuk seluruh percakapan. Wrapper TLS adalah protokol yang lebih tua, namun masih didukung oleh banyak klien. Untuk koneksi TLS Wrapper, Amazon SES mendukung TLS 1.2 dan TLS 1.3.

Untuk informasi tentang menghubungkan ke antarmuka SMTP Amazon SES menggunakan metode ini, lihat [Menghubungkan ke titik akhir SMTP Amazon SES](smtp-connect.md).

## Amazon SES untuk Penerima
<a name="security-ses-to-receiver"></a>

 Sementara TLS 1.3 adalah metode pengiriman default kami, SES dapat mengirimkan email ke server email menggunakan versi TLS sebelumnya. 

Secara default, Amazon SES menggunakan *TLS oportunistik*. TLS oportunistik di SES selalu menggunakan STARTTLS dan tidak termasuk TLS Wrapper. Alur melibatkan pembuatan koneksi plaintext awal, diikuti dengan upgrade ke sesi terenkripsi TLS jika klien dan server mendukung STARTTLS. Jika SES tidak dapat membuat koneksi yang aman, itu akan mengirimkan pesan yang tidak terenkripsi.

Anda dapat mengubah perilaku ini dengan menggunakan set konfigurasi. Gunakan operasi [PutConfigurationSetDeliveryOptions](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutConfigurationSetDeliveryOptions.html)API untuk menyetel `TlsPolicy` properti untuk konfigurasi yang disetel`Require`. Anda dapat menggunakan [AWS CLI](https://aws.amazon.com/cli) untuk membuat perubahan ini.

**Untuk mengonfigurasi Amazon SES agar memerlukan koneksi TLS untuk satu set konfigurasi**
+ Di baris perintah, masukkan perintah berikut:

  ```
  aws sesv2 put-configuration-set-delivery-options --configuration-set-name MyConfigurationSet --tls-policy REQUIRE
  ```

  Pada contoh sebelumnya, ganti *MyConfigurationSet* dengan nama set konfigurasi Anda.

  Ketika Anda mengirim email menggunakan set konfigurasi ini, Amazon SES hanya mengirimkan pesan ke server email penerima jika dapat membuat koneksi yang aman. Jika Amazon SES tidak dapat membuat koneksi aman ke server email penerima, maka pesan akan dihapus.

## End-to-end enkripsi
<a name="security-end-to-end"></a>

Anda dapat menggunakan Amazon SES untuk mengirim pesan yang dienkripsi menggunakan S/MIME atau PGP. Pesan yang menggunakan protokol ini dienkripsi oleh pengirim. Konten mereka hanya dapat dilihat oleh penerima yang memiliki kunci pribadi yang diperlukan untuk mendekripsi pesan.

Amazon SES mendukung jenis MIME berikut, yang dapat Anda gunakan untuk mengirim email S/MIME terenkripsi:
+ `application/pkcs7-mime`
+ `application/pkcs7-signature`
+ `application/x-pkcs7-mime`
+ `application/x-pkcs7-signature`

Amazon SES juga mendukung tipe MIME berikut, yang dapat Anda gunakan untuk mengirim email yang dienkripsi PGP:
+ `application/pgp-encrypted`
+ `application/pgp-keys`
+ `application/pgp-signature`

# Bidang header Amazon SES
<a name="header-fields"></a>

Amazon SES dapat menerima semua header email yang mengikuti format yang dijelaskan dalam [RFC 822](https://www.rfc-editor.org/rfc/rfc822.html).

Bidang berikut tidak dapat muncul lebih dari sekali di bagian header pesan:
+ `Accept-Language`
+ `acceptLanguage`
+ `Archived-At`
+ `Auto-Submitted`
+ `Bounces-to`
+ `Comments`
+ `Content-Alternative`
+ `Content-Base`
+ `Content-Class`
+ `Content-Description`
+ `Content-Disposition`
+ `Content-Duration`
+ `Content-ID`
+ `Content-Language`
+ `Content-Length`
+ `Content-Location`
+ `Content-MD5`
+ `Content-Transfer-Encoding`
+ `Content-Type`
+ `Date`
+ `Delivered-To `
+ `Disposition-Notification-Options`
+ `Disposition-Notification-To`
+ `DKIM-Signature`
+ `DomainKey-Signature`
+ `Errors-To`
+ `From`
+ `Importance`
+ `In-Reply-To`
+ `Keywords`
+ `List-Archive`
+ `List-Help`
+ `List-Id`
+ `List-Owner`
+ `List-Post`
+ `List-Subscribe`
+ `List-Unsubscribe`
+ `List-Unsubscribe-Post`
+ `Message-Context`
+ `Message-ID`
+ `MIME-Version`
+ `Organization`
+ `Original-From`
+ `Original-Message-ID`
+ `Original-Recipient`
+ `Original-Subject`
+ `Precedence`
+ `Priority`
+ `References`
+ `Reply-To`
+ `Return-Path`
+ `Return-Receipt-To`
+ `Sender`
+ `Solicitation`
+ `Sensitivity`
+ `Subject`
+ `Thread-Index`
+ `Thread-Topic`
+ `User-Agent`
+ `VBR-Info`

**Pertimbangan-pertimbangan**
+ Bidang `acceptLanguage` ini tidak standar. Jika memungkinkan, Anda sebaiknya menggunakan header `Accept-Language` sebagai gantinya.
+ Jika Anda menentukan header `Date`, Amazon SES menggantinya dengan stempel waktu yang sesuai dengan tanggal dan waktu di zona waktu UTC ketika Amazon SES menerima pesan.
+ Jika Anda memberikan header `Message-ID`, Amazon SES mengganti header dengan nilainya sendiri.
+ Jika Anda menentukan header `Return-Path`, Amazon SES mengirimkan notifikasi pentalan dan aduan ke alamat yang Anda tentukan. Namun, pesan yang diterima penerima Anda berisi nilai yang berbeda pada header `Return-Path`.
+ Jika Anda menggunakan `SendEmail` operasi Amazon SES API v2 dengan konten *Sederhana* atau *Templated*, atau menggunakan `SendBulkEmail` operasi, Anda tidak dapat menyetel konten header khusus untuk header yang disetel oleh SES; oleh karena itu, header berikut tidak diizinkan sebagai header khusus:
  + `BCC`, `CC`, `Content-Disposition`, `Content-Type`, `Date`, `From`, `Message-ID`, `MIME-Version`, `Reply-To`, `Return-Path`, `Subject`, `To`

# Bekerja dengan lampiran email di SES
<a name="attachments"></a>

Lampiran email di SES adalah file yang dapat Anda sertakan dengan pesan email Anda saat menggunakan SES API v2 `SendEmail` dan `SendBulkEmail` operasi. Fitur ini memungkinkan Anda untuk memperkaya konten email Anda dengan menyertakan dokumen seperti PDFs, file Word, gambar, atau jenis file lain yang sesuai dengan jenis MIME yang didukung SES. Anda juga dapat menyertakan gambar sebaris yang dirender langsung dalam konten email tanpa mengharuskan penerima untuk mengunduhnya secara terpisah. Anda dapat menyertakan beberapa lampiran per email, hingga batas ukuran pesan total 40MB.

**catatan**  
[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)SES API v2 dengan tipe `Raw` konten, antarmuka SMTP, dan SES API v1 terus menangani lampiran melalui konstruksi pesan MIME [email mentah](send-email-raw.md#send-email-raw-mime).

## Cara kerja lampiran di SES
<a name="how-attachments-work"></a>

Ada dua jenis pengkodean yang terjadi pada tahap yang berbeda saat mengirim email dengan lampiran:

Tahap 1 - Mengirim data ke SES:
+ Ketika Anda ingin mengirim lampiran ke SES, data biner (seperti PDF atau gambar) perlu diubah menjadi format yang dapat ditransmisikan dengan aman.
+ Di sinilah base64-encoding masuk — ini diperlukan karena Anda tidak dapat mengirim data biner mentah dalam permintaan JSON.
+ Jika Anda menggunakan AWS SDK, SDK menangani pengkodean ini secara otomatis.
+ Jika Anda menggunakan AWS CLI, Anda perlu mengkodekan lampiran base64-sendiri sebelum mengirimnya.

Tahap 2 - SES membuat email:
+ Setelah SES menerima data Anda, perlu membuat email yang sebenarnya dengan lampiran.
+ Di sinilah [ContentTransferEncoding](#attachment-structure)pengaturan ikut bermain.
+ SES akan menggunakan metode pengkodean apa pun yang Anda tentukan ContentTransferEncoding untuk secara otomatis memformat lampiran di email akhir.

Anggap saja seperti ini — ini mirip dengan mengirim paket melalui surat. Pertama, Anda perlu membawa paket ke kantor pos (Tahap 1 - Base64-encoding diperlukan), maka kantor pos akan mengemasnya dengan tepat untuk pengiriman akhir (Tahap 2 -). ContentTransferEncoding

## Struktur objek lampiran
<a name="attachment-structure"></a>

Saat Anda mengirim email dengan lampiran melalui SES, layanan menangani konstruksi pesan MIME yang kompleks secara otomatis. Anda hanya perlu menyediakan konten lampiran dan metadata melalui struktur [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html)objek SES API v2 berikut:
+ `FileName`(Wajib) - Nama file yang ditampilkan kepada penerima (harus menyertakan ekstensi file). Jika tidak disediakan, SES akan memperoleh a `ContentType` dari perpanjangan. `FileName`
+ `ContentType`(Opsional) - Pengidentifikasi jenis [media yang sesuai dengan IANA](https://www.iana.org/assignments/media-types/media-types.xhtml).
+ `ContentDisposition`(Opsional) - Menentukan bagaimana lampiran harus diberikan: `ATTACHMENT` *(default)* atau. `INLINE`
+ `ContentDescription`(Opsional) — Deskripsi singkat tentang konten.
+ `RawContent`(Wajib) — Isi lampiran yang sebenarnya.
+ `ContentTransferEncoding`(Opsional) - Menentukan bagaimana muatan lampiran dikodekan ketika itu dirakit ke dalam pesan pantomim email: `SEVEN_BIT` *(*default), atau. `BASE64` `QUOTED_PRINTABLE`

Semua konten terlampir harus dikodekan ke base64 sebelum mentransfer ke titik akhir SES untuk dikirim. Jika Anda menggunakan klien AWS SDK untuk melakukan panggilan API, ini akan ditangani secara otomatis untuk Anda. Jika Anda menggunakan AWS CLI, atau telah menerapkan klien Anda sendiri, Anda harus melakukan pengkodean sendiri, seperti:
+ Konten teks biasa: `Text attachment sample content.`
+ Base64 dikodekan: `VGV4dCBhdHRhY2htZW50IHNhbXBsZSBjb250ZW50Lg==`

Contoh berikut menunjukkan cara menggunakan struktur objek lampiran saat menentukan lampiran dengan 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)dan [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)operasi menggunakan AWS CLI referensi file JSON yang berisi elemen objek lampiran.

**Example — SendEmail dengan konten sederhana**  

```
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 dengan konten sederhana dan lampiran inline**  

```
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 dengan konten template**  

```
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 dengan konten lampiran**  

```
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\"}"
                }
            }
        }
    ]
}
```

## Praktik terbaik
<a name="attachments-best-practices"></a>
+ Pertahankan ukuran pesan total (termasuk lampiran) di bawah 40MB.
+ Biarkan SES mendeteksi jenis konten secara otomatis berdasarkan ekstensi file bila memungkinkan.
+ Secara eksplisit menentukan jenis konten hanya ketika mereka berada di luar tipe [MIME umum](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types).
+ Pertimbangkan untuk menggunakan gambar sebaris untuk rendering email yang lebih baik.
+ SES mendukung berbagai jenis MIME untuk lampiran, kecuali yang tercantum dalam. [Tipe lampiran yang tidak didukung](#mime-types)

## Jenis lampiran SES yang tidak didukung
<a name="mime-types"></a>

Anda dapat mengirim pesan dengan lampiran melalui Amazon SES dengan menggunakan standar Multipurpose Internet Mail Extensions (MIME). Amazon SES menerima semua jenis lampiran file *kecuali* untuk lampiran dengan ekstensi file dalam daftar berikut.


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
| .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  | 

Beberapa ISPs memiliki batasan lebih lanjut (seperti pembatasan terkait lampiran yang diarsipkan), jadi kami sarankan untuk menguji pengiriman email Anda melalui major ISPs sebelum Anda mengirim email produksi Anda.