Mengirim email secara terprogram melalui antarmuka Amazon SES SMTP - Layanan Email Sederhana Amazon

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

Mengirim email secara terprogram melalui antarmuka Amazon SES SMTP

Untuk mengirim email menggunakan SES SMTP antarmuka Amazon, Anda dapat menggunakan bahasa pemrograman, server email, atau aplikasi yang SMTP diaktifkan. Sebelum memulai, selesaikan tugas-tugas di Menyiapkan Amazon Simple Email Service. Anda juga harus mendapatkan informasi berikut:

Contoh kode

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

Amazon Elastic Compute Cloud (AmazonEC2) membatasi lalu lintas email melalui port 25 secara default. Untuk menghindari batas waktu saat mengirim email melalui SMTP titik akhir dari AmazonEC2, Anda dapat meminta agar pembatasan ini dihapus. Untuk informasi selengkapnya, lihat Bagaimana cara menghapus pembatasan pada port 25 dari EC2 instans atau AWS Lambda fungsi Amazon saya? di pusat AWS pengetahuan.

Contoh kode di bagian ini untuk Java dan PHP gunakan 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 lebih lanjut atau pengujian beban, gunakan simulator SES kotak surat Amazon. 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 menggunakan simulator kotak surat secara manual.

Pilih bahasa pemrograman untuk melihat contoh bahasa tersebut:

Awas

Amazon SES tidak merekomendasikan penggunaan kredensil statis. Lihat AWS Secrets Manageruntuk mempelajari cara meningkatkan postur keamanan Anda dengan menghapus kredensi hard-code dari kode sumber Anda. Tutorial ini hanya disediakan untuk tujuan menguji SES SMTP antarmuka Amazon di lingkungan non-produksi.

Java

Contoh ini menggunakan Eclipse IDE dan JavaMail APIuntuk mengirim email melalui Amazon SES menggunakan antarmuka. SMTP

Sebelum Anda melakukan prosedur berikut, selesaikan tugas di Menyiapkan Amazon Simple Email Service.

Untuk mengirim email menggunakan SES SMTP antarmuka Amazon dengan Java
  1. Di browser web, buka JavaMail GitHub halaman. 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.

  2. Di web browser, buka GitHub halaman Aktivasi Jakarta, dan di bawah JavaBeans Activation Framework 1.2.1 Final Release, unduh jakarta.activation.jar

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

    1. Mulai Eclipse.

    2. Di Eclipse, pilih File, pilih Baru, lalu pilih Proyek Java.

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

    4. Di kotak dialog Pengaturan Java, pilih tab Pustaka.

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

    6. Pilih Tambahkan Eksternal JARs.

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

    8. Di kotak dialog Pengaturan Java, pilih Selesai.

  4. Di Eclipse, di jendela Paket Explorer, perluas proyek Anda.

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

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

  7. Ganti seluruh isi A mazonSESSample .java dengan kode berikut:

    import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class AmazonSESSample { // Replace sender@example.com with your "From" address. // This address must be verified. static final String FROM = "sender@example.com"; static final String FROMNAME = "Sender Name"; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. static final String TO = "recipient@example.com"; // Replace smtp_username with your Amazon SES SMTP user name. static final String SMTP_USERNAME = "smtp_username"; // The name of the Configuration Set to use for this message. // If you comment out or remove this variable, you will also need to // comment out or remove the header below. static final String CONFIGSET = "ConfigSet"; // Amazon SES SMTP host name. This example uses the US West (Oregon) region. // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints // for more information. static final String HOST = "email-smtp.us-west-2.amazonaws.com"; // The port you will connect to on the Amazon SES SMTP endpoint. static final int PORT = 587; static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)"; static final String BODY = String.join( System.getProperty("line.separator"), "<h1>Amazon SES SMTP Email Test</h1>", "<p>This email was sent with Amazon SES using the ", "<a href='https://github.com/javaee/javamail'>Javamail Package</a>", " for <a href='https://www.java.com'>Java</a>." ); public static void main(String[] args) throws Exception { // Create a Properties object to contain connection configuration information. Properties props = System.getProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.port", PORT); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); // Create a Session object to represent a mail session with the specified properties. Session session = Session.getDefaultInstance(props); // Create a message with the specified information. MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(FROM,FROMNAME)); msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO)); msg.setSubject(SUBJECT); msg.setContent(BODY,"text/html"); // Add a configuration set header. Comment or delete the // next line if you are not using a configuration set msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET); // Create a transport. Transport transport = session.getTransport(); // Get the password String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage(); // Send the message. try { System.out.println("Sending..."); // Connect to Amazon SES using the SMTP username and password you specified above. transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD); // Send the email. transport.sendMessage(msg, msg.getAllRecipients()); System.out.println("Email sent!"); } catch (Exception ex) { System.out.println("The email was not sent."); System.out.println("Error message: " + ex.getMessage()); } finally { // Close and terminate the connection. transport.close(); } } static String fetchSMTPPasswordFromSecureStorage() { /* IMPLEMENT THIS METHOD */ // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/ } }
  8. Di A mazonSESSample .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.

    • 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 SES kotak pasir Amazon).

  9. Dalam A mazonSESSample .java ganti yang berikut ini dengan nilai Anda sendiri:

    • smtp_username — Ganti dengan kredensi nama SMTP pengguna Anda. Perhatikan bahwa kredensi nama SMTP pengguna Anda adalah rangkaian huruf dan angka 20 karakter, bukan nama yang dapat dipahami.

    • smtp_password — Melaksanakan `fetchSMTPPasswordFromSecureStorage` untuk mengambil kata sandi.

  10. (Opsional) Jika Anda ingin menggunakan SES SMTP titik akhir Amazon 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 tempat Amazon SES tersedia, lihat Layanan Email Sederhana Amazon (AmazonSES) di Referensi Umum AWS.

  11. (Opsional) Jika Anda ingin menggunakan set konfigurasi saat mengirim email ini, ubah nilai variabel ConfigSet dengan nama set konfigurasi. Untuk informasi selengkapnya tentang set konfigurasi, lihat Menggunakan set konfigurasi di Amazon SES.

  12. Simpan A mazonSESSample .java.

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

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

  15. Tinjau output. Jika email berhasil dikirim, konsol menampilkan “Email dikirim!” Jika tidak, ini akan menampilkan pesan kesalahan.

  16. 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 SMTP antarmuka.

Sebelum Anda melakukan prosedur berikut, selesaikan tugas di Menyiapkan Amazon Simple Email Service. 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. Setelah Anda menginstalPHP, tambahkan path ke PHP dalam variabel lingkungan Anda sehingga Anda dapat menjalankan PHP dari prompt perintah apa pun.

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

  • Instal PHPMailer kelas - Setelah Anda menginstal Composer, jalankan perintah berikut untuk menginstalPHPMailer:

    path/to/composer require phpmailer/phpmailer

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

Untuk mengirim email menggunakan SES SMTP antarmuka Amazon dengan PHP
  1. Buat file bernama amazon-ses-smtp-sample.php. Buka file dengan editor teks dan tempel di kode berikut:

    <?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // If necessary, modify the path in the require statement below to refer to the // location of your Composer autoload.php file. require 'vendor/autoload.php'; // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. $sender = 'sender@example.com'; $senderName = 'Sender Name'; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. $recipient = 'recipient@example.com'; // Replace smtp_username with your Amazon SES SMTP user name. $usernameSmtp = 'smtp_username'; // Specify a configuration set. If you do not want to use a configuration // set, comment or remove the next line. $configurationSet = 'ConfigSet'; // If you're using Amazon SES in a region other than US West (Oregon), // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP // endpoint in the appropriate region. $host = 'email-smtp.us-west-2.amazonaws.com'; $port = 587; // The subject line of the email $subject = 'Amazon SES test (SMTP interface accessed using PHP)'; // The plain-text body of the email $bodyText = "Email Test\r\nThis email was sent through the Amazon SES SMTP interface using the PHPMailer class."; // The HTML-formatted body of the email $bodyHtml = '<h1>Email Test</h1> <p>This email was sent through the <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP interface using the <a href="https://github.com/PHPMailer/PHPMailer"> PHPMailer</a> class.</p>'; $mail = new PHPMailer(true); try { // Specify the SMTP settings. $mail->isSMTP(); $mail->setFrom($sender, $senderName); $mail->Username = $usernameSmtp; $mail->Password = fetchSMTPPasswordFromSecureStorage(); $mail->Host = $host; $mail->Port = $port; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet); // Specify the message recipients. $mail->addAddress($recipient); // You can also add CC, BCC, and additional To recipients here. // Specify the content of the message. $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $bodyHtml; $mail->AltBody = $bodyText; $mail->Send(); echo "Email sent!" , PHP_EOL; } catch (phpmailerException $e) { echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer. } catch (Exception $e) { echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES. } function fetchSMTPPasswordFromSecureStorage() { /* IMPLEMENT THIS METHOD */ // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/ } ?>
  2. 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 AmazonSES. Untuk informasi selengkapnya, lihat Identitas terverifikasi. 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 SES kotak pasir Amazon). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.

    • smtp_username — Ganti dengan kredensi nama SMTP pengguna Anda, yang Anda peroleh dari halaman SMTPPengaturan SES konsol Amazon. Kredensial ini tidak sama dengan access key ID AWS Anda. Perhatikan bahwa kredensi nama SMTP pengguna Anda adalah rangkaian huruf dan angka 20 karakter, bukan nama yang dapat dipahami.

    • smtp_password — 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 Menggunakan set konfigurasi di Amazon SES.

    • (Opsional) email-smtp.us-west-2.amazonaws.com — Jika Anda ingin menggunakan SES SMTP titik akhir Amazon di Wilayah selain AS Barat (Oregon), ganti ini dengan SES SMTP titik akhir Amazon di Wilayah yang ingin Anda gunakan. Untuk daftar SMTP titik akhir URLs Wilayah AWS tempat Amazon SES tersedia, lihat Amazon Simple Email Service (AmazonSES) di Referensi Umum AWS.

  3. amazon-ses-smtp-sampleSimpan.php.

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

  5. Tinjau output. Jika email berhasil dikirim, konsol menampilkan “Email dikirim!” Jika tidak, ini akan menampilkan pesan kesalahan.

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