Saya mencoba mengirim email menggunakan Java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Saya mendapatkan kesalahan:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
Akankah kode ini berfungsi untuk mengirim email?
Jawaban:
Kode berikut bekerja sangat baik dengan server SMTP Google. Anda perlu memberikan nama pengguna dan sandi Google Anda.
Update tanggal 11 Desember 2015
Nama pengguna + kata sandi bukan lagi solusi yang disarankan. Ini berhubungan dengan
Google telah merilis API Gmail - https://developers.google.com/gmail/api/?hl=id . Kita harus menggunakan metode oAuth2, bukan nama pengguna + kata sandi.
Berikut cuplikan kode untuk bekerja dengan API Gmail.
GoogleMail.java
Untuk membuat layanan Gmail resmi melalui oAuth2, berikut cuplikan kodenya.
Utils.java
Untuk menyediakan cara autentikasi oAuth2 yang ramah pengguna, saya menggunakan JavaFX, untuk menampilkan dialog input berikut
Kunci untuk menampilkan dialog oAuth2 yang ramah pengguna dapat ditemukan di MyAuthorizationCodeInstalledApp.java dan SimpleSwingBrowser.java
sumber
Send
bukansend
tetapi merupakan kelas yang berguna. Ada pendapat tentang implikasi keamanan dari menyimpan sandi gmail dalam kode?Kode berikut berhasil untuk saya.
sumber
File jar yang diperlukan
Klik di sini - Cara menambahkan Jars Eksternal
sumber
Jawaban singkatnya - Tidak.
Jawaban panjang - tidak, karena kode bergantung pada keberadaan server SMTP yang berjalan di mesin lokal, dan mendengarkan pada port 25. Server SMTP (secara teknis MTA atau Agen Transfer Surat) bertanggung jawab untuk berkomunikasi dengan Agen Pengguna Email (MUA, yang dalam hal ini adalah proses Java) untuk menerima email keluar.
Sekarang, MTA biasanya bertanggung jawab untuk menerima email dari pengguna untuk domain tertentu. Jadi, untuk domain gmail.com, server email Google-lah yang bertanggung jawab untuk mengautentikasi agen pengguna email dan karenanya mentransfer email ke kotak masuk di server GMail. Saya tidak yakin apakah GMail mempercayai server relai email terbuka, tetapi tentunya bukan tugas yang mudah untuk melakukan otentikasi atas nama di Google, dan kemudian merelay email ke server GMail.
Jika Anda membaca FAQ JavaMail tentang menggunakan JavaMail untuk mengakses GMail , Anda akan melihat bahwa nama host dan port kebetulan mengarah ke server GMail, dan tentunya bukan ke localhost. Jika Anda berniat untuk menggunakan komputer lokal Anda, Anda harus melakukan relay atau forwarding.
Anda mungkin perlu memahami protokol SMTP secara mendalam jika Anda ingin pergi ke mana pun terkait SMTP. Anda dapat memulai dengan artikel Wikipedia di SMTP , tetapi kemajuan lebih lanjut sebenarnya akan memerlukan pemrograman terhadap server SMTP.
sumber
Anda memerlukan server SMTP untuk mengirim email. Ada server yang dapat Anda instal secara lokal di komputer Anda sendiri, atau Anda dapat menggunakan salah satu dari banyak server online. Salah satu server yang lebih terkenal adalah Google:
Saya baru saja berhasil menguji konfigurasi SMTP Google yang diizinkan menggunakan contoh pertama dari Simple Java Mail :
Perhatikan berbagai port dan strategi transport (yang menangani semua properti yang diperlukan untuk Anda).
Anehnya, Google juga membutuhkan TLS pada porta 25, meskipun instruksi Google mengatakan sebaliknya .
sumber
Sudah cukup lama sejak ini diposting. Namun mulai 13 November 2012 saya dapat memverifikasi bahwa port 465 masih berfungsi.
Lihat jawaban GaryM di forum ini . Saya harap ini membantu lebih banyak orang.
sumber
Kode berikut bekerja dengan sangat baik. Coba ini sebagai aplikasi java dengan javamail-1.4.5.jar
sumber
Ya, tidak, tidak tanpa mengubah beberapa bagian karena Anda mendapatkan kesalahan. Anda saat ini mencoba mengirim email melalui server SMTP yang berjalan di localhost tetapi Anda tidak menjalankannya
ConnectException
.Dengan asumsi kodenya OK (saya tidak benar-benar memeriksa), Anda harus menjalankan server SMTP lokal, atau menggunakan server (jarak jauh) (dari ISP Anda).
Mengenai kodenya, Anda dapat menemukan contoh di paket unduhan JavaMail seperti yang disebutkan di FAQ :
sumber
Coba ini. itu bekerja dengan baik untuk saya. Pastikan sebelum mengirim email Anda perlu memberikan akses untuk aplikasi yang kurang aman di akun gmail Anda. Jadi buka tautan berikut dan coba dengan kode java ini.
Aktifkan gmail untuk aplikasi yang kurang aman
Anda perlu mengimpor file javax.mail.jar dan file activation.jar ke proyek Anda.
Ini adalah kode lengkap untuk mengirim email di java
sumber
Ini solusi yang berhasil bro. Ini dijamin.
[email protected]
Buka tautan di bawah ini:
https://support.google.com/accounts/answer/6010255?hl=id
Ini kode saya:
sumber
Saya telah meletakkan kelas java gmail saya di atas pastebin untuk Anda tinjau, berikan perhatian khusus pada metode "startSessionWithTLS" dan Anda mungkin dapat menyesuaikan JavaMail untuk menyediakan fungsi yang sama. http://pastebin.com/VE8Mqkqp
sumber
Kode Anda berfungsi, selain menyiapkan sambungan dengan server SMTP. Anda memerlukan server email berjalan (SMTP) untuk mengirimkan email untuk Anda.
Ini kode modifikasi Anda. Saya mengomentari bagian yang tidak diperlukan dan mengubah pembuatan Sesi sehingga membutuhkan Authenticator. Sekarang cari tahu SMPT_HOSTNAME, USERNAME dan PASSWORD yang ingin Anda gunakan (penyedia Internet Anda biasanya menyediakannya).
Saya selalu melakukannya seperti ini (menggunakan server SMTP jarak jauh yang saya tahu) karena menjalankan server email lokal tidak sepele di Windows (tampaknya cukup mudah di Linux).
sumber
Memang 465 berfungsi dan pengecualian yang Anda dapatkan adalah mungkin karena port SMTP yang tidak terbuka 25. Secara default nomor port adalah 25. Namun Anda dapat mengkonfigurasinya menggunakan agen surat yang tersedia sebagai sumber terbuka - Mercury
Untuk kesederhanaan, cukup gunakan konfigurasi berikut dan Anda akan baik-baik saja.
Untuk lebih banyak lagi: lihat contoh kerja lengkap dari awal di sini
sumber
Saya mendapat pengecualian yang sama seperti yang Anda dapatkan. Alasan untuk ini adalah tidak memiliki dan menjalankan server smpt di komputer Anda (karena host Anda adalah localhost). Jika Anda menggunakan windows 7 itu tidak memiliki server SMTP. jadi Anda harus mengunduh, menginstal, dan mengkonfigurasi dengan domain dan membuat akun. Saya menggunakan hmailserver sebagai server smtp yang diinstal dan dikonfigurasi di mesin lokal saya. https://www.hmailserver.com/download
sumber
Anda dapat menemukan kelas java yang lengkap dan sangat sederhana untuk mengirim email menggunakan akun Google (gmail) di sini,
Kirim email menggunakan java dan akun Google
Ini menggunakan properti berikut
sumber