개요
1. 이메일 관련 표준
제조업체가 제공하는 Javamail 서비스 프로그램에는 특정 메일 프로토콜을 선택적으로 구현할 수 있으며 공통 메일 프로토콜에는 다음이 포함됩니다.
SMTP (Simple Mail Transfer Protocol)는 간단한 메일 전송 프로토콜입니다. 소스 주소에서 대상 주소로 메일을 전송하기위한 일련의 규칙입니다. 문자의 대중 교통 방법을 제어합니다.
POP3 (Post Office Protocol 버전 3) : 이메일을받는 데 사용되는 표준 프로토콜입니다.
IMAP (인터넷 메일 액세스 프로토콜) : 즉, 인터넷 메일 액세스 프로토콜입니다. POP3의 대체 프로토콜입니다.
이 세 가지 프로토콜에는 SSL 암호화 전송, 즉 SMTPS, POP3 및 IMAP에 해당하는 프로토콜이 있습니다.
MIME (다목적 인터넷 메일 확장) : 즉, 다목적 인터넷 메일 확장 표준. 메일 송금 프로토콜이 아닙니다. 그러나 형식은 메시지, 첨부 파일 및 전송되는 기타 내용에 대해 정의됩니다.
2. Javamail 소개
Javamail은 Sun에서 이메일을 처리하기 위해 게시 한 API입니다. Java SE에는 포함되어 있지 않지만 Java EE의 일부입니다.
Mail.jar :이 JAR 파일에는 Javamail API 및 Sun 제공 SMTP, IMAP 및 POP3 서비스 제공 업체가 포함되어 있습니다.
Activation.jar :이 JAR 파일에는 JAF API 및 SUN의 구현이 포함되어 있습니다.
전자 메일 처리를 위해 Javamail 패키지에 사용되는 핵심 클래스는 속성, 세션, 메시지, 주소, 인증 자, 운송, 상점 등입니다.
3. 우편 전송 프로세스
위 그림에서 볼 수 있듯이 이메일 처리 단계는 다음과 같습니다.
4. 메시지 구조
Mimemessage 클래스 : 전체 이메일을 나타냅니다.
MimebodyPart 클래스 : 메시지를 나타내는 MIME 메시지.
Mimemultipart 클래스 : 다중 MIME 정보로 구성된 결합 된 MIME 정보를 나타냅니다.
5. Javamail의 핵심 클래스
Javamail은 이메일 보내기 및 수신의 높은 수준의 추상화를 제공하여 프로그램의 기초를 형성하는 주요 인터페이스 및 클래스를 형성합니다. 이 가장 일반적인 물건을 살펴 보겠습니다.
6. java.util.properties 클래스 (속성 개체)
java.util.properties 클래스는 일련의 속성을 나타냅니다.
각 키와 값은 유형 문자열입니다.
Javamail은 메일 서버와 통신해야하므로 프로그램은 서버 주소, 포트, 사용자 이름, 비밀번호 등과 같은 많은 정보를 제공해야합니다. Javamail은 속성 객체를 통해 이러한 속성 정보를 캡슐화합니다.
예 : 예를 들어, 다음 코드는 여러 속성 정보를 캡슐화합니다.
속성 properties properties (); prop.setProperty ( "mail.debug", "true"); prop.setproperty ( "mail.host", "[email protected]"; prop.setproperty ( "mail.transport.protocol", "smtp"); prop.setProperty ( "mail.scmtp.auth");
다른 메일 프로토콜의 경우 Javamail은 서비스 제공 업체가 일련의 속성을 지원해야한다고 규정합니다.
다음 표는 몇 가지 일반적인 속성입니다 (속성 값은 문자열 유형으로 설정되며 속성 유형 막대는 속성이 구문 분석되는 방법을 나타냅니다).
7. javax.mail.session 클래스 (세션 객체)
세션은 메일 세션을 나타냅니다.
세션의 주요 기능에는 두 가지 측면이 포함됩니다.
다양한 구성 속성 정보를 수신합니다. 속성 정보는 속성 객체를 통해 설정합니다.
Javamail 환경 초기화 : Javamail 구성 파일에 따라 Javamail 환경을 초기화하여 세션 객체를 통해 다른 중요한 클래스의 인스턴스를 만듭니다.
Javamail 은이 구성 파일에 따라 세션이 제공자의 구현 클래스를로드 할 수 있도록 JAR 패키지의 Meta-Inf 디렉토리의 다음 파일을 통해 기본 구성 정보를 제공합니다.
javamail.default.providers;
javamail.default.address.map.
예:
속성 propss = new Properties (); propss.setProperty ( "mail.transport.protocol", "smtp"); 세션 세션 = 세션 .getInstance (props);
8. javax.mail.transport 클래스 (메일 송금)
전자 메일 운영을 처리하는 방법은 두 가지 뿐이며, 즉 발송 또는 수신.
Javamail 은이 두 가지 다른 작업을 전송 (javax.mail.transport) 및 Storage (javax.mail.store)로 설명하고 해당 메일의 전송을 전송하고 해당 메일 수신을 저장합니다.
getTransport : 세션 클래스의 gettransport ()에는 전송 객체를 만드는 데 사용할 수있는 여러 개의 과부하 메소드가 있습니다.
연결 : 인증 명령 -Mail.smtp.auth가 설정된 경우 전송 클래스의 연결 메소드를 사용하여 서버에 연결할 때 사용자 이름과 암호를 추가해야합니다.
SendMessage : 전송 클래스의 SendMessage 메소드는 메일 메시지를 보내는 데 사용됩니다.
닫기 : 전송 클래스의 밀접한 방법은 메일 서버에 대한 연결을 닫는 데 사용됩니다.
9. javax.mail.store 클래스 (메일 스토리지)
getStore : 세션 클래스의 getStore ()에는 상점 객체를 만드는 데 사용할 수있는 여러 개의 과부하 메소드가 있습니다.
연결 : 인증 명령 -Mail.smtp.auth가 설정된 경우, 스토어 클래스의 Connect 메소드를 사용하여 서버에 연결할 때 사용자 이름과 암호를 추가해야합니다.
getfolder : 스토어 클래스의 getfolder 메소드는 사서함에서 폴더 폴더 객체를 얻을 수 있습니다.
닫기 : 상점 클래스의 닫기 메소드는 메일 서버에 대한 연결을 닫는 데 사용됩니다.
10. javax.mail.message (메시지 개체)
javax.mail.message는 서브 클래스로만 인스턴스화 할 수있는 추상 클래스이며 대부분의 경우 javax.mail.internet.mimemessage입니다.
Mimemessage는 MIME 유형의 이메일 메시지를 나타냅니다.
메시지를 만들려면 세션 객체를 Mimemessage 생성자에게 전달해야합니다.
mimemessage message = new Mimemessage (세션);
참고 : RFC822 형식의 입력 스트림을 사용하여 메시지를 만드는 것과 같은 다른 생성자가 있습니다.
setfrom : 이메일 발신자를 설정하십시오
setRecipient : 전자 메일의 발신자, CC 사람 및 비밀 사람을 설정
세 가지 미리 정의 된 주소 유형은 다음과 같습니다.
메시지 .recipientType.to : 수신자
메시지 .recipientType.cc : CC Person
메시지 .recipienttype.bcc : 비밀리에 포기하십시오
setSubject : 이메일 주제를 설정하십시오
SetContent : 메일 콘텐츠를 설정하십시오
setText : 이메일 내용이 일반 텍스트 인 경우이 인터페이스를 사용하여 텍스트 내용을 설정할 수 있습니다.
10. javax.mail.address (주소)
세션과 메시지를 만들고 메시지를 작성한 후에는 주소를 사용하여 메일 주소를 결정할 수 있습니다. 메시지와 마찬가지로 주소는 추상 클래스입니다. javax.mail.internet.internetaddress 클래스를 사용하고 있습니다.
생성 된 주소에 이메일 주소 만 포함 된 경우 이메일 주소를 생성자에게 전달하십시오.
예:
주소 주소 = 새로운 InternetAddress ( "[이메일 보호]");
인증 자 : 인증
Java.net 클래스와 마찬가지로 Javamail API는 인증기를 사용하여 사용자 이름과 비밀번호를 통해 보호 자료에 액세스 할 수 있습니다. Javamail API의 경우 이러한 리소스는 메일 서버입니다. Javamail Authenticator는 Javax.mail 패키지에 있으며 Java.net에서 동일한 이름을 가진 클래스 인증기와 다릅니다. JavaMail API가 Java 1.1에 사용되기 때문에 두 사람은 동일한 인증자를 공유하지 않으며 Java.net 카테고리가 없습니다.
Authenticator를 사용하려면 먼저 추상 클래스의 서브 클래스를 생성하고 getpasswordauthentication () 메소드에서 PasswordAuthentication 인스턴스를 반환하십시오. 생성이 완료되면 세션에 인증자를 등록해야합니다. 그런 다음 인증이 필요한 경우 인증 자에게 알립니다. 구성 파일에서 Windows를 팝업하거나 사용자 이름 및 암호를 읽을 수 있으며 (암호화하지 않도록 안전하지는 않지만) 암호를 암호화하는 개체로 호출 프로그램으로 반환 할 수 있습니다.
예:
속성 propss = new Properties (); authenticator auth = new myauthenticator (); 세션 세션 = 세션 .getDefaultInstance (propss, auth);
예
텍스트 메일을 보내십시오
public static void main (String [] args)은 예외 {속성 proper = new Properties (); prop.setProperty ( "mail.debug", "true"); Prop.SetProperty ( "Mail.Host", Mail_Server_Host); Prop.SetProperty ( "mail.transport.protocol", "smtp"); prop.setProperty ( "mail.smtp.auth", "true"); // 1. 세션 세션 만들기 세션 = 세션 .getInstance (prop); 전송 ts = null; // 2. 세션 ts = session.getTransport ()를 통해 전송 객체를 가져옵니다. // 3. 메일 서버에 연결 ts.connect (mail_server_host, user, password); // 4. 메시지 작성 mimemessage message = new Mimemessage (세션); // 전자 메일 메시지 헤더 메시지. // message.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // email message.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc))의 수신자; // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // 메시지 보내기 message.setSubject ( "테스트 텍스트 이메일"); // email의 제목 // 메시지 메시지 .settext ( "세계에서 비교할 수 없음"); // 5. 메일 보내기 ts.SendMessage (메시지, message.getallRecipients ()); ts.Close ();}HTML 형식 전자 메일을 보내십시오
public static void main (String [] args)은 예외 {속성 proper = new Properties (); prop.setProperty ( "mail.debug", "true"); Prop.SetProperty ( "Mail.Host", Mail_Server_Host); Prop.SetProperty ( "mail.transport.protocol", "smtp"); prop.setProperty ( "mail.smtp.auth", "true"); // 1. 세션 세션 만들기 세션 = 세션 .getInstance (prop); 전송 ts = null; // 2. 세션 ts = session.getTransport ()를 통해 전송 객체를 가져옵니다. // 3. 메일 서버에 연결 ts.connect (mail_server_host, user, password); // 4. 메시지 작성 mimemessage message = new Mimemessage (세션); // 전자 메일 메시지 헤더 메시지. // message.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // email message.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc))의 수신자; // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // email message.setSubject ( "테스트 html mail")의 수신자; // 이메일 문자열 htmlContent = "<h1> hello </h1>" + "<p> 그림 <img src = 'cid : abc.jpg'> 1.jpg </p>"; MimebodyPart Text = New MimeBodyPart (); text.setContent (htmlContent, "text/html; charset = utf-8"); MimebodyPart image = new MimebodyPart (); Datahandler DH = New Datahandler (New FileDatasource ( "D : // [04] Temp // IMG // 1.JPG"); image.setdatahandler (dh); image.setContentID ( "abc.jpg"); // 데이터 관계 설명 mimemultipart mm = new Mimemultipart (); mm.addbodypart (텍스트); mm.addbodypart (이미지); mm.SetSubType ( "관련"); message.setContent (mm); message.sevechanges (); // 5. 메일 보내기 ts.SendMessage (메시지, message.getallRecipients ()); ts.Close ();}첨부 파일이있는 이메일을 보냅니다
public static void main (String [] args)은 예외 {속성 proper = new Properties (); prop.setProperty ( "mail.debug", "true"); Prop.SetProperty ( "Mail.Host", Mail_Server_Host); Prop.SetProperty ( "mail.transport.protocol", "smtp"); prop.setProperty ( "mail.smtp.auth", "true"); // 1. 세션 세션 만들기 세션 = 세션 .getInstance (prop); 전송 ts = null; // 2. 세션 ts = session.getTransport ()를 통해 전송 객체를 가져옵니다. // 3. 메일 서버에 연결 ts.connect (mail_server_host, user, password); // 4. 메시지 작성 mimemessage message = new Mimemessage (세션); // 전자 메일 메시지 헤더 메시지. // message.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // email message.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc))의 수신자; // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // email message.setSubject ( "첨부 파일 메일로 테스트")의 수신자; // 이메일의 제목 mimebodypart text = new MimebodyPart (); text.setContent ( "이메일에 두 개의 첨부 파일이 있습니다.", "text/html; charset = utf-8"); // 데이터 관계 설명 mimemultipart mm = new Mimemultipart (); mm.SetSubType ( "관련"); mm.addbodypart (텍스트); 문자열 [] files = { "d : // [04] temp // img // 1.jpg", "d : // [04] temp // img // 2.jpg"}; // (String filename : files) {mimebodyPart att attachpart.attachfile (filename); mm.addbodypart (첨부 파트); } message.setContent (mm); message.sevechanges (); // 5. 메일 보내기 ts.SendMessage (메시지, message.getallRecipients ()); ts.Close ();}사서함에서 이메일을받습니다
Public Class StoreMail {Final Static String user = "Robot"; // 사용자 이름 최종 정적 문자열 암호 = "Password520"; // 비밀번호 공개 최종 정적 문자열 mail_server_host = "mail. ***. com"; // 사서함 서버 공개 최종 정적 문자열 type_html = "text/html; charset = utf-8"; // 텍스트 내용 유형 공개 최종 정적 문자열 mail_from = "[이메일 보호]"; // 발신자 공개 최종 정적 문자열 mail_to = "[이메일 보호]"; // 수신자에게 공개 최종 정적 문자열 mail_cc = "[이메일 보호]"; // cc person public final static string mail_bcc = "[이메일 보호]"; // 비밀리에 공개 정적 void main (string [] args)은 예외를 던집니다. {// 특정 연결 정보 속성을 가진 특성 생성 객체 proper = new Properties (); prop.setProperty ( "mail.debug", "true"); Prop.SetProperty ( "Mail.Store.Protocol", "POP3"); Prop.SetProperty ( "mail.pop3.host", mail_server_host); // 1. 세션 세션 생성 세션 세션 = 세션 .getInstance (prop); // 2. 세션 상점을 통해 상점 객체를 가져옵니다. // 3. Mail Server Store.connect에 연결 (Mail_Server_Host, User, Password); // 4. 사서함 폴더 폴더 = store.getfolder ( "Inbox")에서 메일 폴더를 가져옵니다. folder.open (folder.read_only); // 폴더 메시지에서 모든 메시지를 가져옵니다 for (int i = 0; i <message.length; i ++) {문자열 주제 = 메시지 [i] .getSubject (); 문자열 = (메시지 [i] .getfrom () [0]). toString (); System.out.println ( "th" + (i + 1) + "메시지의 주제 :" + gourde); System.out.println ( "th" + (i + 1) + "이메일의 발신자 주소 :" + From); } // 5. 폴더를 닫습니다 .Close (false); store.close (); }}전달 이메일
예 : 지정된 메일 폴더 아래에서 첫 번째 이메일을 받고 전달하십시오.
public static void main (String [] args)은 예외 {속성 proper = new Properties (); prop.put ( "mail.store.protocol", "pop3"); prop.put ( "mail.pop3.host", mail_server_host); prop.put ( "mail.pop3.starttls.enable", "true"); prop.put ( "mail.smtp.auth", "true"); prop.put ( "mail.smtp.host", mail_server_host); // 1. 세션 세션 생성 세션 = 세션 .getDefaultInstance (prop); // 2. 메일 폴더 스토어 스토어 = session.getStore ( "POP3"); store.connect (mail_server_host, 사용자, 비밀번호); 폴더 폴더 = store.getfolder ( "Inbox"); folder.open (folder.read_only); // 메일 폴더 메시지에서 첫 번째 이메일 메시지를 가져옵니다 [] messages = folder.getMessages (); if (messages.length <= 0) {return; } 메시지 메시지 = 메시지 [0]; // Key Message String 인쇄에서 = InternetAddress.toString (message.getfrom ()); if (from! = null) {system.out.println ( "wrom :" + from); } string replyto = InternetAddress.toString (message.getReplyTo ()); if (replyto! = null) {System.out.println ( "Reply-to :" + ReplyTo); } string to = InternetAddress.toString (message.getRecipients (message.recipientType.to)); if (to! = null) {system.out.println ( "to :" + to); } 문자열 주제 = message.getSubject (); if (subject! = null) {system.out.println ( "gubject :" + aversity); } date send = message.getSentDate (); if (send! = null) {system.out.println ( "send :" + send); } // 전달 전자 메일 메시지 헤더 메시지 앞으로 설정 = 새 mimemessage (세션); forward.setfrom (new InternetAddress (mail_from)); forward.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); forward.setSubject ( "fwd :" + message.getSubject ()); // 전달 이메일 내용을 설정합니다. BodyPart.SetContent (메시지, "Message/RFC822"); Multipart multipart = new Mimemultipart (); multipart.addbodypart (BodyPart); Forward.setContent (Multipart); Forward.sevechanges (); TSS = session.getTransport ( "SMTP"); ts.Connect (사용자, 비밀번호); ts.SendMessage (Forward, Forward.getAllRecipients ()); folder.close (false); store.close (); ts.Close (); System.out.println ( "메시지가 성공적으로 전달되었습니다 ...");}위는이 기사에 관한 것입니다. Javamail에서 이메일을 보내고받는 방법을 배우는 것이 도움이되기를 바랍니다.