A.3. 인터넷메일의 동작방법

A.3.1. 메세지가 A지점에서 B지점으로 가는 방법

한호스트의 사용자가 다른 호스트의 사용자에게 메세지를 보내면, 무대뒤에서는 알아차리지 못하는 많은 일이 일어난다.

예를 들어 alice@alpha.example.com의 Alice가 bob@beta.examle.com의 Bob에게 메세지를 보낸다고 합시다. 다음과 같은 일이 벌어집니다.

Alice는 mutt이나 pine 등 자기의 Mail User Agent (MUA)로 메세지를 작성합니다. To 필드에 수신인, Subject필드에 메세지의 제목을, 그리고 메세지본문을 적습니다. 다음과 같을 겁니다.
To: bob@beta	 
Subject: lunch  

How about pizza?

  1. 메세지가 맘에 들면 MUA에게 보내도록 합니다.

  2. 여기서, MUA는 Date나 Message-Id 등과 같은 추가헤더필드를 덧붙이고, (예를들어서 bob@beta를 "Bob <bob@beta.example.com>"로 바꿔서) Alice가 넣은 값들을 고칩니다. 다음으로, MUA는 메일시스템에 메세지를 삽입합니다. 여기에는 두가지 방법이 있습니다. 메세지를 삽입하기 위해 메일시스템에서 제공하는 프로그램을 실행하거나, 로컬시스템 또는 원격메일서버상의 Simple Mail Transfer Protocol (SMTP)포트에 접속을 엽니다. 본 예제에서, 우리는 MUA가 로컬삽입프로그램을 사용해서 메세지를 MTA로 보낸다고 하겠습니다. 삽입과정의 자세한 내용은 MTA마다 다르지만, 유닉스시스템에서는 sendmail방식이 사실표준입니다. 이방식으로 MUA는 헤더와 본문을 공백줄로 분리해서 파일에 넣고, sendmail프로그램으로 그 파일을 보냅니다.

  3. 메세지가 구문이 올바르고 sendmail이 제대로 호출되어서 삽입을 성공했으면, 그 메세지는 이제 MTA의 책임입니다. 세부사항은 MTA마다 크게 다르지만, 대개 alpha의 MTA는 헤더를 검토해서 메세지를 어디로 보낼지 결정해서, beta에 SMTP접속을 열고, beta시스템의 MTA로 메세지를 전송합니다. SMTP대화에서 메세지는 두 부분으로 나눠서 보내지게 되는데, 그 하나는 봉투로서 수신인 주소 (bob@beta.example.com)와 회신주소 (alice@alpha.example.com)를 명시하고, 다른 하나는 메세지 그 자체로서 헤더와 본문을 이룹니다.

  4. beta 시스템에 bob이라는 사용자가 없어서 beta MTA가 메세지를 거부하면, alpha MTA는 회신주소인 alice@alpha로 바운스메세지를 보내서 문제를 알립니다.

  5. beta MTA가 메세지를 수용하면, 수신인 주소를 보고서 그것이 로컬이나 원격시스템에 있는지 결정합니다. 본 예제에서는 로컬이므로 MTA는 메세지를 직접 전달하거나, /bin/mail이나 procmail 등과 같은 Mail Delivery Agent (MDA)에게 건내줍니다.

  6. Bob이 메일쿼타를 초과했기 때문에 전달이 안되면, beta MTA는 봉투의 회신주소인 alice@alpha로 바운스메세지를 보냅니다.

  7. 전달이 잘되었으면, Bob의 MUA가 그 메세지를 읽어서 보여줄 때까지 그의 메일복스에 대기합니다.

A.3.2. 더많은정보

인터넷메일이 어떻게 작동하는 지에 대한 정보는 다음중 하나이상을 보십시오.

A.3.3. 인터넷 RFC들

인터넷의 Requests for Comment (RFC's)는 인터넷의 공식문서입니다. 이것들 대부분은 비평단계를 훨씬 넘어서 TCP, FTP, Telnet 등의 인터넷프로토콜과 여러 다양한 메일표준과 프로토콜을 정의합니다.

메일관련 RFC들의 전체리스트를 Internet Mail Consortium 에서 얻을 수 있습니다.