In diesem Artikel wird der Java-Implementierungscode eines einfachen E-Mail-Absenderprogramms vorgestellt. Es wird Ihnen als Referenz mit Ihnen geteilt. Der spezifische Inhalt ist wie folgt
In diesem Code gibt es mehrere Aufmerksamkeitspunkte zu betonen :
1. Verwenden Sie Socket, um eine Verbindung mit dem SMTP -Mailserver zu erhalten. Achten Sie auf den Hostnamen des SMTP -Servers.
2. Wenn der Datenbefehl verwendet wird, muss es eine leere Linie zwischen dem Körper der E -Mail und dem Betreff, dh "eingeben + Zeilenpausen eingeben", eine leere Zeile zwischen /r /n im Code geben.
3.. Es ist auch erforderlich, die Codierung des E -Mail -Benutzernamens und des Passworts des Absenders zu basieren, bevor Sie es an den SMTP -Server weitergeben.
4. Das Programm hat beim Kompilieren noch eine Warnung. Dies liegt daran, dass die Sun.misc.Base64EnenCoder -Klasse im RT.Jar -Paket vorhanden ist. Da der JDK aktualisiert und aktualisiert wird, können sich einige Klassen im Paket ändern und nicht verfügbar sein, sodass der Compiler eine Warnung ausgibt.
Nach dem Schreiben dieser Codes wurden einige Probleme gefunden :
1. Die Mail -Server von SMTP.qq.com und SMTP.sina.com wissen nicht, warum sie nicht verwendet werden können. Das heißt, wenn die E -Mail -Adresse des Absenders QQ oder Sina lautet, ist dieses Programm nicht mehr nützlich und der Statusantwortcode kann nicht verstanden werden. In meinen Tests können nur SMTP.163.com verwendet werden. Es ist offensichtlich, dass diese SMTP -Server auf der offiziellen Website gefunden wurden. Warum können sie also nicht verwendet werden? Es ist so seltsam. Jeder, der weiß, hofft es mir zu sagen, danke!
2. In der Sendemail () -Methode in der simimailSender -Klasse unten sind einige doppelte Codes verwirrend, aber es gibt keinen Weg, ich verstehe es immer noch nicht ...
3. Major Discovery: Ich bin überrascht, dass die QQ -E -Mail E -Mails mit einer Geschwindigkeit erhält, die möglicherweise Dutzende Male schneller sein kann als 163 E -Mails und Sina -E -Mails. Bei Verwendung des Befehls nslookup, um den Hostnamen von SMTP.qq.com abzufragen, stellte sich heraus, dass es viele SMTP -Server hat, mindestens 5 mehr als 163 3. Tencent ist wirklich leistungsstark.
4. Obwohl ich nach dem Schreiben dieses Programms böswillig E -Mails an eine bestimmte E -Mail -Adresse senden kann, stellte ich fest, dass die Sina -E -Mail -Adresse abgelehnt wird, wenn ich nacheinander mit einer Sina -E -Mail -Adresse Dutzende von E -Mails an eine andere feste E -Mail -Adresse sende, wenn ich eine E -Mail senden möchte. Seien Sie vorsichtig.
Der Code ist wie folgt:
// E -Mail -Klasse e_mail {String von; Saite an; String -Betreff; String -Inhalt; String Benutzername; String PWD; public e_mail (String von, String to, String -Betreff, String -Inhalt, String -Benutzername, String pwd) {this.from = from; this.to = to; this.subject = Subjekt; this.content = content; this.username = this.tobase64 (Benutzername); this.pwd = this.tobase64 (PWD); } / *** Transcode Benutzername und Kennwort in E_MAIL -Klasse* / private String Tobase64 (String Str) {return (neuer sun.misc.base64Encoder (). Encode (str.getBytes ())); }} // Einfache E -Mail -Absenderklasse zur Implementierung der Sendungsfunktion öffentliche Klasse SimpleMailSender {private String SMTPServer; privater int port = 25; private Socket Socket; BufferedReader BR; Pressewriter PW; / *** SMTP -Mailserver basierend auf der E -Mail -Adresse des Absenders bestimmen*/ private void InitServer (String von) {if (von.contains ("@163") {this.smtpserver = "SMTP.163.com"; } else if (von.contains ("@126") {this.smtpserver = "SMTP.126.com"; } else if (von.contains ("@Sina")) {this.smtpserver = "SMTP.sina.com"; } else if (von.contains ("@qq")) {this.smtpserver = "SMTP.qq.com"; }} public void sendemail (e_mail -e -Mail) {try {this.initServer (E -Mail.from); this.socket = neuer Socket (SMTPServer, Port); this.br = this.getReader (Socket); this.pw = this.getWriter (Socket); // Die Befehlssequenz zum Senden von E -Mails send_receive (null) starten; // Empfangen Sie die Nachricht, dass die Verbindung zum SMTP -Server erfolgreich send_receive ("Ehlo Hao") erfolgreich sendet; SEND_RECEIVE ("Auth Login"); SEND_RECEIVE (E -Mail.username); send_receive (E -Mail.pwd); SEND_RECEIVE ("Mail von: <" + E -Mail.from + ">"); SEND_RECEIVE ("RCPT TO: <" + E -Mail.to + ">"); send_receive ("Daten"); // Inhalt per E -Mail pw.println ("von:" + E -Mail.from); pw.println ("to:" + E -Mail.to); // Achten Sie darauf, eine Zeile zwischen dem Thema und dem Text zu entleeren, dh "/r/n" pw.println ("Betreff:" + E -Mail.Subject + "/r/n"); // Drucken Sie den E -Mail -Inhalt auf dem Console System.out.println ("von:" + E -Mail.from); System.out.println ("to:" + E -Mail.to); System.out.println ("Betreff:" + E -Mail.Subject + "/r/n"); System.out.println (E -Mail.Content); // E -Mail -Body pw.println (E -Mail.Content); // Denken Sie daran, den Text mit "." send_receive ("."); SEND_RECEIVE ("Quit"); } catch (ioException e) {e.printstacktrace (); } endlich {try {if (socket! = null) socket.close (); } catch (ioException e) {e.printstacktrace (); }}}/** * Jedes Mal, wenn ein Befehl gesendet wird, muss "/r/n" nach dem Befehl hinzugefügt werden. pw.print (Befehl + "/r/n"); pw.flush (); System.out.println ("Benutzer >>" + Befehl); } char [] response = new char [1024]; Br.Read (Antwort); System.out.println (Antwort); } / *** den Ausgangsstrom von Socket erhalten* / privatem Pressewriter GetWriter (Socket Socket) löscht IOException {outputStream socketout = socket.getOutputStream () aus; Neuen Pressewriter zurückgeben (Socketout, True); } / *** den Eingangsstrom von Socket abrufen* / private BufferedReader getReader (Socket Socket) löscht IOException {InputStream Socketin = Socket.getInputStream (); Return New BufferedReader (New InputStreamReader (Socketin)); } // public static void main (String [] args) {new MailSendergui (); }} // Mail -Absender -Programm -Schnittstellenklasse mailSendergui erweitert JFrame implementiert actionListener {private jLabel usernamelabel; Private Jtextfield usernamefield; Privat Jlabel Pwdlabel; Private JPasswordfield Pwdfield; Privat Jlabel von Label; Private JTextfield Fromfield; Privat Jlabel Tolabel; Private Jtextfield Tofield; Privat Jlabel Subjektlabel; private jlabel contentLabel; private jtextArea contentArea; Privat Jbutton SendBtn; Privat Jbutton CancelBtn; private e_mail -E -Mail; private simimailsender mailsender; public MailSendergui () {this.init (); this.mailsender = new SimplemailSender (); } private void init () {this.fromLabel = new JLabel ("Sender -E -Mail -Adresse:"); this.fromfield = new JTextField (25); this.usernamelabel = new Jlabel ("Benutzername:"); this.usernamefield = new Jtextfield (25); this.pwdlabel = new JLabel ("Passwort:"); this.pwdfield = new Jpasswordfield (25); this.tolabel = new JLabel ("Empfänger -E -Mail -Adresse:"); this.tofield = new JTextField (25); this.subjectLabel = new JLabel ("E -Mail -Betreff:"); this.subjectfield = new JTextField (20); this.contentLabel = new JLabel ("E -Mail -Körper:"); this.contentArea = new JtextArea (15, 20); this.settitle ("Ant-> einfacher Mail-Absender"); this.Setbounds (200, 30, 500, 500); this.setLayout (neuer BorderLayout ()); this.setDefaultCloseOperation (jframe.exit_on_close); this.setvisible (true); this.SendBTN = new Jbutton ("send"); this.cancelbtn = new Jbutton ("Reset"); this.SendBtn.AddactionListener (dies); this.cancelbtn.addactionListener (this); Jpanel uppanel = new jpanel (neuer gridlayout (6, 2, 5, 5)); uppanel.add (von Label); uppanel.add (fromfield); uppanel.add (ustamelabel); uppanel.add (pwdlabel); uppanel.add (pwdfield); uppanel.add (Tolabel); uppanel.add (tofield); uppanel.add (tofield); uppanel.add (Subjektlabel); Uppanel.add (Subjektfield); uppanel.add (contentLabel); this.add (uppanel, borderLayout.north); this.add (contentArea, borderLayout.Center); Jpanel downpanel = new Jpanel (New FlowLayout (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.fomfield.getText (), this.tofield.getText (), this.subject.getText (). String (this.pwdfield.getPassword ())); this.mailsender.sendemail (this.email); } else if (e.getSource () == this.cancelbtn) {this.fromfield.setText (null); this.tofield.setText (null); this.subjectfield.setText (null); this.contentArea.setText (null); }}}Das obige ist der gesamte Code für das Schreiben einfacher E-Mail-Senden von Programmen in Java, in der Hoffnung, dass dies für das Lernen aller hilfreich sein wird.