JavaMail API - Server SMTP
SMTP adalah singkatan dari Simple Mail Transfer Protocol. Ini adalah standar Internet untuk transmisi surat elektronik (email) melalui jaringan Internet Protocol (IP). SMTP menggunakan TCP port 25. Sambungan SMTP yang diamankan dengan SSL dikenal dengan singkatan SMTPS, meskipun SMTPS bukanlah protokol tersendiri.
JavaMail API memiliki paket com.sun.mail.smtpyang bertindak sebagai penyedia protokol SMTP untuk mengakses server SMTP. Tabel berikut mencantumkan kelas-kelas yang termasuk dalam paket ini:
Kelas | Deskripsi |
---|---|
SMTPMessage | Kelas ini adalah spesialisasi dari kelas MimeMessage yang memungkinkan Anda menentukan berbagai opsi dan parameter SMTP yang akan digunakan saat pesan ini dikirim melalui SMTP. |
SMTPSSLTransport | Kelas ini mengimplementasikan kelas abstrak Transport menggunakan SMTP melalui SSL untuk pengiriman dan pengangkutan pesan. |
SMTPTransport | Kelas ini mengimplementasikan kelas abstrak Transport menggunakan SMTP untuk pengiriman dan pengangkutan pesan. |
Tabel berikut mencantumkan pengecualian yang dilemparkan:
Pengecualian | Deskripsi |
---|---|
SMTPAddressFailedException | Pengecualian ini dilemparkan ketika pesan tidak dapat dikirim. |
SMTPAddressSucceededException | Pengecualian ini dirantai dari SendFailedException ketika properti mail.smtp.reportsuccess benar. |
SMTPSenderFailedException | Pengecualian ini dilemparkan ketika pesan tidak dapat dikirim. |
SMTPSendFailedException | Pengecualian ini dilemparkan ketika pesan tidak dapat dikirim. Pengecualian termasuk alamat pengirim, yang ditolak oleh server email. |
Itu com.sun.mail.smtppenyedia menggunakan Otentikasi SMTP secara opsional. Untuk menggunakan otentikasi SMTP, Anda perlu menyetel properti mail.smtp.auth atau memberikan SMTP Transport dengan nama pengguna dan sandi saat menyambung ke server SMTP. Anda dapat melakukan ini menggunakan salah satu pendekatan berikut:
Berikan objek Authenticator saat membuat Sesi email Anda dan berikan informasi nama pengguna dan sandi selama panggilan balik Authenticator. Properti mail.smtp.user dapat disetel untuk memberikan nama pengguna default untuk panggilan balik, tetapi kata sandi masih perlu diberikan secara eksplisit. Pendekatan ini memungkinkan Anda menggunakan metode pengiriman Transport statis untuk mengirim pesan. Sebagai contoh:
Transport.send(message);
Panggil metode Transport connect secara eksplisit dengan argumen nama pengguna dan kata sandi. Sebagai contoh:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
Penyedia protokol SMTP mendukung properti berikut ini, yang dapat disetel di objek Sesi JavaMail. Properti selalu disetel sebagai string. Sebagai contoh:
props.put("mail.smtp.port", "587");
Di sini Type kolom menjelaskan bagaimana string diinterpretasikan.
Nama | Tipe | Deskripsi |
---|---|---|
mail.smtp.user | Tali | Nama pengguna default untuk SMTP. |
mail.smtp.host | Tali | Server SMTP yang akan disambungkan. |
mail.smtp.port | int | Porta server SMTP yang akan disambungkan, jika metode connect () tidak secara eksplisit menentukannya. Default-nya adalah 25. |
mail.smtp.connectiontimeout | int | Nilai batas waktu koneksi soket dalam milidetik. Default adalah waktu tunggu tak terbatas. |
mail.smtp.timeout | int | Nilai batas waktu I / O soket dalam milidetik. Default adalah waktu tunggu tak terbatas. |
mail.smtp.from | Tali | Alamat email yang akan digunakan untuk perintah SMTP MAIL. Ini mengatur alamat pengirim amplop. Default-nya adalah msg.getFrom () atau InternetAddress.getLocalAddress (). |
mail.smtp.localhost | Tali | Nama host lokal yang digunakan dalam perintah SMTP HELO atau EHLO. Default-nya adalah InetAddress.getLocalHost (). GetHostName (). Biasanya tidak perlu disetel jika JDK dan layanan nama Anda dikonfigurasi dengan benar. |
mail.smtp.localaddress | Tali | Alamat lokal (nama host) untuk mengikat saat membuat soket SMTP. Default ke alamat yang dipilih oleh kelas Socket. Biasanya tidak perlu diatur. |
mail.smtp.localport | int | Nomor port lokal untuk mengikat saat membuat soket SMTP. Secara default, nomor port yang dipilih oleh kelas Socket. |
mail.smtp.ehlo | boolean | Jika salah, jangan coba masuk dengan perintah EHLO. Default-nya adalah true. |
mail.smtp.auth | boolean | Jika benar, coba untuk mengotentikasi pengguna menggunakan perintah AUTH. Default-nya adalah false. |
mail.smtp.auth.mechanisms | Tali | Jika disetel, buat daftar mekanisme otentikasi untuk dipertimbangkan. Hanya mekanisme yang didukung oleh server dan didukung oleh implementasi saat ini yang akan digunakan. Standarnya adalah "LOGIN PLAIN DIGEST-MD5 NTLM", yang mencakup semua mekanisme otentikasi yang didukung oleh implementasi saat ini. |
mail.smtp.auth.login.disable | boolean | Jika benar, cegah penggunaan perintah AUTH LOGIN. Default-nya salah. |
mail.smtp.auth.plain.disable | boolean | Jika benar, cegah penggunaan perintah AUTH PLAIN. Default-nya salah. |
mail.smtp.auth.digest-md5.disable | boolean | Jika benar, cegah penggunaan perintah AUTH DIGEST-MD5. Default-nya salah. |
mail.smtp.auth.ntlm.disable | boolean | Jika benar, cegah penggunaan perintah AUTH NTLM. Default-nya salah. |
mail.smtp.auth.ntlm.domain | Tali | Domain otentikasi NTLM. |
mail.smtp.auth.ntlm.flags | int | Bendera khusus protokol NTLM. |
mail.smtp.submitter | Tali | Pengirim yang akan digunakan di tag AUTH dalam perintah MAIL FROM. Biasanya digunakan oleh relai email untuk menyampaikan informasi tentang pengirim asli pesan. |
mail.smtp.dsn.notify | Tali | Opsi NOTIFY ke perintah RCPT. Baik NEVER, atau kombinasi SUCCESS, FAILURE, dan DELAY (dipisahkan dengan koma). |
mail.smtp.dsn.ret | Tali | Opsi RET ke perintah MAIL. Bisa FULL atau HDRS. |
mail.smtp.sendpihak | boolean | Jika disetel ke true, dan sebuah pesan memiliki beberapa alamat yang valid dan beberapa alamat tidak valid, tetap kirim pesan tersebut, melaporkan kegagalan parsial dengan SendFailedException. Jika disetel ke false (default), pesan tidak dikirim ke salah satu penerima jika ada alamat penerima yang tidak valid. |
mail.smtp.sasl.enable | boolean | Jika disetel ke true, coba gunakan paket javax.security.sasl untuk memilih mekanisme autentikasi untuk login. Default-nya adalah false. |
mail.smtp.sasl.mechanisms | Tali | Daftar nama mekanisme SASL yang dipisahkan spasi atau koma untuk dicoba digunakan. |
mail.smtp.sasl.authorizationid | Tali | ID otorisasi untuk digunakan dalam otentikasi SASL. Jika tidak diatur, ID otentikasi (nama pengguna) digunakan. |
mail.smtp.sasl.realm | Tali | Dunia yang akan digunakan dengan otentikasi DIGEST-MD5. |
mail.smtp.quitwait | boolean | Jika disetel ke false, perintah QUIT dikirim dan koneksi segera ditutup. Jika disetel ke true (default), menyebabkan transport menunggu respons ke perintah QUIT. |
mail.smtp.reportsuccess | boolean | Jika disetel ke true, menyebabkan pengangkutan menyertakan SMTPAddressSucceededException untuk setiap alamat yang berhasil. |
mail.smtp.socketFactory | Pabrik Socket | Jika disetel ke kelas yang mengimplementasikan antarmuka javax.net.SocketFactory, kelas ini akan digunakan untuk membuat soket SMTP. |
mail.smtp.socketFactory.class | Tali | Jika disetel, tentukan nama kelas yang mengimplementasikan antarmuka javax.net.SocketFactory. Kelas ini akan digunakan untuk membuat soket SMTP. |
mail.smtp.socketFactory.fallback | boolean | Jika disetel ke true, kegagalan untuk membuat soket menggunakan kelas pabrik soket yang ditentukan akan menyebabkan soket dibuat menggunakan kelas java.net.Socket. Default-nya adalah true. |
mail.smtp.socketFactory.port | int | Menentukan port yang akan dihubungkan saat menggunakan pabrik soket yang ditentukan. Jika tidak disetel, port default akan digunakan. |
mail.smtp.ssl.enable | boolean | Jika disetel ke true, gunakan SSL untuk menghubungkan dan menggunakan port SSL secara default. Defaultnya adalah false untuk protokol "smtp" dan true untuk protokol "smtps". |
mail.smtp.ssl.checkserveridentity | boolean | Jika disetel ke true, periksa identitas server seperti yang ditentukan oleh RFC 2595. Defaultnya salah. |
mail.smtp.ssl.trust | Tali | Jika disetel, dan pabrik soket belum ditentukan, memungkinkan penggunaan MailSSLSocketFactory. Jika disetel ke "*", semua host dipercaya. Jika disetel ke daftar host yang dipisahkan spasi putih, host tersebut dipercaya. Jika tidak, kepercayaan bergantung pada sertifikat yang diberikan server. |
mail.smtp.ssl.socketFactory | Pabrik Soket SSL | Jika disetel ke kelas yang memperluas kelas javax.net.ssl.SSLSocketFactory, kelas ini akan digunakan untuk membuat soket SSL SMTP. |
mail.smtp.ssl.socketFactory.class | Tali | Jika disetel, tentukan nama kelas yang memperluas kelas javax.net.ssl.SSLSocketFactory. Kelas ini akan digunakan untuk membuat soket SSL SMTP. |
mail.smtp.ssl.socketFactory.port | int | Menentukan port yang akan dihubungkan saat menggunakan pabrik soket yang ditentukan. Jika tidak disetel, port default akan digunakan. |
mail.smtp.ssl.protocols | tali | Menentukan protokol SSL yang akan diaktifkan untuk koneksi SSL. Nilai properti adalah daftar token yang dipisahkan spasi putih yang dapat diterima oleh metode javax.net.ssl.SSLSocket.setEnabledProtocols. |
mail.smtp.starttls.enable | boolean | Jika benar, aktifkan penggunaan perintah STARTTLS (jika didukung oleh server) untuk mengalihkan koneksi ke koneksi yang dilindungi TLS sebelum mengeluarkan perintah login apa pun. Default-nya adalah false. |
mail.smtp.starttls.required | boolean | Jika benar, membutuhkan penggunaan perintah STARTTLS. Jika server tidak mendukung perintah STARTTLS, atau perintah gagal, metode hubungkan akan gagal. Default-nya adalah false. |
mail.smtp.socks.host | tali | Menentukan nama host dari server proxy SOCKS5 yang akan digunakan untuk koneksi ke server email. |
mail.smtp.socks.port | tali | Menentukan nomor port untuk server proxy SOCKS5. Ini hanya perlu digunakan jika server proxy tidak menggunakan nomor port standar 1080. |
mail.smtp.mailextension | Tali | String ekstensi untuk ditambahkan ke perintah MAIL. |
mail.smtp.userset | boolean | Jika disetel ke true, gunakan perintah RSET alih-alih perintah NOOP dalam metode isConnected. Dalam beberapa kasus sendmail akan merespon dengan lambat setelah banyak perintah NOOP; penggunaan RSET menghindari masalah sendmail ini. Default-nya adalah false. |
Secara umum, aplikasi tidak perlu menggunakan kelas-kelas dalam paket ini secara langsung. Sebaliknya, mereka harus menggunakan API yang ditentukan oleh paket javax.mail (dan sub-paket). Katakanlah misalnya aplikasi tidak boleh membuat instance SMTPTransport secara langsung. Sebagai gantinya, mereka harus menggunakan metode Session getTransport untuk mendapatkan objek Transport yang sesuai.
Contoh untuk menggunakan server SMPT didemonstrasikan di bab Mengirim Email .