자바 메 일 입문 튜 토리 얼 생 성 메 일(2)

자바 메 일 API 는 javax.mail.Message 클래스 를 사용 하여 메 일 을 표시 합 니 다.Message 클래스 는 추상 적 인 클래스 이기 때문에 하위 클래스 javax.mail.internet.MimeMessage 클래스 를 사용 하여 Message 클래스 의 인 스 턴 스 대상 을 만들어 야 합 니 다.간단 한 텍스트 메 일 을 만 들 었 다 면 MimeMessage 클래스 는 우리 의 수 요 를 만족 시 킬 수 있 습 니 다.단,내 장 된 자원 이나 첨부 파일 이 포 함 된 복잡 한 메 일 을 만 들 려 면 자바 메 일 API 의 MimeMessage,자바 x.mail.internet.MimeBody Part 와 자바 x.mail.internet.MimeMultipart 등 을 사용 해 야 합 니 다.
1.MimeMessage 클래스 는 전체 메 일 을 표시 합 니 다.
2.Mime Body Part 클래스 는 메 일의 MIME 메 시 지 를 표시 합 니 다.
3.Mime Multipart 클래스 는 여러 개의 MIME 메시지 로 구 성 된 그룹 MIME 메 시 지 를 표시 합 니 다.
이 세 가지 업무 관 계 는 다음 그림 과 같다.

응용 프로그램 개발 자 들 이 자바 메 일 API 를 사용 하여 메 일 콘 텐 츠 를 만 들 때 보통 MimeMessage,MimeBody Part,MimeMultipart 등 세 가지 주요 클래스 만 사용 하지만 이들 의 클래스 계승 관 계 를 알 아 보 는 것 도 필요 하 다.아래 그림 은 이 세 가지 유형의 계승 관계 와 자주 사용 하 는 방법 을 보 여 준다.

다음은 javax.mail.internet.MimeMessage 클래스 로 간단 한 텍스트 메 일 을 만 듭 니 다.

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;

public class TextMessage {
 public static void main(String[] args) throws Exception {
 String from = "[email protected]";
 String to = "[email protected]";
 String subject = "test";
 String body = "test!!!";

 //   Session    
 Session session = Session.getDefaultInstance(new Properties());
 //   MimeMessage    
 MimeMessage msg = new MimeMessage(session);
 //      
 msg.setFrom(new InternetAddress(from));
 //      
 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 //       
 msg.setSentDate(new Date());
 //       
 msg.setSubject(subject);
 //             
 msg.setText(body);
 //             
 msg.saveChanges();
 //  MimeMessage            
 msg.writeTo(new FileOutputStream("c:\\test.eml"));
 }
}

저 희 는 메 일 클 라 이언 트(여기 foxmail)로 CD 아래 test.eml 파일 을 열 면 다음 과 같은 정 보 를 볼 수 있 습 니 다.메 일 생 성 성공 을 설명 합 니 다.

다음은 위 에 나타 난 몇 가지 유형 을 간단하게 설명 하 겠 습 니 다.
1.MimeMessage 류:위 에서 MimeMessage 류 는 Message 류 의 구체 적 인 실현 류 로 Message 류 의 인 스 턴 스 대상 을 만 드 는 데 사 용 됩 니 다.여기 구조 함수 가 Session 대상 을 매개 변수 로 들 어 왔 습 니 다.
2.Session 클래스:이 대상 은 클 라 이언 트 와 메 일 서버 간 의 네트워크 연결 정 보 를 수집 하고 전체 메 일 프로그램 에 필요 한 환경 정 보 를 정의 하 는 데 사 용 됩 니 다.이 정 보 는 Session 대상 의 속성 으로 Session 대상 에 저 장 됩 니 다.Session 대상 은 자바 util.Properties 대상 을 이용 하여 메 일 서버,사용자 이름 을 얻 었 습 니 다.암호 정보 와 전체 응용 프로그램 이 사용 해 야 할 공유 정 보 는 Session 류 의 구조 방법 이 개인 적 이기 때문에 저 희 는 Session 류 가 제공 하 는 getDefault Instance()라 는 정적 공장 방법 으로 기본 적 인 Session 대상 을 얻 습 니 다.
3.Properties 클래스:이 클래스 는 지속 적 인 속성 집합 을 표시 합 니 다.관련 키 값 을 저장 하여 정 보 를 매개 변수 로 Session 대상 을 만 드 는 데 사 용 됩 니 다.여 기 는 빈 집합 을 매개 변수 로 구성 합 니 다.
4.인터넷 address 류:이 종 류 는 추상 적 인 address 류 의 하위 클래스 로 메 일 주 소 를 만 드 는 데 사 용 됩 니 다.
5.Recipient Type 클래스:이 클래스 는 Message 클래스 의 내부 클래스 입 니 다.이 클래스 는 3 개의 정적 변수 가 있 습 니 다.TO 는 받 는 사람 을 표시 하고 CC 는 베 끼 는 사람(받 는 사람 은 베 끼 는 사람 을 알 고 있 습 니 다)을 표시 하 며 BCC 는 밀송 인(받 는 사람 은 밀송 을 모 르 는 사람)을 표시 합 니 다.
 위의 메 일 은 간단 한 텍스트 만 포함 되 어 있 을 뿐,때때로 우 리 는 HTML 파일 을 사용 하여 우리 의 메 일 본문 을 풍부하게 해 야 한다.예 를 들 어 HTML 라벨 을 사용 하여 메 일 본문 을 조판 하고,HTML 라벨 을 사용 하여 메 일 본문 에 그림 이나 소리 등 을 도입 해 야 한다.다음 코드 는 HTML 형식 을 포함 하 는 메 일 을 만 들 었 습 니 다.

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;

public class HtmlMessage {
 public static void main(String[] args) throws Exception {
 String from = "[email protected]";
 String to = "[email protected]";
 String subject = "test";
 String body = "<h4>         </h4>";
 //   Session    
 Session session = Session.getDefaultInstance(new Properties());
 //   MimeMessage    
 MimeMessage msg = new MimeMessage(session);
 //      
 msg.setFrom(new InternetAddress(from));
 //      
 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 //       
 msg.setSentDate(new Date());
 //       
 msg.setSubject(subject);
 //   HTML       
 msg.setContent(body, "text/html;charset=gb2312");
 //             
 msg.saveChanges();
 //  MimeMessage            
 msg.writeTo(new FileOutputStream("c:\\test.eml"));
 }
}

우 리 는 foxmail 로 test.eml 을 열 어 다음 과 같이 표시 합 니 다.

이전 코드 와 다른 점 은 저희 가 메 일 내용 을 설정 할 때 setContent 방법 으로 setText 방법 을 대 체 했 을 뿐 메 일 본문 인 MIME 형식 을 text/html 로 지정 하 였 습 니 다.
이제 우 리 는 HTML 태그 가 있 는 메 일 을 만 드 는 것 을 배 웠 습 니 다.그러나 가끔 은 메 일 에 그림 을 삽입 하여 우리 의 뜻 을 직관 적 으로 표현 해 야 할 수도 있 습 니 다.그러면 이 럴 때 우 리 는 Mime Multipart 류 와 Mime Body Part 류 를 사용 해 야 합 니 다.

import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class PictureMessage {
 public static void main(String[] args) throws Exception {
 String from = "[email protected]";//      
 String to = "[email protected]"; //      
 String subject = "HTML  ";
 String body = "<a href=http://www.cnblogs.com>" + "         </a></br>"
 + "<img src=\"c:\\dog.jpg\">";

 Session session = Session.getDefaultInstance(new Properties());
 //   MimeMessage  ,          
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 message.setRecipients(Message.RecipientType.TO,
 InternetAddress.parse(to));
 message.setSubject(subject);

 //         "related" MimeMultipart  。
 MimeMultipart multipart = new MimeMultipart("related");

 /*
 *       HTML   MimeBodyPart  ,            MimeMultipart   
 */
 MimeBodyPart htmlBodyPart = new MimeBodyPart();
 htmlBodyPart.setContent(body, "text/html;charset=gb2312");
 multipart.addBodyPart(htmlBodyPart);

 /*
 *            MimeBodyPart  ,            MimeMultipart   
 */
 MimeBodyPart gifBodyPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource("c:\\dog.jpg");
 gifBodyPart.setFileName(fds.getName());
 gifBodyPart.setDataHandler(new DataHandler(fds));
 multipart.addBodyPart(gifBodyPart);

 /*
 *  MimeMultipart            ,      saveChanges      
 */
 message.setContent(multipart);
 message.saveChanges();

 //  MimeMessage            
 message.writeTo(new FileOutputStream("c:\\PictureMessage.eml"));
 }
}

코드 가 약간 복잡 해 보 입 니 다.위 에서 언급 한 MimeMessage,MimeMultipart 와 MimeBody Part 등 세 가지 유형의 관계 도 를 다시 볼 수 있 습 니 다.그러면 위의 코드 를 쉽게 이해 할 수 있 습 니 다.저 희 는 PictureMessage.eml 을 열 어 다음 과 같은 정 보 를 보 았 습 니 다.이 는 저희 가 그림 이 있 는 메 일 을 성공 적 으로 만 들 었 음 을 설명 합 니 다.그리고 이 사진 은 첨부 파일 로 메 일 에 포함 되 어 있 습 니 다.

Mime Multipart 는 두 가지 구조 함수 가 있 습 니 다.

public MimeMultipart()
public MimeMultipart(String subtype)


첫 번 째 는 매개 변수 가 없 는 것 입 니 다.기본 인 스 턴 스 대상 의 MIME 유형 은 mixed 이 고 두 번 째 유형 은 하나의 유형 을 만들어 Mime Multipart 류 의 인 스 턴 스 대상 을 만 듭 니 다.세 가지 자주 사용 하 는 유형 이 있 습 니 다.mixed,related,alternative 입 니 다.이 세 가지 유형 은 MIME 에서 의 조합 관 계 는 다음 과 같 습 니 다.

현재 우 리 는 위 에서 보 여 준 이러한 조합 관계 로 첨부 파일 을 만 들 고 본문 에 내 장 된 자원 이 있 는 메 일 을 만 듭 니 다.

import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class ComplexMessage {
 public static void main(String[] args) throws Exception {
 Session session = Session.getDefaultInstance(new Properties());
 MimeMessage message = createMessage(session);
 message.writeTo(new FileOutputStream("c:\\ComplexMessage.eml"));
 }

 public static MimeMessage createMessage(Session session) throws Exception {
 String from = "[email protected]";//      
 String to = "[email protected]"; //      
 String subject = "HTML  "; //     
 String body = "<a href=http://www.cnblogs.com>" + "         </a></br>"
 + "<img src=\"c:\\dog.jpg\">";

 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 message.setRecipients(Message.RecipientType.TO,
 InternetAddress.parse(to));
 message.setSubject(subject);

 //               MimeBodyPart  
 MimeBodyPart contentPart = createContent(body, "c:\\dog.jpg");
 //                
 MimeBodyPart attachPart1 = createAttachment("c:\\  .MP3");
 MimeBodyPart attachPart2 = createAttachment("c:\\  .avi");

 //               MimeMultipart  
 MimeMultipart allMultipart = new MimeMultipart("mixed");
 allMultipart.addBodyPart(contentPart);
 allMultipart.addBodyPart(attachPart1);
 allMultipart.addBodyPart(attachPart2);

 //                MimeMultipart  
 message.setContent(allMultipart);
 message.saveChanges();
 return message;
 }

 public static MimeBodyPart createContent(String body, String filename)
 throws Exception {
 /*
 *       MIME   MimeMultipart  ,    MimeMultipart      MimeBodyPart  
 */
 MimeBodyPart contentPart = new MimeBodyPart();
 MimeMultipart contentMultipart = new MimeMultipart("related");

 /*
 *       HTML   MimeBodyPart  ,       MimeMultipart 
 */
 MimeBodyPart htmlBodyPart = new MimeBodyPart();
 htmlBodyPart.setContent(body, "text/html;charset=gb2312");
 contentMultipart.addBodyPart(htmlBodyPart);

 /*
 *          MimeBodyPart  ,       MimeMultipart 
 */
 MimeBodyPart gifBodyPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource(filename);
 gifBodyPart.setDataHandler(new DataHandler(fds));
 contentMultipart.addBodyPart(gifBodyPart);

 //  MimeMultipart     MimeBodyPart   
 contentPart.setContent(contentMultipart);
 return contentPart;
 }

 public static MimeBodyPart createAttachment(String filename)
 throws Exception {
 //        MimeBodyPart  ,            
 MimeBodyPart attachPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource(filename);
 attachPart.setDataHandler(new DataHandler(fds));
 attachPart.setFileName(fds.getName());
 return attachPart;
 }
}
ComplexMessage.eml 파일 을 열 면 다음 과 같은 내용 을 볼 수 있 습 니 다.

이제 우 리 는 순수한 텍스트 의 메 일,HTML 형식의 메 일,그리고 내 장 된 그림 과 첨부 파일 이 있 는 메 일 을 만 드 는 법 을 배 웠 습 니 다.다음 편 은 메 일 자바 메 일 입문 세 번 째 메 일 발송 을 어떻게 보 내 는 지 소개 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기