Artikel ini memperkenalkan kode implementasi Java dari program pengirim email sederhana. Ini dibagikan kepada Anda untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Dalam kode ini, ada beberapa titik perhatian untuk menekankan :
1. Gunakan soket untuk mendapatkan koneksi dengan server surat SMTP, perhatikan nama host dari server SMTP;
2. Saat menggunakan perintah data, jika subjek ditulis, harus ada garis kosong antara tubuh email dan subjek, yaitu, "masukkan + line break", yaitu /r /n dalam kode;
3. Penting juga untuk pengkodean base64 dari nama pengguna dan kata sandi email pengirim sebelum menyerahkannya ke server SMTP;
4. Program ini masih memiliki peringatan saat menyusun. Ini karena kelas Sun.misc.base64encoder ada dalam paket RT.Jar. Karena JDK akan diperbarui dan ditingkatkan, beberapa kelas dalam paket dapat berubah dan tidak tersedia, sehingga kompiler akan mengeluarkan peringatan.
Selain itu, setelah menulis kode -kode ini, beberapa masalah ditemukan :
1. Server surat smtp.qq.com dan smtp.sina.com tidak tahu mengapa mereka tidak dapat digunakan. Artinya, ketika alamat email pengirim adalah QQ atau SINA, program ini tidak lagi berguna dan kode respons status tidak dapat dipahami. Dalam tes saya, hanya smtp.163.com yang dapat digunakan. Jelas bahwa server SMTP ini ditemukan di situs web resmi, jadi mengapa mereka tidak dapat digunakan? Sangat aneh. Siapa pun yang tahu berharap untuk memberi tahu saya, terima kasih!
2. Dalam metode sendeMail () di kelas SimpleMailSender di bawah ini, beberapa kode duplikat membingungkan, tetapi tidak ada cara, saya masih tidak memahaminya ...
3. Penemuan Utama: Saya terkejut bahwa email QQ menerima surat dengan kecepatan yang mungkin lebih cepat dari 163 email dan email SINA. Selain itu, saat menggunakan perintah nslookup untuk menanyakan nama host SMTP.QQ.com, ia menemukan bahwa ia memiliki banyak server SMTP, setidaknya 5 lebih dari 163 3. Tencent benar -benar kuat;
4. Meskipun saya dapat dengan jahat mengirim email ke alamat email tertentu setelah menulis program ini, saya menemukan bahwa ketika saya mengirim lusinan email ke alamat email tetap lainnya secara berurutan dengan alamat email SINA, alamat email SINA akan ditolak jika saya ingin mengirim email. Hati-hati.
Kodenya adalah sebagai berikut:
// email kelas e_mail {string from; String ke; Subjek string; Konten string; Nama pengguna string; String pwd; PUBLIK E_MAIL (String From, String to, String Subjek, String Content, String UserName, String PWD) {this.from = from; this.to = to; this.subject = subjek; this.content = konten; this.username = this.tobase64 (nama pengguna); this.pwd = this.tobase64 (pwd); } / *** Transcode nama pengguna dan kata sandi di kelas E_MAIL* / Private String Tobase64 (String str) {return (new Sun.misc.base64Encoder (). Encode (str.getbytes ()); }} // kelas pengirim surat sederhana untuk mengimplementasikan fungsi pengiriman kelas publik simplemailsender {private string smtpserver; Private int port = 25; soket soket pribadi; BufferedReader BR; Printwriter PW; / *** Tentukan server surat SMTP berdasarkan alamat email pengirim*/ private void initserver (string dari) {if (from.contains ("@163")) {this.smtpserver = "smtp.163.com"; } else if (from.contains ("@126")) {this.smtpserver = "smtp.126.com"; } else if (from.contains ("@sina")) {this.smtpserver = "smtp.sina.com"; } else if (from.contains ("@qq")) {this.smtpserver = "smtp.qq.com"; }} public void sendeMail (email e_mail) {coba {this.initserver (email.from); this.socket = soket baru (smtpserver, port); this.br = this.getreader (socket); this.pw = this.getWriter (socket); // Mulailah merakit urutan perintah untuk mengirim email send_receive (null); // Terima pesan bahwa koneksi ke server SMTP berhasil mengirim_receive ("ehlo hao"); send_receive ("AUTH LOGIN"); send_receive (email.username); send_receive (email.pwd); send_receive ("surat dari: <" + email.from + ">"); send_receive ("rcpt ke: <" + email.to + ">"); send_receive ("data"); // Konten email pw.println ("from:" + email.from); pw.println ("ke:" + email.to); // Pastikan untuk mengosongkan garis antara subjek dan teks, yaitu, tambahkan "/r/n" pw.println ("subjek:" + email.subject + "/r/n"); // cetak konten email di konsol System.out.println ("dari:" + email.from); System.out.println ("ke:" + email.to); System.out.println ("Subjek:" + email.subject + "/r/n"); System.out.println (email.content); // email body pw.println (email.content); // Ingatlah untuk mengakhiri teks dengan "." send_receive ("."); send_receive ("berhenti"); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {if (socket! = null) socket.close (); } catch (ioException e) {e.printstacktrace (); }}}/** * Setiap kali perintah dikirim, "/r/n" harus ditambahkan setelah perintah, * Kode status yang sesuai dari server surat SMTP akan dicetak pada saat yang sama * @param perintah */private void send_receive (perintah string) lemparkan ioException {if (perintah! = Null) {/command nule "send" sm -t " pw.print (perintah + "/r/n"); pw.flush (); System.out.println ("User >>" + Command); } char [] respons = char baru [1024]; br.read (respons); System.out.println (respons); } / *** Dapatkan aliran output soket* / private printwriter getWriter (soket soket) melempar ioException {outputStream socketout = socket.getoutputStream (); mengembalikan printwriter baru (Socketout, true); } / *** Dapatkan aliran input soket* / private bufferedReader getReader (soket soket) melempar ioException {inputStream socketin = socket.getInputStream (); Return New BufferedReader (InputStreamReader baru (socketin)); } // uji public static void main (string [] args) {new MailSendergui (); }} // Antarmuka Program Pengirim Mail Class MailSendergui Memperluas JFrame mengimplementasikan ActionListener {private Jlabel Usernamelabel; Private JTextfield Usernefield; Private Jlabel Pwdlabel; Private JPasswordfield Pwdfield; Private Jlabel Fromlabel; pribadi jtextfield darifield; Private Jlabel Tolabel; Private JTextfield Tofield; Private Jlabel Subjectlabel; ContentLabel Jlabel pribadi; ContentArea JtextArea Private; Private Jbutton Sendbtn; Private Jbutton CancelBTN; email e_mail pribadi; SimpleMailsender Mailsender Pribadi; public mailsendergui () {this.init (); this.mailsender = new SimpleMailsender (); } private void init () {this.fromLabel = new jlabel ("Alamat email pengirim:"); this.fromfield = JTextField baru (25); this.usernamelabel = new jlabel ("nama pengguna:"); this.usernamefield = JTextField baru (25); this.pwdlabel = new jlabel ("kata sandi:"); this.pwdfield = jpasswordfield baru (25); this.tolabel = new jlabel ("alamat email penerima:"); this.tofield = JTextField baru (25); this.subjectLabel = new jlabel ("Subjek email:"); this.subjectfield = JTextField baru (20); this.contentLabel = new jlabel ("body email:"); this.contentarea = JTextArea baru (15, 20); this.settitle ("Ant-> Simple Mail Samper"); this.setbounds (200, 30, 500, 500); this.setLayout (borderlayout baru ()); this.setDefaultCloseOperation (jframe.exit_on_close); this.setVisible (true); this.sendbtn = jbutton baru ("kirim"); this.cancelbtn = jbutton baru ("reset"); this.sendbtn.addactionListener (ini); this.cancelbtn.addactionListener (ini); Jpanel uppanel = jpanel baru (gridlayout baru (6, 2, 5, 5)); uppanel.add (fromlabel); uppanel.add (darifield); uppanel.add (usernamelabel); uppanel.add (pwdlabel); uppanel.add (pwdfield); Uppanel.add (Tolabel); uppanel.add (tofield); uppanel.add (tofield); Uppanel.add (SubjectLabel); Uppanel.add (Subject); Uppanel.add (ContentLabel); this.add (uppanel, borderlayout.north); this.add (contentArea, borderlayout.center); Jpanel downpanel = jpanel baru (flowlayout baru (flowlayout.center)); downpanel.add (sendbtn, borderlayout.south); downpanel.add (cancelbtn, borderlayout.south); this.add (downpanel, borderlayout.south); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == this.sendBtn) { this.email = new E_Mail( this.fromField.getText(), this.toField.getText(), this.subjectField.getText(), this.contentArea.getText(), this.userNameField.getText(), new String (this.pwdfield.getPassword ())); this.mailsender.sendemail (this.email); } lain jika (e.getSource () == this.cancelbtn) {this.fromfield.setText (null); this.tofield.setText (null); this.subjectfield.setText (null); this.contentarea.setText (null); }}}Di atas adalah semua kode untuk menulis program pengiriman email sederhana di Java, berharap itu akan membantu untuk pembelajaran semua orang.