この記事では、簡単な電子メール送信者プログラムのJava実装コードを紹介します。それはあなたの参照のためにあなたと共有されます。特定のコンテンツは次のとおりです
このコードでは、強調するいくつかの注意点があります。
1.ソケットを使用してSMTPメールサーバーとの接続を取得し、SMTPサーバーのホスト名に注意してください。
2。データコマンドを使用する場合、被験者が書かれている場合、電子メールの本文と被写体、つまり「Enter + Line Break」、つまりコードの /r /nの間に空白行がある必要があります。
3. SMTPサーバーに渡す前に、送信者の電子メールのユーザー名とパスワードのベース64エンコードも必要です。
4.プログラムには、コンパイル時にまだ警告があります。これは、sun.misc.base64encoderクラスがRt.jarパッケージに存在するためです。 JDKが更新およびアップグレードされるため、パッケージの一部のクラスが変更されて利用できない場合があるため、コンパイラは警告を発します。
さらに、これらのコードを書いた後、いくつかの問題が見つかりました。
1. smtp.qq.comおよびsmtp.sina.comのメールサーバーは、なぜ使用できないのかわかりません。つまり、送信者のメールアドレスがQQまたはSINAの場合、このプログラムはもはや役に立たず、ステータス応答コードを理解できません。私のテストでは、SMTP.163.comのみを使用できます。これらのSMTPサーバーが公式ウェブサイトで見つかったことは明らかですが、なぜそれらを使用できないのですか?とても奇妙です。知っている人なら誰でも私に伝えたいと思っています、ありがとう!
2。以下のSimpleMailsenderクラスのsendemail()メソッドでは、いくつかの重複コードが混乱していますが、方法はありません。まだわかりません...
3。主要な発見:QQメールが163メールやSINAメールよりも数十倍早く速度でメールを受信していることに驚いています。さらに、nslookupコマンドを使用してsmtp.qq.comのホスト名を照会する場合、少なくとも5つ以上のSMTPサーバーがあることがわかりました。
4.このプログラムを書いた後、特定のメールアドレスにメールを悪意を持って送信できますが、SINAメールアドレスを連続して別の固定メールアドレスに数十の電子メールを送信すると、メールを送信する場合はSINAメールアドレスが拒否されることがわかりました。気をつけて。
コードは次のとおりです。
// class class e_mail {string from;ストリングに;文字列件名;文字列コンテンツ。文字列ユーザー名;文字列pwd; public e_mail(string from、string to、string subject、string content、string username、string pwd){this.from = from; this.to = to; this.subject = subject; this.content = content; this.username = this.tobase64(username); this.pwd = this.tobase64(pwd); } / *** e_mailクラスのトランスコードユーザー名とパスワード* / private string tobase64(string str){return(new sun.misc.base64encoder()。encode(str.getbytes())); }} // Simple Mail Senderクラス送信機能パブリッククラスSimpleMailsenderを実装する{private string smtpserver; Private int port = 25;プライベートソケットソケット。 BufferedReader BR; PrintWriter PW; / ***送信者のメールアドレスに基づいてSMTPメールサーバーを決定*/ private void initserver(string from){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(e_mail email){try {this.initserver(email.from); this.socket = new Socket(SMTPSERVER、ポート); this.br = this.getReader(socket); this.pw = this.getWriter(socket); //電子メールを送信するためのコマンドシーケンスの組み立てを開始しますsend_receive(null); // SMTPサーバーへの接続が正常にsend_receive( "ehlo hao"); send_receive( "auth login"); send_receive(email.username); send_receive(email.pwd); send_receive( "Mail From:<" + email.from + ">"); send_receive( "rcpt to:<" + email.to + ">"); send_receive( "data"); //電子メールコンテンツpw.println( "from:" + email.from); pw.println( "to:" + email.to); //件名とテキストの間に行を空にしてください。つまり、 "/r/n" pw.println( "件名:" + email.subject + "/r/n")を追加してください。 //コンソールSystem.out.println( "from:" + email.from)に電子メールコンテンツを印刷します。 System.out.println( "to:" + email.to); system.out.println( "件名:" + email.subject + "/r/n"); System.out.println(email.content); //電子メールbody pw.println(email.content); //「。」でテキストを終了することを忘れないでください。 send_receive( "。"); send_receive( "quit"); } catch(ioexception e){e.printstacktrace(); }最後に{try {if(socket!= null)socket.close(); } catch(ioexception e){e.printstacktrace(); }}}/** *コマンドが送信されるたびに、 "/r/n"をコマンドの後に追加する必要があります。 + "/r/n"); pw.flush(); System.out.println( "user >>" + command); } char [] response = new char [1024]; br.read(response); system.out.println(response); } / ***ソケットの出力ストリームを取得* / private printwriter getwriter(socket socket)throws ioexception {outputstream socketout = socket.getOutputStream();新しいprintwriter(socketout、true)を返します。 } / ***ソケットの入力ストリームを取得* / private bufferedReader getReader(ソケットソケット)IOException {inputstream socketin = socket.getinputStream();新しいbufferedreader(new inputstreamreader(socketin))を返します。 } // public static void main(string [] args){new MailSendergui(); }} //メール送信者プログラムインターフェイスクラスmailsendergui拡張jframeを実装するactionlistener {private jlabel usernamelabel;プライベートjtextfield usernamefield;プライベートJlabel Pwdlabel;プライベートJPasswordfield Pwdfield;プライベートJlabel fromlabel;プライベートJTextfield Fromfield;プライベートJlabel Tolabel;プライベートJTextfield Tofield;プライベートJlabel subjectlabel;プライベートJLabel ContentLabel;プライベートJTextarea contentarea;プライベートjbutton sendbtn;プライベートjbutton cancelbtn;プライベートe_mailメール;プライベートSimpleMailsender Mailsender; public mailsendergui(){this.init(); this.mailsender = new SimpleMailsender(); } private void init(){this.fromlabel = new Jlabel( "送信者メールアドレス:"); this.fromfield = new JTextfield(25); this.usernamelabel = new Jlabel( "username:"); this.usernamefield = new JTextfield(25); this.pwdlabel = new Jlabel( "password:"); this.pwdfield = new JPasswordField(25); this.tolabel = new Jlabel( "受信者のメールアドレス:"); this.tofield = new jtextfield(25); this.subjectlabel = new Jlabel( "電子メール件名:"); this.subjectfield = new jtextfield(20); this.contentlabel = new Jlabel( "email body:"); this.contentarea = new jtextarea(15、20); this.settitle( "ant-> Simple Mail Sender"); this.setbounds(200、30、500、500); this.setlayout(new borderlayout()); this.setDefaultCloseoperation(jframe.exit_on_close); this.setVisible(true); this.sendbtn = new jbutton( "send"); this.cancelbtn = new jbutton( "reset"); this.sendbtn.addactionlistener(this); this.cancelbtn.addactionlistener(this); jPanel uppanel = new JPanel(new Gridlayout(6、2、5、5)); uppanel.add(fromlabel); uppanel.add(Fromfield); uppanel.add(usernamelabel); uppanel.add(pwdlabel); uppanel.add(pwdfield); uppanel.add(tolabel); uppanel.add(tofield); uppanel.add(tofield); uppanel.add(subjectlabel); uppanel.add(subjectfield); uppanel.add(contentlabel); this.add(uppanel、borderlayout.north); this.add(contentarea、borderlayout.center); JPanel Downel = new JPanel(new FlowLayout(FlowLayout.Center)); downpanel.add(sendbtn、borderlayout.south); downpanel.add(cancelbtn、borderlayout.south); this.add(downel、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()、contentarea.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); }}}上記は、すべての人の学習に役立つことを期待して、Javaでプログラムを送信する簡単な電子メールを書くためのすべてのコードです。