Java Mail은 기존 이메일 계정을 사용하여 이메일을 보내는 도구입니다. 예를 들어 NetEase와 함께 이메일 계정을 등록합니다. Java Mail의 제어를 통해 Netease Mailbox에 직접 로그인 할 수 없으므로 프로그램이 자동으로 NetEase Mailbox를 사용하여 이메일을 보낼 수 있습니다. 이 메커니즘은 등록 활성화 및 스팸 보내기에 널리 사용됩니다.
Java 메일을 보내는 일반적인 과정은 다음과 같습니다.
1. javax.mail.authenticator에서 상속 된 특정 클래스를 구축하고 내부의 getpasswordauthentication () 메소드를 무시하십시오. 이 클래스는이 사서함에 이메일을 보낼 권리가 있는지 확인하기 위해 로그인 검증으로 사용됩니다.
2. SMTP 서버 주소와 같은 매개 변수를 저장하는 속성 파일을 빌드하십시오.
3. 구축 된 속성 파일과 javax.mail.authenticator 콘크리트 클래스를 통해 javax.mail.session을 만듭니다. 세션 생성은 이메일 주소에 로그인하는 것과 같습니다. 나머지는 당연히 새로운 이메일입니다.
4. 이메일 컨텐츠를 작성하려면 일반적으로 javax.mail.internet.mimemessage 객체이며 발신자, 수신자, 주제, 콘텐츠 등을 지정합니다.
5. Javax.mail.Transport Tool 클래스를 사용하여 이메일을 보내십시오.
아래는 내가 캡슐화 한 코드이며 주석도 상세합니다.
1. 첫째, Javax.mail.authenticator에서 상속 된 특정 클래스입니다. getpasswordauthentication () 메소드는 비밀번호를 구축하여 반환하는 것입니다. 이는 Java 메일의 디자인 의도를 이해하는 데 약간 혼란 스럽습니다. javax.mail.authenticator는 보안을 보장하기위한 추가 검증 조치를 제공 할 수 있습니다.
패키지 com.mzule.simplemail; import javax.mail.authenticator; import javax.mail.passwordauthentication; /** * 서버 사서함 로그인 검증 * * @Author Mzule */public class mailauthenticator authenticator {/** * username (login mailbox) */private string username; / *** 비밀번호*/ 개인 문자열 비밀번호; / *** 사서함 및 비밀번호 초기화** @Param 사용자 이름 사서함* @param password password*/ public mailauthenticator (문자열 사용자 이름, 문자열 비밀번호) {this.username = username; this.password = 비밀번호; } string getPassword () {반환 비밀번호; } @override Protected PasswordAuthentication getPasswordAuthentication () {return new passwordAuthentication (사용자 이름, 암호); } string getUserName () {return username; } public void setpassword (문자열 비밀번호) {this.password = password; } public void setusername (String username) {this.username = username; }}2. 이메일 보내기 클래스 , 나머지 단계는이 클래스에서 구현됩니다. 코드의 Simplemail은 이메일의 주제와 내용을 캡슐화하는 pojo입니다. 메소드 매개 변수에 주제와 내용을 모두 포함시키는 것이 적절하지 않다고 생각 하므로이 메소드를 과부하했습니다. 또한 대부분의 사서함의 SMTP 서버 주소는 이메일 주소로 계산할 수 있으므로. 단순화를 위해 SMTP 서버 주소가 필요하지 않은 생성자가 제공됩니다.
패키지 com.mzule.simplemail; import java.util.list; import java.util.properties; import javax.mail.messagingException; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.addressexception; import javax.mail.internet.internetAddress; import javax.mail.internet.mimeSsage; import javax.mail.mail.ricipint.recipinet.recipines. /*** 간단한 메일 발신자는 단일 또는 질량으로 보낼 수 있습니다. * * @author mzule * */public class simplemailsender {/** * 메일을 보내기위한 소품 파일 */개인 최종 과도 속성 props = system.getProperties (); / *** 메일 서버 로그인 검증*/ 개인 과도 MailAuthenticator 인증기; / ** * 이메일 세션 */ 개인 과도 세션 세션; / ** * 메일 발신자 초기화 * * @param smtphostname * smtp mail 서버 주소 * @param username * username (@param password * @param password * @param password *를 보내기위한 비밀번호 */ public simplemailsender) (최종 문자열 smtphostname, 최종 문자열 사용자 이름, 최종 문자열 비밀번호) {initer (username, smtphostname); } /*** 이메일 발신자 초기화** @param username* 이메일 보내는 전자 메일의 사용자 이름 (주소)을 전자 이메일 보내기 위해 SMTP 서버 주소* @param 비밀번호* 전자 메일을 보내기위한 비밀번호* /public simplemailsender (최종 문자열 사용자 이름, 최종 문자열 비밀번호) {// 최종 문자열 서버를 통해 SMTP 서버를 해결합니다. + username.split ( "@") [1]; init (사용자 이름, 비밀번호, smtphostname); } / ** * 초기화 * * @param username * 이메일을 보내기위한 @param username * @param password * password * @param smtphostname * smtp 호스트 주소 * / private void init (문자열 사용자 이름, 문자열 암호, 문자열 smtphostname) {// props propss.put ( "mail.smtp.auth", "true"); props.put ( "mail.smtp.host", smtphostname); // authenticator 확인 = 새 MailAuthenticator (사용자 이름, 암호); // 세션 생성 세션 = 세션 .getInstance (props, authenticator); } / ** * 이메일 보내기 * * @param 수신자 * 수신자 이메일 주소 * @param 주제 * 이메일 주제 * @param content * @param content * @throws jusderException * @throws messagingException * / public void Send (문자열 수신자, 문자열 주제, 개체 내용) throws and judrenceception {// memime type mail final mimessage message = new mimemessage (세션); // SET SET SENT SET SENT SETER MESSOME.SETFROM (new InternetAdDress (authenticator.getUername ())); // set recepient message.setRecipient (recepientType.to, new InternetAdDress (수신자)); // 주제 메시지 설정 .SetSubject (주제); // 메시지 내용 메시지를 설정합니다. // 전송을 보내십시오 .send (메시지); } / ** * 대량 이메일 * * @param 수신자 * 수신자 * @param 주제 * @param content * content * @throws addressException * @throws messagingException * / public void Send (List <String> 수신자, 문자열 주제, 개체 내용) 주소 예상, MESSIGAGEXCEPTION {// MESSAGINGEXCEPTION {// 최종 MIMEMESSAGE MESSAME = New Mimmessage (세션); // 발신자 메시지를 설정합니다. // 수신자 최종 int num = Receations.size ()를 설정합니다. InternetAddress [] 주소 = 새로운 InternetAddress [num]; for (int i = 0; i <num; i ++) {주소 [i] = new InternetAddress (수신자 (i)); } message.setRecipients (receperType.to, 주소); // 주제 메시지를 설정합니다 .SetSubject (주제); // 메일 내용 메시지를 설정합니다. // 전송을 보내십시오 .send (메시지); } / ** * 이메일 보내기 * * @param 수신자 * 수신자 이메일 주소 * @param mail * mail object * @throws jusderException * @Throws MessagingException * / public void Send (문자열 수신자, Simplemail Mail) 던지기 주소 선택, MessagingException {보내기 (수신자, mail.getSubject (), mail.getContent (); } / ** * 대량 이메일 * * @param 수신자 * @param mail * mail object * @throws jusderException * @throws messagingException * / public void send (list <string> 수신자, Simplemail Mail) 주소 지수를 던지기, MessagingException (수신자, mail.getsubject (), mail.getContent (); }}3. 위의 사서함 발신자를 호출하면 공장 클래스를 구축 할 수 있습니다 . 공장 클래스는 생성 프로세스를 캡슐화 할 수 있으므로 구성 파일을 읽음으로써 사서함 사용자 이름을 얻는 것이 매우 편리합니다. 다음 코드는 관찰자 모드를 작성할 때 작성되었으며 공장 수업을 간단히 보여주었습니다.
package com.mzule.dp.observer.factory; com.mzule.dp.observer.constant.mailsendertype; import com.mzule.simplemail.simplemailsender; /*** Outbox Factory** @author mzule**/public class mailsenderfactory {/*** 서비스 사서함*/개인 정적 단순한 메일 세너 서비스 m = null; / *** 메일 박스 가져 오기** @param 유형 사서함 유형* @return mailbox*/ public static simplemailsender getsender (mailsendertype type) {if (type == mailsendertype.service) {if (servicesms == null) {new simplemailsender ( "[email protected]"); } return servicesms; } return null; }}4. 옵저버 모드 데모로 이메일 또는 코드를 보내 십시오.
package com.mzule.dp.observer.observer; import java.util.arraylist; import java.util.list; import java.util.observable; import java.util.observable; import java.util.observable; import java.util.observer; import javav.mail.messagingException; import javax.mail.addressexmethion; com.mzule.dp.observer.constant.mailsendertype; import com.mzule.dp.observer.factory.mailsenderfactory; import com.mzule.dp.observer.po.po.product; import com.mzule.simplemail.simplemailsender; 공개 클래스 ProductPriceObserver는 관찰자 {@override public void update (Observable OBJ, Object Arg) {제품 제품 = null; if (obj instanceof product) {product = (product) obj; } if (arg instanceof float) {float price = (float) arg; 플로트 감소 = product.getPrice () - 가격; if (감소> 0) {// 이메일 보내기 Simplemailsender SMS = MailSenderFactory .getSender (MailSenderType.Service); List <string> 수신자 = New ArrayList <string> (); 수신자.add ( "[email protected]"); 수신자.add ( "[email protected]"); {for (문자열 수신자 : 수신자) {sms.send (수신자, "가격 변경", "" + product.getName () + "에주의를 기울이는 항목" + product.getPrice () + "yuan에서" + price + "yuan에서 가격이 줄어들 었습니다. }} catch (jessurexception e) {e.printstacktrace (); } catch (MessagingException e) {e.printstacktrace (); }}}}} 5. 이메일이 성공적으로 전송되었는지 확인하십시오.
위의 것은 Java 이메일을 보내는 전체 과정이며 모든 사람의 학습에 도움이되기를 바랍니다.