Эта статья представляет код реализации Java простой программы отправителя электронной почты. Это совместно с вами для вашей ссылки. Конкретный контент заключается в следующем
В этом коде есть несколько моментов внимания, чтобы подчеркнуть :
1. Используйте сокет, чтобы получить соединение с почтовым сервером SMTP, обратите внимание на имя хоста SMTP -сервера;
2. При использовании команды данных, если субъект записан, должна быть пустая строка между телом электронной почты и субъектом, то есть «Введите + разрыв строки», которая является /r /n в коде;
3. Также необходимо базовый 64 кодирование имени пользователя и пароля отправителя, прежде чем передавать его на SMTP -сервер;
4. Программа все еще имеет предупреждение при компиляции. Это связано с тем, что класс Sun.misc.base64encoder существует в пакете Rt.jar. Поскольку JDK будет обновляться и обновляться, некоторые классы в пакете могут измениться и быть недоступными, поэтому компилятор выпустит предупреждение.
Кроме того, после написания этих кодов были найдены некоторые проблемы :
1. почтовые серверы SMTP.QQ.com и SMTP.SINA.com не знают, почему их нельзя использовать. То есть, когда адрес электронной почты отправителя составляет QQ или Sina, эта программа больше не полезна, и код ответа на статус не может быть понят. В моих тестах можно использовать только SMTP.163.com. Очевидно, что эти серверы SMTP были найдены на официальном сайте, так почему их нельзя использовать? Это так странно. Любой, кто знает надежды сказать мне, спасибо!
2. В методе Sendemail () в классе SimpleMailsender ниже некоторые дублирующиеся коды сбивают с толку, но я все еще не понимаю ...
3. Major Discovery: Я удивлен, что электронная почта QQ получает почту со скоростью, которая может быть в десятках раз быстрее, чем 163 электронных писем и электронных писем SINA. Кроме того, при использовании команды NSLOUKUP для запроса имени хоста SMTP.QQ.com она обнаружила, что у нее много серверов SMTP, по крайней мере, 5 более 163 3. Tencent действительно мощный;
4. Хотя я могу злонамеренно отправлять электронные письма на определенный адрес электронной почты после написания этой программы, я обнаружил, что, когда я отправляю десятки электронных писем на другой фиксированный адрес электронной почты последовательно с адресом электронной почты SINA, адрес электронной почты SINA будет отклонен, если я захочу отправить электронное письмо. Будь осторожен.
Код заключается в следующем:
// Электронный класс e_mail {string от; Строка до; Строка субъекта; Строка содержание; String username; String pwd; public e_mail (string from, string to, string subject, String Content, String username, String pwd) {this.from = for; this.to = to; this.subject = субъект; this.content = content; this.username = this.tobase64 (имя пользователя); this.pwd = this.tobase64 (pwd); } / *** Имя пользователя и пароль Transcode в классе e_mail* / private String tobase64 (string str) {return (new sun.misc.base64encoder (). Encode (str.getbytes ())); }} // Простой класс отправителя почты для реализации функции отправки открытого класса SimpleMailsender {private String smtpserver; частный порт int = 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.intserver (email.from); this.socket = new Socket (smtpserver, port); this.br = this.getReader (сокет); this.pw = this.getWriter (сокет); // начать сборку последовательности команд для отправки электронных писем 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"); // распечатать контент электронной почты на консольной системе.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" должен быть добавлен после команды, * соответствующий код состояния почтового сервера SMTP будет распечатана одновременно * @param Command */private void send_receive (строка команда) Throws ioexception {if (command! = Null) {// send wend wemse the smath nember mail, rablep rable rable rame rame "n red" n v (if (command!/Null) {// send send to the smtp rail, ne (if (command!; pw.print (command + "/r/n"); pw.flush (); System.out.println ("user >>" + command); } char [] response = new char [1024]; Br.read (ответ); System.out.println (ответ); } / *** Получить выходной поток сокета* / private printwriter getWriter (сокет сокета) бросает ioException {outputStream socketout = socket.getOutputStream (); вернуть New PrintWriter (Socketout, True); } / *** Получить входной поток сокета* / private BufferedReader GetReader (сокет сокета) бросает ioException {inputStream socketin = socket.getInputStream (); вернуть новый BufferedReader (New InputStreamReader (SocketIn)); } // Проверка публичной статической void main (string [] args) {new MailSenderGui (); }} // Интерфейс программы Mail Sender класс MailSenderGui Extens JFrame реализует ActionListener {private jlabel usernamelabel; Private Jtextfield Usernamefield; Частный Jlabel Pwdlabel; Private JPasswordfield Pwdfield; Частный Jlabel Fromlabel; Частный JTextfield Fromfield; Частный Jlabel Tolabel; Частный JTextfield Tofield; Частный JLABEL SubjectLabel; Частный Jlabel ContentLabel; Private 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 ("имя пользователя:"); 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-> 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 ("сбросить"); this.sendbtn.addactionListener (это); this.cancelbtn.addactionListener (это); Jpanel uppanel = new jpanel (new Gridlayout (6, 2, 5, 5)); uppanel.add (fromlabel); uppanel.add (от поля); uppanel.add (usernamelabel); uppanel.add (pwdlabel); uppanel.add (pwdfield); uppanel.add (tolabel); uppanel.add (tofield); uppanel.add (tofield); uppanel.add (субъект); 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.contentare.gettextaMefield () newxettextifile 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, надеясь, что это будет полезно для каждого обучения.