Mengirim email melalui antarmuka Amazon SES SMTP secara terprogram - 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 melalui antarmuka Amazon SES SMTP secara terprogram

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. Anda juga harus mendapatkan informasi berikut:

Contoh kode

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 batas waktu saat mengirim email melalui titik akhir SMTP dari EC2 Amazon, 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 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.

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 antarmuka Amazon SES SMTP di lingkungan non-produksi.

Java

Contoh ini menggunakan Eclipse IDE dan JavaMail API untuk 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 antarmuka SMTP Amazon SES 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 Amazon SESSample .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 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.

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

  9. Di SESSampleAmazon.java ganti yang berikut ini dengan nilai Anda sendiri:

    • smtp_username— 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_password— Melaksanakan `fetchSMTPPasswordFromSecureStorage` untuk mengambil kata sandi.

  10. (Opsional) Jika Anda ingin menggunakan titik akhir SMTP Amazon SES di Wilayah AWS selainemail-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 (Amazon SES) di Referensi Umum AWS.

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

  12. Simpan Amazon SESSample .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 antarmuka SMTP.

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

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

    <?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 Amazon SES. 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 kotak pasir Amazon SES). Pastikan alamat yang Anda masukkan sama persis dengan alamat yang Anda verifikasi.

    • smtp_username— Ganti dengan kredensi nama pengguna SMTP Anda, yang Anda peroleh dari halaman Pengaturan SMTP konsol 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_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 Mengelola set konfigurasi di Amazon SES.

    • (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. Referensi Umum AWS

  3. Simpan amazon-ses-smtp-sample.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.