Mengirim Email dengan Mail API

Mail service API untuk Java mendukung antarmuka JavaMail (javax.mail) untuk mengirim pesan email.

Sebelum memulai

Daftarkan email pengirim Anda sebagai pengirim yang sah. Untuk informasi selengkapnya, lihat siapa yang dapat mengirim email.

Mengirim pesan email

Untuk mengirim pesan email, gunakan class JavaMail yang disertakan dengan App Engine SDK.

Ketika Anda membuat Sesi JavaMail, jika Anda tidak memberikan konfigurasi server SMTP apa pun, App Engine akan menggunakan layanan Email untuk mengirim pesan. Atau, tambahkan konfigurasi SMTP untuk penyedia email pihak ketiga yang didukung, seperti Mailgun, Mailjet, atau SendGrid.

Untuk mengirim pesan:

  1. Buat pesan menggunakan objek Session JavaMail.

  2. Buat objek MimeMessage.

  3. Untuk menetapkan pengirim dan penerima pesan, gunakan class InternetAddress.

    1. Identifikasi pengirim dengan memanggil metode setFrom() pada objek MimeMessage. Jika ingin, Anda dapat memberikan nama pribadi sebagai string di parameter kedua.

    2. Identifikasi penerima dengan meneruskan jenis dan alamat penerima ke metode addRecipient(). Jenis penerima dapat berupa Message.RecipientType.TO, Message.RecipientType.CC, atau Message.RecipientType.BCC.

    Konstruktor InternetAddress memunculkan AddressException jika alamat email tampak tidak valid.

  4. Untuk menetapkan alamat "balas ke", gunakan metode setReplyTo().

  5. Buat konten pesan dengan memanggil metode pada objek MimeMessage. Tetapkan subjek dengan setSubject() dan tetapkan konten isi teks biasa dengan setText().

  6. Untuk mengirim pesan, gunakan metode statis send() pada class Transport.

Dengan layanan Email, Anda dapat menentukan set header terbatas pada pesan email keluar. Untuk informasi selengkapnya, lihat Header opsional yang dapat Anda gunakan.

Contoh kode berikut menunjukkan cara mengirim email:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

Panggilan ke layanan Email bersifat asinkron dan ditampilkan segera. Layanan Email mengelola proses menghubungi server email penerima dan mengirimkan pesan. Jika ada masalah saat mengirim pesan ke penerima mana pun, atau jika server email penerima menampilkan pesan "email tidak terkirim", pesan error akan dikirimkan kepada pengirim.

Mengirim pesan multi-bagian

Anda dapat mengirim pesan yang terdiri dari beberapa bagian, seperti pesan dengan lampiran file, atau pesan dengan isi pesan teks biasa dan isi pesan HTML.

Untuk mengirim pesan multi-bagian:

  1. Buat objek MimeMultipart untuk menampung bagian-bagiannya, lalu buat objek MimeBodyPart untuk setiap lampiran atau isi pesan alternatif, dan tambahkan ke container.'

  2. Tetapkan container ke konten untuk MimeMessage.

Contoh kode berikut menunjukkan cara mengirim pesan multi-bagian:

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
InputStream attachmentDataStream = new ByteArrayInputStream(attachmentData);
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentDataStream, "application/pdf");
mp.addBodyPart(attachment);

msg.setContent(mp);

Untuk tujuan keamanan, bagian serta lampiran pesan harus salah satu dari beberapa jenis yang diizinkan, dan nama file lampiran harus diakhiri dengan ekstensi nama file yang dikenali untuk jenis tersebut. Untuk daftar jenis dan ekstensi nama file yang diizinkan, lihat Email dengan lampiran.