Pertama-tama unduh JavaMail API dan pastikan file jar yang relevan ada di classpath Anda.
Berikut ini contoh kerja lengkap menggunakan GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Tentu saja, Anda ingin melakukan lebih banyak di catch
blok daripada mencetak jejak tumpukan seperti yang saya lakukan pada contoh kode di atas. (Hapus catch
blok untuk melihat metode mana yang memanggil dari JavaMail API melempar pengecualian sehingga Anda bisa lebih baik melihat cara menanganinya dengan benar.)
Terima kasih untuk @jodonnel dan semua orang yang menjawab. Saya memberinya hadiah karena jawabannya menuntun saya sekitar 95% dari jalan menuju jawaban yang lengkap.
smtp.gmail.com
,. Lihat Mengkonfigurasi klien email lain untuk detailnya.javax.mail.AuthenticationFailedException
dan harus secara eksplisit mengaktifkan "aplikasi yang kurang aman" dalam pengaturan gmail saya: google.com/settings/security/lesssecureapps . Setelah "aplikasi yang kurang aman" diaktifkan, kodenya berfungsiSesuatu seperti ini (sepertinya Anda hanya perlu mengubah server SMTP Anda):
sumber
message.setText("Welcome to JavaMail");
dengan baris ini:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
Orang lain memiliki jawaban yang baik di atas, tetapi saya ingin menambahkan catatan tentang pengalaman saya di sini. Saya telah menemukan bahwa ketika menggunakan Gmail sebagai server SMTP keluar untuk aplikasi web saya, Gmail hanya memungkinkan saya mengirim ~ 10 atau lebih pesan sebelum merespons dengan respons anti-spam yang harus saya langkah secara manual untuk mengaktifkan kembali akses SMTP. Email yang saya kirim bukan spam, tetapi email "selamat datang" dari situs web ketika pengguna mendaftar dengan sistem saya. Jadi, YMMV, dan saya tidak akan bergantung pada Gmail untuk aplikasi web produksi. Jika Anda mengirim email atas nama pengguna, seperti aplikasi desktop yang diinstal (di mana pengguna memasukkan kredensial Gmail mereka sendiri), Anda mungkin baik-baik saja.
Selain itu, jika Anda menggunakan Spring, berikut ini adalah konfigurasi yang berfungsi untuk menggunakan Gmail untuk SMTP keluar:
sumber
Meskipun pertanyaan ini sudah ditutup, saya ingin memposting solusi penghitung, tetapi sekarang menggunakan Simple Java Mail (Open Source JavaMail smtp wrapper):
sumber
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Kode lengkap saya seperti di bawah ini berfungsi dengan baik:
sumber
sumber
Persyaratan minimum:
sumber
Solusi kode yang diposting dapat menyebabkan masalah ketika Anda perlu mengatur beberapa sesi SMTP di mana saja dalam JVM yang sama.
FAQ JavaMail merekomendasikan penggunaan
dari pada
karena getDefault hanya akan menggunakan properti yang diberikan pertama kali dipanggil. Semua penggunaan instance default nanti akan mengabaikan perubahan properti.
Lihat http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance
sumber
Inilah yang saya lakukan ketika saya ingin mengirim email dengan lampiran, berfungsi dengan baik. :)
sumber
Rute yang mudah adalah dengan mengonfigurasi / mengaktifkan akun gmail untuk akses POP3. Ini akan memungkinkan Anda untuk mengirim melalui SMTP normal melalui server gmail.
Maka Anda hanya akan mengirim melalui smtp.gmail.com (pada port 587)
sumber
Hai coba kode ini ....
sumber
Berikut adalah kelas yang mudah digunakan untuk mengirim email
Gmail
. Anda perlu memilikiJavaMail
perpustakaan yang ditambahkan ke jalur pembuatan Anda atau cukup gunakanMaven
.Contoh penggunaan:
sumber
Jika Anda ingin menggunakan pandangan dengan
Javamail API
lalu gunakansebagai tuan rumah untuk kode kerja yang lebih banyak dan lengkap Lihat jawaban ini .
sumber
Nilai ditambahkan:
Session.getInstance()
direkomendasikan selesaiSession.getDefaultInstance()
sumber