자바 메 일 입문 튜 토리 얼 분석 메 일(5)
1.Message 대상 의 getFrom,getSubject 등 방법 을 호출 하면 메 일의 보 낸 사람과 테마 등 정 보 를 얻 을 수 있 고 getContentType 방법 으로 메 일의 유형 을 얻 을 수 있 습 니 다.
2.Message.getContentType 방법의 반환 값 을 통 해 메 일 유형 을 판단 하고 Message.getContent 방법 으로 메 일 내용 을 얻 습 니 다.메 일 형식 이'text/plain'또는'text/html'이면 메 일 내용 이 일반 텍스트 임 을 표시 합 니 다.이 때 Message 대상 의 getContent 방법 으로 메 일 내용 을 받 은 다음 되 돌아 오 는 대상 의 형식 을 String 으로 변환 하여 디 스 플레이 소프트웨어 에 출력 하면 됩 니 다.메 일 형식 이"multipart/*"이면 메 일 내용 이 복합 형식 임 을 나타 내 므 로 Message.getContent 방법 을 복합 한 대상 을 Multipart 로 변환 해 야 합 니 다.
3.Multipart 대상 의 getCount 방법 을 호출 하여 Multipart 대상 에 몇 개의 Body Part 대상 이 봉인 되 어 있 는 지 확인 하고 for 순환 을 통 해 Multipart 대상 중의 모든 Body Part 대상 을 하나씩 추출 하여 처리 합 니 다.
4.모든 Body Part 대상 을 처리 할 때 먼저 Body Part 대상 의 getContentType 방법 으로 MIME 유형 을 얻 은 다음 에 MIME 유형 에 따라 다음 과 같은 세 가지 상황 을 처리 합 니 다.
MIME 형식 이'text/*'일 때 BodyPart 대상 에 저 장 된 것 이 이전 그림 의'text/plain'과 같은 일반 텍스트 데이터 임 을 나타 내 며,이때 첫 번 째 BodyPart 대상 의 getContent 방법 을 표시 하고 되 돌아 온 대상 을 String 으로 출력 하여 디 스 플레이 소프트웨어 에 표시 하면 됩 니 다.
MIME 형식 이 그림,소리 또는 첨부 파일 등 바 이 너 리 데 이 터 를 표시 할 때 위의 그림 의"image/gif"와 같이 Body Part 대상 을 호출 해 야 하 는 getDataHandler 방법 은 데 이 터 를 봉 인 된 DataHanlder 대상 을 얻 은 다음 DataHandler 대상 의 getInputStream 방법 으로 데이터 와 연 결 된 InputStream 대상 을 얻 습 니 다.이 InputStream 대상 을 통 해 원본 바 이 너 리 데이터 내용 을 얻 을 수 있 습 니 다.
MIME 형식 이'multipart/mixed'일 때 Body Part 대상 에 저 장 된 것 은 복합 MIME 메시지 임 을 나타 낸다.이 때 Body Part 대상 의 getContent 방법 을 호출 하여 복합 MIME 메 시 지 를 봉 인 된 대상 을 얻어 Multipart 형식 으로 변환 하고 이 어 3 번 과 4 번 째 급 작 스 러 운 작업 을 반복 하여 Multipart 대상 을 재 귀적 으로 호출 해 야 한다.
첨부 파일 이 있 는 프로그램 을 수신 하고 해석 합 니 다.
POP3Help.java
package mail;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Session;
import javax.mail.Store;
public class POP3Help {
public static Folder getFolder(String host, String username, String password) {
Properties prop = new Properties();
prop.setProperty("mail.store.protocol", "pop3");
prop.setProperty("mail.pop3.host", host);
Session mailSession = Session.getDefaultInstance(prop, null);
mailSession.setDebug(false);
try {
Store store = mailSession.getStore("pop3");
store.connect(host, username, password);
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_WRITE);
return folder;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
이 종 류 는 POP 3 서버 에 연결 하고 로그 인 하 며 메 일 폴 더 를 대표 하 는 Folder 대상 을 되 돌려 줍 니 다.index.html
<html>
<head>
<title>login.html</title>
</head>
<body>
<form action="login.jsp" method="post">
:<input name="host" type="text"><br/>
:<input name="username" type="text"><br/>
:<input name="password" type="password"><br/>
<input type="submit" value=" ">
<input type="reset" value=" ">
</form>
</body>
</html>
페이지 에 로그 인 하려 면 메 일 서버 의 호스트 이름,사용자 이름과 비밀 번 호 를 입력 해 야 합 니 다.login.jsp
<%@ page import="javax.mail.*,mail.*"
contentType="text/html;charset=GB2312" %>
<%
String host = request.getParameter("host");
String username = request.getParameter("username");
String password = request.getParameter("password");
String from = "";
String subject = "";
Folder folder = POP3Help.getFolder(host,username,password);
session.setAttribute("folder",folder);
Message [] messages = folder.getMessages();
for(int i=0;i<messages.length;i++)
{
try
{
from = messages[i].getFrom()[0].toString();
subject = messages[i].getSubject();
out.print(i + 1);
%>
:<%=from %> :<%=subject %>
<a href="displayMsg.jsp?msgnum=<%=i+1%>"> </a><br/>
<%
}
catch(Exception e){}
}
%>
메 일 폴 더 의 모든 메 일 가 져 오기displayMsg.jsp
<frameset rows="25%,*">
<frame src="/mailDemo/DisplayHead?msgnum=<%=request.getParameter("msgnum")%>" scrolling="no">
<frame src="/mailDemo/DisplayContent?msgnum=<%=request.getParameter("msgnum")%>" scrolling="no">
</frameset>
메 일 보 여주 기 위 한 정보DisplayHead.java
package mail;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.internet.MimeUtility;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class DisplayHead extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
int msgnum = Integer.parseInt(request.getParameter("msgnum"));
Folder folder = (Folder) session.getAttribute("folder");
try {
Message msg = folder.getMessage(msgnum);
String from = msg.getFrom()[0].toString();
String subject = msg.getSubject();
String sendDate = DateFormat.getInstance().format(msg.getSentDate());
out.println(" :" + subject + "<br/>");
out.println(" :" + from + "<br/>");
out.println(" :" + sendDate + "<br/><br/>");
System.out.println("contentType:" + msg.getContentType());
// "multipart/*"
if (msg.isMimeType("multipart/*")) {
Multipart mp = (Multipart) msg.getContent();
for (int i = 0; i < mp.getCount(); i++) {
BodyPart bp = mp.getBodyPart(i);
// BodyPart ,
if (bp.getDisposition() != null) {
String filename = bp.getFileName();
System.out.println("filename:" + filename);
if (filename.startsWith("=?")) {
// RFC822
filename = MimeUtility.decodeText(filename);
}
//
out.print(" :");
out.print("<a href=HandleAttach?msgnum=" + msgnum + "&&bodynum=" + i + "&&filename=" + filename
+ ">" + filename + "</a><br/>");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
메 일 헤더 내용 표시DisplayContent.java
package mail;
import java.io.IOException;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class DisplayContent extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream sos = response.getOutputStream();
HttpSession session = request.getSession();
int msgnum = Integer.parseInt(request.getParameter("msgnum"));
Folder folder = (Folder) session.getAttribute("folder");
try {
Message msg = folder.getMessage(msgnum);
// mixed , ,
if (!msg.isMimeType("multipart/mixed")) {
response.setContentType("message/rfc822");
msg.writeTo(sos);
} else {
//
Multipart mp = (Multipart) msg.getContent();
int bodynum = mp.getCount();
for (int i = 0; i < bodynum; i++) {
BodyPart bp = mp.getBodyPart(i);
/*
* MIME disposition , MIME mixed ,
* MIME
*/
if (!bp.isMimeType("multipart/mixed") && bp.getDisposition() == null) {
response.setContentType("message/rfc822");
bp.writeTo(sos);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
메시지 본문 보이 기HandleAttact.java
package mail;
import java.io.IOException;
import java.io.InputStream;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class HandleAttach extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
HttpSession session = request.getSession();
ServletOutputStream out = response.getOutputStream();
int msgnum = Integer.parseInt(request.getParameter("msgnum"));
int bodynum = Integer.parseInt(request.getParameter("bodynum"));
String filename = request.getParameter("filename");
Folder folder = (Folder) session.getAttribute("folder");
try {
Message msg = folder.getMessage(msgnum);
//
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
Multipart multi = (Multipart) msg.getContent();
BodyPart bodyPart = multi.getBodyPart(bodynum);
InputStream is = bodyPart.getInputStream();
int c = 0;
while ((c = is.read()) != -1) {
out.write(c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
첨부 파일 처리 에 사용web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>mailDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>DisplayHead</servlet-name>
<servlet-class>mail.DisplayHead</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayHead</servlet-name>
<url-pattern>/DisplayHead</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DisplayContent</servlet-name>
<servlet-class>mail.DisplayContent</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayContent</servlet-name>
<url-pattern>/DisplayContent</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HandleAttach</servlet-name>
<servlet-class>mail.HandleAttach</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HandleAttach</servlet-name>
<url-pattern>/HandleAttach</url-pattern>
</servlet-mapping>
</web-app>
먼저 tomcat 서버 를 시작 한 다음 브 라 우 저 에 입력 하 십시오.http://localhost:8080/mailDemo/index.html사용자 이름과 비밀 번 호 를 입력 하 십시오.
메 일 폴 더 에 있 는 모든 메 일 을 보 여 줍 니 다.
클릭 하여 메 일 링크 보기
첨부 파일 뒤의 파일 이름 을 누 르 면 해당 첨부 파일 을 다운로드 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 메 일 입문 튜 토리 얼 분석 메 일(5)지난 편 메 일 을 받 는 과정 에서 콘 솔 에서 인쇄 한 내용 을 우 리 는 읽 을 수 없다.사실은 우리 스스로 복잡 한 메 일 을 분석 하 는 것 은 쉽 지 않다.메 일 안의 형식 과 규범 이 매우 복잡 하 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.