이 기사는 간단한 이메일 발신자 프로그램의 Java 구현 코드를 소개합니다. 참조를 위해 귀하와 공유됩니다. 특정 내용은 다음과 같습니다
이 코드에는 강조해야 할 몇 가지주의 사항이 있습니다.
1. 소켓을 사용하여 SMTP 메일 서버와 연결하고 SMTP 서버의 호스트 이름에주의하십시오.
2. 데이터 명령을 사용하는 경우, 대상이 작성된 경우, 이메일 본문과 주제, 즉 "Enter + Line Break", 즉 코드의 /r /n 사이에 빈 줄이 있어야합니다.
3. SMTP 서버에 전달하기 전에 발신자의 이메일 사용자 이름과 비밀번호를 인코딩해야합니다.
4. 프로그램에는 컴파일 할 때 여전히 경고가 있습니다. Sun.Misc.Base64Encoder 클래스가 Rt.jar 패키지에 존재하기 때문입니다. JDK가 업데이트되고 업그레이드되므로 패키지의 일부 클래스가 변경되어 사용할 수 없으므로 컴파일러가 경고를 발행합니다.
또한이 코드를 작성한 후 몇 가지 문제가 발견되었습니다 .
1. smtp.qq.com 및 smtp.sina.com의 메일 서버는 왜 사용할 수 없는지 모릅니다. 즉, 발신자의 이메일 주소가 QQ 또는 Sina 일 때이 프로그램은 더 이상 유용하지 않으며 상태 응답 코드를 이해할 수 없습니다. 내 테스트에서는 smtp.163.com 만 사용할 수 있습니다. 이 SMTP 서버는 공식 웹 사이트에서 발견되었으므로 왜 사용할 수 없습니까? 너무 이상합니다. 나에게 말하기를 희망하는 사람이라면 누구나 감사합니다!
2. 아래의 SMEPLEEMAIL () 메소드 아래의 SMEPLEEMAILSENDER 클래스에서 일부 중복 코드는 혼란 스럽지만 방법이 없지만 여전히 이해가 안 돼요 ...
3. Major Discovery : QQ 이메일이 163 개의 이메일과 Sina 이메일보다 수십 번 더 빠른 속도로 우편물을 받고 있다는 사실에 놀랐습니다. 또한 NSLookup 명령을 사용하여 smtp.qq.com의 호스트 이름을 쿼리 할 때 SMTP 서버가 많으며 최소 5 개 이상의 163 3 3을 발견했습니다. Tencent는 정말 강력합니다.
4.이 프로그램을 작성한 후 특정 이메일 주소로 이메일을 악의적으로 보낼 수 있지만 SINA 이메일 주소로 수십 개의 이메일을 다른 고정 이메일 주소로 보낼 때 이메일을 보내려면 SINA 이메일 주소가 거부됩니다. 조심하세요.
코드는 다음과 같습니다.
// 이메일 클래스 e_mail {문자열에서; 문자열; 문자열 주제; 문자열 내용; 문자열 사용자 이름; 문자열 pwd; public e_mail (문자열에서 문자열 to, 문자열 주제, 문자열 내용, 문자열 사용자 이름, 문자열 pwd) {this.from = from; this.to = to; this.subject = 주제; this.content = 내용; this.username = this.tobase64 (사용자 이름); this.pwd = this.tobase64 (pwd); } / *** e_mail 클래스의 트랜스 코드 사용자 이름 및 비밀번호* / private string tobase64 (string str) {return (new Sun.Misc.base64444oNcoder (). encode (str.getBytes ())); }} // simple mail sender 클래스를 보내는 기능 공개 클래스 simplemailsender {private string smtpserver; 개인 int 포트 = 25; 개인 소켓 소켓; 버퍼링 리더 BR; 인쇄기 PW; / *** 발신자의 이메일 주소를 기반으로 SMTP 메일 서버를 결정하십시오*/ private void initserver (string) {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 = 새로운 소켓 (smtpserver, port); this.br = this.getReader (소켓); this.pw = this.getWriter (소켓); // 이메일을 보내기 위해 명령 시퀀스를 조립하기 시작합니다. send_receive (null); // SMTP 서버에 대한 연결이 성공적으로 send_receive ( "ehlo hao")를 성공적으로한다는 메시지를받습니다. send_receive ( "인증 로그인"); send_receive (email.username); send_receive (email.pwd); send_receive ( "메일 : <" + email.from + ">"); send_receive ( "rcpt to : <" + email.to + ">"); send_receive ( "data"); // 이메일 content pw.println ( "wrom :" + email.from); pw.println ( "to :" + email.to); // 피사체와 텍스트 사이의 줄을 비우십시오. // 콘솔 시스템에서 이메일 내용을 인쇄합니다 .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"이 추가되어야합니다. * SMTP 메일 서버의 해당 상태 코드는 동시에 동시에 인쇄됩니다 * @param 명령 */private void send_receive (string 명령) ioexception {if (명령! = null) {// smtp에 대한 send 명령, smtp 서버에 대한 send "/r/n. pw.print (명령 + "/r/n"); pw.flush (); System.out.println ( "user >>" + 명령); } char [] 응답 = 새로운 char [1024]; br.read (응답); System.out.println (응답); } / *** 소켓의 출력 스트림을 가져옵니다* / 개인 프린트 라이터 getWriter (소켓 소켓)는 ioException {outputStream socketout = socket.getOutputStream (); 새 인쇄기 (Socketout, True)를 반환합니다. } / *** 소켓의 입력 스트림을 가져옵니다* / private bufferedReader getReader (Socket Socket)는 ioException {inputStream socketin = socket.getInputStream (); 새로운 BufferedReader를 반환합니다 (New inputStreamReader (SocketIn)); } // test public static void main (String [] args) {new MailSenderGui (); }} // Mail Sender 프로그램 인터페이스 클래스 MailSenderGui 확장 jframe implements ActionListener {private jlabel usernamelabel; 개인 Jtextfield usernamefield; 개인 jlabel pwdlabel; Private JPasswordfield Pwdfield; Label의 개인 jlabel; 개인 Jtextfield From From From; 개인 Jlabel Tolabel; 개인 Jtextfield Tofield; 개인 jlabel 주제 라벨; 개인 jlabel contentlabel; 개인 jtextArea contentArea; 개인 Jbutton sendbtn; 개인 JBUTTON CANTERBTN; 개인 e_mail 이메일; 개인 간단한 메일 세더 메일 렌더; public mailsendergui () {this.init (); this.mailsender = new Simplemailsender (); } private void init () {this.fromLabel = new Jlabel ( "발신자 이메일 주소 :"); 이 .fromfield = New Jtextfield (25); this.usernamelabel = new Jlabel ( "사용자 이름 :"); this.usernamefield = New Jtextfield (25); this.pwdlabel = new Jlabel ( "비밀번호 :"); 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 ( "이메일 바디 :"); this.contentArea = New JtextArea (15, 20); this.settitle ( "ant-> 간단한 메일 발신자"); this.setbounds (200, 30, 500, 500); this.setLayout (New BorderLayout ()); this.setDefaultCloseOperation (jframe.exit_on_close); this.set -Visible (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 (주제 필드); 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.fromfield.getText (), this.tofield.getText (), this.subjectfield.getText (), this.contentArea.getTexteft () 문자열 (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에서 간단한 이메일 보내기 프로그램을 작성하기위한 모든 코드이며, 모든 사람의 학습에 도움이되기를 바라고 있습니다.