이메일의 기본 개념에 대한 소개
이메일은 자신감을 전달하고 온라인으로 의사 소통하는 데 사용되며 가장 중요한 인터넷 서비스 중 하나입니다. 통계에 따르면 인터넷 서비스의 30%가 이메일과 관련이 있습니다. 동시에, 우리는 그것이 일상 생활, 직장 및 사무실에서 중요한 역할을한다는 것을 부정 할 수 없습니다. 예를 들어, 많은 OFIEST AUTOMATION 프로젝트 (OAS)에는 이메일을 보내는 기능이 있습니다. Outlook과 같은 수동 방법을 사용하는 경우 적합하지 않습니다. 이 고속 시대에는 작업을 자동화 할 수 있도록 작업 효율성을 제공해야합니다. 동시에, 많은 웹 사이트는 이메일을 보내야합니다. 등록 정보를 통해 새로 등록 된 사용자에게 환영 이메일을 보내고 웹 사이트의 최신 활동 정보를 전자 메일 등을 통해 모든 등록 된 회원에게 보내십시오.
이메일 개발을 시작하기 전에 : 이메일 시스템, 메일 서버, 이메일, 메일 클라이언트 소프트웨어, 메일 전송 프로토콜 및 이메일 전송 프로세스의 몇 가지 개념을 이해해야합니다.
이메일 시스템
기존 우편 서비스와 마찬가지로 이메일 시스템은 이메일 사무실, 이메일 전송 및 수신 시스템으로 구성됩니다. 발신자 및 수신자는 실제로 컴퓨터에서 실행되는 메일 클라이언트 프로그램 인 이메일 전송 및 수신 시스템을 통해 이메일을 보내고받습니다. 이메일 사무실은 브리지를 재생하며, 실제로 서버에서 실행되는 메일 서버 프로그램입니다. 이메일 처리 과정은 우편 서비스 과정과 유사합니다.
메일 서버
메일 서버는 이메일을 관리하는 데 사용되는 장치입니다. 인터넷에는 126, 163, Hotmail ...과 같은 많은 수의 전자 메일 서버가 있습니다.
이메일 서버에서 제공하는 주요 기능 :
1. 사용자가 보낸 이메일을받습니다.
2. 사용자가 전달한 이메일을 대상 메일 서버로 전달하십시오.
3. 다른 이메일 서버에서 전달한 이메일을 받고 관리하는 사용자의 이메일에 이메일을 저장합니다.
4. 이메일을 읽을 수있는 사용자에게 이메일을 읽을 수 있습니다.
메일 서버는 이메일 시스템의 핵심을 형성합니다. 각 수신자는 특정 메일 서버에있는 사서함 (사서함)이 있습니다. Bob의 사서함은 그에게 전송 된 이메일 메시지를 관리하고 유지하는 데 사용됩니다. 전자 메일 메시지의 일반적인 여정은 발신자의 사용자 에이전트 인 발신자의 이메일 서버로 시작하여 수신자의 이메일 서버로 전송 된 다음 수신자의 이메일 주소로 전달됩니다. Bob이 사서함에서 이메일 메시지를보고 싶을 때 사서함을 저장하는 메일 서버는 그가 제공 한 사용자 이름과 비밀번호로 그를 인증합니다. Alice의 메일 서버는 또한 Bob의 메일 서버 장애를 처리해야합니다. Alice의 Mail Server가 즉시 Mail 메시지를 Bob의 메일 서버에 전달할 수없는 경우 Alice의 서버는 메시지 큐에 저장 한 다음 나중에 전달하려고 시도합니다. 이 시도는 일반적으로 30 분 정도마다 수행됩니다. 며칠 후에 시도가 성공하지 못하면 서버는 메시지 대기열에서 메시지를 제거하고 다른 이메일 메시지로 발신자 (예 : Alice)에 알립니다.
이메일
이메일은 네트워크를 통해 서로 정보를 전송하고받는 최신 커뮤니케이션 방법입니다. 전자 수단으로 정보 교환을 제공하고 인터넷에서 가장 널리 사용되는 서비스 인 커뮤니케이션 방법입니다. 네트워크의 전자 메일 시스템을 통해 사용자는 매우 저렴한 가격으로 세계 어느 곳에서나 인터넷 사용자에게 연락 할 수 있습니다. 이 이메일은 텍스트, 이미지, 사운드 등과 같은 다양한 방식으로있을 수 있습니다. 동시에 사용자는 많은 무료 뉴스 및 특별 이메일을 받고 쉬운 정보 검색을 실현할 수 있습니다.
이메일은 봉투와 내용의 두 부분으로 구성됩니다. 봉투는 메일 헤더라고도하며 이메일 서버는 봉투에 대한 신뢰에 따라 메일을 제공합니다. 내용을 메일 본문이라고하며 이메일의 특정 콘텐츠를 제공하는 데 사용됩니다.
인터넷의 이메일 주소는 전 세계적으로 고유하며 형식은 "이메일 이름@Mail Server 도메인 이름"입니다. 도메인 (메일 도메인)은 이메일 서버의 기본 관리 단위입니다. 전자 메일 서비스는 도메인 기반이며 각 사서함은 한 사용자에게 해당합니다. 메일 서버 도메인 이름은 등록 된 DNS 도메인 이름이어야하며 MX (Mail Switch) 레코드와 일치해야합니다. DNS는 도메인 이름과 호스트 이름을 IP 주소로 해결하는 데 사용됩니다. MX 레코드는 도메인 이름의 메일 서버 호스트 레코드를 가리 킵니다.
이메일 클라이언트 소프트웨어
이메일 클라이언트 소프트웨어는 이메일 서버와 통신 할 책임이 있으며, 이는 주로 사용자가 SMTP 서버 및 POP3/IMAP Mail 서버에 이메일을 보내서 사용자의 이메일을 읽을 수 있도록 도와주는 데 사용됩니다. 이메일 클라이언트 소프트웨어는 일반적으로 이메일 작성, 전송 및 수신을 통합합니다.
이메일
이메일 주소라고도하는 각 이메일 서버 위에서 여러 이메일 주소를 시작할 수 있습니다. 사용자가 다른 사람의 이메일을 수락하고 보내는 실제 우편 주소와 유사합니다.
이메일을 얻으려면 이메일 서버에 적용해야합니다. 정확히 말하면, 이메일은 실제로 사용자가 이메일 서버에 적용하는 계정입니다. 메일 서버는 수신 된 메일을 사서함 공간에 계정에 할당 된 상태로 유지하고 사용자는 주소에서 수신 한 이메일 메시지를 보도록 요청하는 사용자 이름 및 비밀번호를 통해 메일 서버에 로그인합니다.
이메일 전송 프로세스
이메일 시스템은 클라이언트/서버 모드에 있습니다. 이메일 배송에는 다음 3 가지 중요한 모듈이 필요합니다.
UA (Mail User Agent, Mail User Agent) : 사용자는이를 통해 이메일 서버를 처리합니다. MUA는 실제로 메일 클라이언트 소프트웨어입니다.
MTA (Mail Transfer Agent, Mail Transfer Agent) : 주로 수신 및 전송 된 메일 처리, MUA 또는 MTA에 메일 배송 서비스를 제공하고 다른 MTA가 보낸 메일을받는 데 주로 책임이 있습니다.
MDA (Mail Delivery Agent, Mail Delivery Agent) : 현지 우편 배송을 담당합니다. MTA가 특정 이메일을 로컬 사용자에게 보내기로 결정하면 MTA는 이메일을 MDA 프로그램에 배포하여 사용자에게 전달합니다.
특정 전송 프로세스는 다음과 같습니다.
1. 발신자는 MUA를 사용하여 이메일을 MTA로 보냅니다.
2. 이메일을받은 후 MTA는 수신자가 로컬 계정인지를 결정합니다. 로컬 계정 인 경우 계정의 이메일 주소로 MDA로 넘겨주고 전송 프로세스를 완료하고 5 단계로 건너 뜁니다. 그렇지 않은 경우 다음 단계를 수행하십시오.
3. MTA는 이메일 릴레이 전달 설정을 기반으로 이메일을 전달하는 방법을 결정합니다.
4. 최종 목적의 MTA는 MDA를 그의 처리로 넘겨 줄 것이며 MDA는 이메일을 수신자의 이메일 주소로 전달합니다.
5. 수신자는 MUA를 사용하여 전자 메일 주소가 POP/IMAP 프로토콜을 통해 서버에 연결하고받은 편지함에 이메일이 있는지 확인하도록 요청합니다. 이메일이 있으면 수신자의 MUA가 전송됩니다.
참고 : 이메일 액세스 서비스는 이메일을받은 MTA가 아니라 POP 또는 IMAP 서버 소프트웨어로 표시됩니다. 둘의 역할이 분리되어 있습니다.
우편 전송 프로토콜
이메일 서비스 전송은 주로 다음 3 개의 네트워크 프로토콜을 사용합니다.
SMTP (간단한 우편 전송 프로토콜)
SMTP는 간단한 우편 전송 프로토콜입니다. 표준 TCP 포트는 25입니다. MUA는 이메일을 MTA로 보냅니다. MTA는 다음 MTA로 이메일을 보내며 SMTP를 사용해야합니다. SMTP의 목표는 메일을 안정적이고 효율적으로 제공하는 것입니다. 배송 서브 시스템과 무관하며 데이터 유닛의 순서를 전송할 수있는 하나의 채널 만 필요합니다.
SMTP는 다른 메일 서버의 사용자가 수집 할 수없는 "일원"프로토콜입니다. 클라이언트/서버 모드를 채택합니다. 메일을 전송하는 SMTP 프로세스는 SMTP 클라이언트이며 메일 수신을 담당하는 SMTP 프로세스는 SMTP 서버입니다. 완전한 SMTP 통신 프로세스에는 주로 연결 설정, 메일 제공 및 연결 공개의 세 가지 프로세스가 포함됩니다.
연결 설정 : 먼저 발신자는 이메일을 이메일 캐시로 보냅니다. SMTP 클라이언트는 이메일 캐시를 정기적으로 스캔합니다. 메시지가 있으면 SMTP 서버와 TCP 연결을 설정 한 다음 hrllo 명령을 보내서 발신자의 호스트 이름을 첨부합니다.
배송 이메일 : SMTP 클라이언트는 Mail 명령을 사용하여 전자 메일을 보내기 시작하여 발신자의 주소를 제공합니다. 그런 다음 RCPT 명령을 실행하고 수신자의 주소를 제공합니다. 마지막으로 데이터 명령을 실행하여 이메일 컨텐츠를 전송합니다.
연결 해제 : 메일이 배달 된 후 SMTP 클라이언트는 OUT 명령을 보내 TCP 연결을 닫으라고 요청합니다.
팝 (우체국 계약)
팝은 우체국 프로토콜입니다. 표준 TCP 포트는 110이며 주로 이메일 수신에 사용됩니다. MUA는 팝 프로토콜을 통해 MTA의 사용자받은 편지함에 연결하여받은 편지함에서 사용자 메일을 읽거나 다운로드합니다.
현재 사용되는 팝 프로토콜은 POP3입니다. POP3는 TCP를 전송 프로토콜로 사용합니다.
IMAP (인터넷 정보 액세스 프로토콜)
IMAP는 인터넷 메시지 액세스 프로토콜입니다. 표준 TCP 포트는 143으로 MUA가 MTA에서 메일을 수집 할 수 있습니다. 대상 볼 IMAP 프로토콜의 버전은 IMAP4입니다.
POP 및 IMAP는 클라이언트/서버 모드 모두에서 이메일을 수집하는 데 사용될 수 있습니다. 둘의 주요 차이점은 이메일을 다르게 검색한다는 것입니다. POP를 사용할 때 이메일은 서버에 있습니다. 이메일이 접수되면 이메일이 서버에서 사용자의 컴퓨터로 다운로드됩니다. IMAP는 메일이 서버에 저장되는 상황을 이해할 수 있으며, 다운로드 된 메일은 여전히 서버에 갇혀 메일 보관 및 공유를 용이하게합니다.
Javamail
1. Javamail 소개
Javamail은 이름에서 알 수 있듯이 개발자가 이메일을 처리 할 수있는 프로그래밍 인터페이스를 제공합니다. SUN이 발표 한 API는 이메일을 처리합니다. 일반적으로 사용되는 메일 전송을 편리하게 수행 할 수 있습니다. Javamail API는 SUN이 제공하는 표준 개발 패키지로 Java 개발자가 응용 프로그램에서 이메일 전송 및 수신 기능을 구현할 수 있도록합니다. SMTP, POP3 및 IMAP와 같은 일반적으로 사용되는 일부 이메일 프로토콜을 지원합니다. 개발자가 Javamail API를 사용하여 이메일 처리 소프트웨어를 작성하면 기본 메일 프로토콜의 구현 세부 사항을 고려할 필요가 없으며 Javamail 개발 패키지에서 해당 API 클래스를 호출하십시오.
2. Javamail 개발 환경
Javamail 개발 전에 해당 JAR 패키지를 가져와야합니다. JAR 패키지는 Oracle의 공식 웹 사이트에서 다운로드 할 수 있습니다 : http://www.oracle.com/technetwork/java/javamail/index.html.
다운로드가 완료되면 다음 디렉토리를 얻을 수 있습니다.
그 중에서 Mail.jar : Javamail 프로그램을 개발하는 데 사용되어야하는 핵심 개발 패키지입니다.
LIB 하위 디렉토리 :이 디렉토리에는 5 개의 독립적 인 이메일 개발 패키지가 포함되어 있습니다 : smtp.jar, pop3.jar, imap.jar 및 mailapi.jar. 이 5 개의 JAR 파일은 Mail.jar 파일 용 포장으로 분류됩니다. 그 중에서 Mailapi.jar는 메일 컨텐츠를 생성하고 메일을 일반 개발자에게 보내고 수신하는 API 클래스를 캡슐화하는 반면, 다른 3 개의 JAR 파일은 프로토콜에 해당하는 이름으로 서비스 구현 프로그램을 캡슐화합니다. . Java Mail 프로그램을 컴파일 할 때는 MailApi.jar 파일 만 있으면되지만 런타임에는 해당 메일 프로토콜의 기본 서비스 구현 프로그램이 있어야합니다. 애플리케이션에서 메일 전송 함수 만 사용해야하는 경우 두 파일 SMTP.JAR 및 MailAPI.JAR 만 설치할 수 있습니다. 메일 수신 함수 만 사용해야하는 경우 전체 Mail.jar 파일을 설치하지 않고도 두 개의 JAR 파일 Pop3.jar, imap.jar 및 mailapi.jar 만 설치할 수 있습니다.
LIB 디렉토리는 다음과 같습니다.
3. Javamail API 소개
Javamail API는 일반적으로 기능에 따라 다음 세 가지 범주로 나뉩니다.
1. 이메일 컨텐츠 API를 만들고 구문 분석합니다. 메시지 클래스는 이메일을 작성하고 구문 분석하기위한 핵심 API입니다. 인스턴스 객체는 이메일을 나타냅니다.
2. 이메일 전송을위한 API. 전송 클래스는 메일을 보내는 핵심 API 클래스입니다. 인스턴스 객체는 SMTP 프로토콜과 같은 특정 메일 전송 프로토콜을 구현하는 메일 전송 객체를 나타냅니다.
3. 이메일 수신에 대한 API. 스토어 클래스는 메일을받는 핵심 API 클래스입니다. 인스턴스 객체는 POP3 프로토콜과 같은 특정 이메일 수신 프로토콜을 구현하는 이메일 수신 객체를 나타냅니다.
Javamail의 워크 플로우는 다음과 같습니다.
이 워크 플로에서는 4 개의 객체, 메시지, 세션, 운송 및 저장소가 이메일을 보내고 받기 위해 밀접하게 연결됩니다. 우리는이 네 가지 핵심 API의 기능과 기능 만 이해하고 업무 관계 및 이메일 워크 플로우를 알고 있으며 Javamail을 쉽게 쓸 수 있습니다. Javamail의 보조 클래스의 경우 필요할 때 단서를 따라 문서를 확인하여 문제를 해결할 수 있습니다.
핵심 API 소개 :
메시지
메시지 클래스는 메일 생성 및 구문 분석의 핵심 API이며 인스턴스 객체는 이메일을 나타냅니다. 클라이언트가 이메일을 보내면 먼저 이메일 API를 사용하고 생성 된 이메일 데이터를 메시지 객체에 캡슐화 한 다음이 객체를 전송하여 API를 보내는 이메일로 전달하여 전송합니다. 클라이언트가 이메일을 받으면 API를받는 이메일은 메시지의 인스턴스 객체에 수신 된 유가 데이터를 설치하고 클라이언트는 API를 구문 분석 하여이 개체에서 수신 된 이메일 데이터를 구문 분석합니다.
세션
세션 클래스는 전체 애플리케이션에서 요구하는 환경 정보를 정의하고 클라이언트가 호스트 이름, 포트 번호 및 사용 된 메일 전송 및 수신 프로토콜과 같은 메일 서버와 네트워크 연결을 설정하기 위해 클라이언트가 세션 정보를 수집하는 데 사용됩니다. 세션 객체는 이러한 세션 정보를 기반으로 메일을 보내고 수신하기위한 상점 및 전송 객체를 구축하고 클라이언트가 메시지 개체를 만들도록 정보 지원을 제공합니다.
수송
전송 클래스는 메일을 보내는 핵심 API 클래스입니다. 인스턴스 객체는 SMTP 프로토콜과 같은 특정 메일 전송 프로토콜을 구현하는 메일 전송 객체를 나타냅니다. 클라이언트 프로그램이 메시지 객체를 생성 한 후에는 전자 메일 전송 API를 사용하여 전송 객체를 얻은 다음 메시지 객체를 전송 객체로 전달하고 전송 메소드를 호출하여 이메일을 지정된 SMTP 서버로 전송합니다.
가게
스토어 클래스는 메일을받는 핵심 API 클래스입니다. 인스턴스 객체는 POP3 및 IMAP 프로토콜과 같은 특정 메일 수신 프로토콜을 구현하는 메일 수신 객체를 나타냅니다. 클라이언트 프로그램이 메일을 받으면 메일 수신 API를 사용하여 스토어 객체를 얻은 다음 매장 개체의 수신 방법을 호출하여 지정된 POP3 서버에서 메일 데이터를 얻고 메일 데이터를 메일을 나타내는 메시지 객체로 캡슐화해야합니다.
IV. 예
공개 클래스 javamail_01 {public static void main (String [] args)은 예외 {properties propss = new Properties (); props.setProperty ( "mail.smtp.auth", "true"); props.setProperty ( "mail.transport.protocol", "smtp"); 세션 세션 = 세션 .getInstance (props); 세션 .SetDeBug (true); 메시지 msg = 새로운 mimemessage (세션); msg.setsubject ( "이것은 테스트 프로그램입니다 ..."); msg.settext ( "안녕하세요! 이것은 나의 첫 번째 Javamail 프로그램입니다 ---- Chen Ming"); msg.setfrom (new InternetAddress ( "******@163.com")); 전송 전송 = 세션 .getTransport (); 송신 .connect ( "smtp.163.com", 25, "*********", "************"); 운송 .sendMessage (MSG, New Address [] {New InternetAddress ( "[email protected]")); System.out.println ( "이메일이 성공적으로 전송되었습니다 ..."); 송신 .close (); }}