IT/etc

알아두면 유용한 e-mail 지식

generator 2010. 11. 24. 11:45

- 메시지 보내기 -  

(1) 윤승환은 자신의 메일 클라이언트 마이크로소프트의 아웃룩 익스프레스로 새로운 메시지를 작성한 후,  받는 사람에 권영일의 메일 주소인 bbb@amail.co.kr를 입력한다. 보내기 버튼, 또는  Alt+S 키를 눌러 메시지를 보낸다. 

(2) 보내기 버튼이 눌러지면 윤승환의 메일 클라이언트 프로그램은 mail.postman.co.kr로 25번 기본포트로 TCP 네트워크 연결을 시도한다(넷츠고같은 ISP 업체를 이용, 집에서 모뎀으로 사용하는 경우는 네트워크가 연결되지 않을 경우 자동으로 전화 접속 네트워크가 시도되어 네트워크에 연결된다). 메일서버는 (mail.postman.co.kr)은 사용자 ID와 비밀번호를 체크한 후 접속을 인증해 준다. 그리고 메시지를 받는다. 

(3) 윤승환의 메일 클라이언트는 보내는 사람을 윤승환(aaa@postman.co.kr)으로,  받는 사람을 권영일(bbb@amail.co.kr)로 해서 메시지를 받은 mail.postman.co.kr은 자신의 도메인인지 다른 도메인인지 확인을 하고 다른 도메인인 경우, 로컬 도메인에(인터넷 DNS)로 amail.co.kr의 IP 주소가 무엇인지 질의를 던진다. 그래서 amail.co.kr에 대한 MX 레코드를 읽어 우선순위(MX prefrence) 숫자가 가장 낮은 MX 레코드를 받는다. 

만약 최근에 postman.co.kr에서 amail.co.kr로 메일이 보내진 적이 있다면 윤승환의 로컬 DNS는 캐시 가장 위에 있는 값으로 바로 응답해 줄 것이다. 만약 보낸 적이 없다면 윤승환의 DNS는 다른 DNS 서버에게 질의를 던질 것이다. 실제 amail.co.kr에 대한 수신메일 서버로 stmt.amail.co.kr의 값이 적절한 노드라고 응답을 받는다.



(4) amail.co.kr에 대한 수신 메일서버에 대한 이름과 노드를 찾고 윤승환이 사용하는 SMTP 서버는 stmp.amail.co.kr에 TCP 네트워크 연결을 한다. STMP 규약에 의해 메시지를 전송한다.(윤승환 클라이언트가 mail.postman.co.kr 메일서버와 통신하는 방식과 거의 유사하다.) 

(5) 권영일의 메일 서버는 받는 사람의 e-mail주소를 확인하고 사용자 계정이 있는지를 확인한다. 그리고 권영일의 메일박스에 윤승환이 보낸 메시지를 저장한다. 

(6) 권영일의 STMP 서버가 메시지를 완벽하게 받으면 윤승환의 메일서버는 네트워크 연결을 끊는다. 

- 메시지 받기 - 

(6) 권영일이 자신의 컴퓨터로 와서 Netscape의 Messenger를 실행시키거나, 몇 분 단위로 새로온 메시지를 체크하라고 설정해 놓았다. 

(7) 권영일의 Messenger는 110번 포트를 이용해 pop-mail.amail.co.kr로 연결을 한다. 

(8) POP3서버는 권영일의 사용자 ID와 비밀번호를 체크하고 인증을 해준다. 

(9) 권영일의 클라이언트는 메일박스의 있는 메시지의 리스트를 요구하고 전체의 메시지를 요구한다. 만약 권영일의 Messanger에서 서버에 메시지를 남겨 놓고 자신의 메시지를 가져오기를 선택했다면 서버에 메시지가 남아 있는 상태에서 메시지를 가지고 오고, 가져온 메시지는 (UIDL)에 의핸 식별자가 구분되어 다시 그 메시지를 가져 오지는 않는다. 대부분의 POP3기본 설정은 메시지를 가지고 오면 POP3 서버의 메시지는 삭제된다. 

(10) 더 이상 새로운 메시지가 없으면 권영일의 Messanger는 연결을 끊는다. 

(11) 권영일의 컴퓨터의 Messanger에 저장되 메시지를 읽거나 프린트 할 수 있고 지우기를 하면 일반적으로 지운 폴더에 이동을 하고 완전히 지우기(shift+delete)를 눌러 메시지를 지우면 지운폴더로 메시지가 가지 않고 진짜로 지워진다. 



 



보내는 메일 서버(SMTP) 

- 위 그림에서 SMTP끼리 메일을 보내고 받고 하는 기능을 수행하는 메일 서버를 말하며 두 메일 서버가 통신하는 규약을 SMTP(Simple Message Transfer Protocal)라고 한다. 대표적인 프로그램으로는 Unix의 Sendmail, Qmail등이 있고, NT용으로는 Mailsite, Ewmac, Mercur 등이 있다.



- SMTP 서버는 어떤 사용자가 e-mail을 보내달라고 요청하면 어떻게 동작할까? SMTP 서버는 보내는 메일에 수정이나 첨부를 하지 않는다. 보내는 메일이 제멋대로 만들어져 있더라도 그냥 보내 버린다. 한글 메일의 헤더에 '이것은 영문이다'라는 정보가 들어가 있어도 그냥 보내 버린다. SMTP 서버는 주로 3가지 작업을 한다. 첫 번째 작업은 e-mail의 헤더에 있는 "TO:" 부분을 읽는다.



"TO:"에는 e-mail이 어디로 전송되어야 하는지에 대한 정보가 들어있다.



To: multi_man@amail.co.kr 이렇게 쓰인 문장을 분석해 내는데 SMTP 서버는 단지 amail.co.kr이라는 서버로 전달해야겠다는 결정만 한다. multi_man이라는 사용자에게 메일을 전달하는 것은 받는 메일 서버의 일이기 때문이다. 만약 amail.co.kr이라는 이름의 서버가 없거나 또는 서버는 있는데 그 서버에는 multi_man이라는 사용자가 없다면 에러 메시지를 첨부해서 보낸 사람에게 돌려 보내게 된다.



- 두 번째 하는 일은 e-mail에 자기가 알아볼 수 있는 메시지를 첨부하는 일이다. SMTP 서버는 하루에도 수만 통의 메시지를 보내고 받는데 그것들을 데이터베이스화하여 정리할 필요가 있다. 그렇게 하지 않으면 반송되어 오는 메시지가 언제 어디서 보내진 것인지 알 수 없을 것이고 도무지 그것이 자기가 보낸 건지도 알 수 없을 것이다. 그래서 보내는 e-mail의 헤더에 'Message-ID;"라는 부분을 첨가한다.



- 끝으로 SMTP는 잡다한 e-mail 헤더를 덧붙인다. e-mail 헤더는 SMTP가 자동으로 덧붙이는 것도 있고 사용자가 설정한 것도 있다. 사용자가 e-mail 프로그램에서 설정한 부분이 있으면 SMTP 서버는 이것을 헤더에 덧붙인다. 여러분이 e-mail 프로그램의 옵션에 자신의 소속을 밝히지 않았다면 'Organization:' 부분이 헤더에 기록되지 않을 것이다. 만약 아웃룩 익스프레스의 옵션에서 소속을 'Soongsil  National University, South Korea'라고 입력했다면 e-mail 헤더에는 다음과 같은 부분이 들어갈 것이다.



Organization: Soongsil National University, South Korea



- 그 외에 잡다한 헤더를 붙인 후 비로소 e-mail을 발송한다. 자세한 내용을 볼려면 Outlook Express의 경우 받은 메시지에 마우스를 올려 하이라이트시킨 후 오른쪽 마우스를 클릭하면 등록정보라는 메뉴를 클릭 해 보면 해더에 쓰여진 내용을 볼 수 있다.







받는 메일 서버 

IMAP(Internet Message Access Protocol)



- IMAP은 메시지를 사용자 서버에 따로 보관한다. 그래서 인터넷 연결이 되어 있고 IMAP이 지원되는 메일 클라이언트만 있으면 세계 어디서든지 자신의 메시지를 확인할 수 있다.  현재 Postman.co.krl과 같은 무료 webmail 서비스 개념과 비슷하다. 브라우저만 있으면 어디서든지 자신에게 온 메일을 읽을 수 있고 또한 메일을 보낼 수 있다.



- Imap은 사용자가 자신의 Inbox를 열면 메시지 헤더만 다운로드한다. 이후에 사용자가 메시지를 열면 그때야 사용자 컴퓨터로 메시지가 다운로드되기 때문에 시작 시간이 좀더 빠르다. 또한 메시지가 서버 상에 저장되어 있기 때문에 메시지를 수정하면 사용자 컴퓨터에서 다시 서버로 복사되고, 이 때문에 항상 수정된 우편함을 사용할 수 있다.



- 사용자가 메시지를 자신의 컴퓨터에 복사해 두지 않았다면 작업중에 서버의 연결이 끊겨 버릴 경우 제목은 살펴볼 수 있어도 서버에 다시 접속해야 메시지를 사용할 수 있게 된다. 메시지를 살펴보는 동안에 항상 접속되어 있어야 하고 읽지 않은 메시지를 보려면 항상 다시 접속해야 하기 때문에 접속 시간이 더 길어질 수 있다. 



POP(Post Office Protocol)



- 현재 대부분이 사용하고 있는 프로토콜이다. 



- 사용자가 메일 서버에 접속하면 일단 모든 메시지를 사용자 컴퓨터로 복사한다. 작업 중에 접속이 끊겨도 메시지를 볼 수 있다. 



- 사용자의 Inbox와 서버의 편지함을 동기화해야 한다. 이렇게 되면 접속할 때마다 새로운 메시지를 계속해서 다운로드해야 하기도 하고, 한 컴퓨터에서 메시지를 다운로드하면 다른 컴퓨터에서는 그 메시지를 볼 수 없고, 메시지를 다운로드할 때 사용했다가 이후에 사용하지 않게 된 컴퓨터에는 다운로드 메시지가 남아있게 된다. 결국, 가끔씩 모든 메시지를 보고 싶을 때 다른 컴퓨터에서 다운로드한 메시지는 사용하지 못한다.



  

MIME(Multi-purpose Internet Mail Extention) 



- 예전의 메일은 단순히 Text를 주고 받는 기능만 있었으나, MIME 규격을 통해 현재는 메일을 통해 파일을 보내거나 이미지/사운드를 보내는 등 여러 가지 다양한 형태의 메일이 가능하게 되었다.



MIME이란  다양한 목적을 위한 인터넷 메일의 확장 규격이다. MIME는 7비트/ASCII 문자만을 위한 인터넷 메일 표준 규약의 문제점을 해결하기 제안되었다. 8비트 문자와 다양한 바이너리 파일을 e-mail을 통해 올바르게 처리하려면 이 규약을 잘 지켜야 한다. MIME은 메시지를 안전하게 전송하기 위해 메시지와 관련된 여러 가지 사항을 정의하고 있다. MIME에서 규정하고 있는 전송 데이터 타입은 아래와 같다.



text

특정 문자셋(Charset)으로 구성된 텍스트 정보나, 포스트스크립트같은 formatted text 정보 전송에 사용



multipart

서로 다른 타입의 데이터를 갖는 여러 "body" 를 하나의 메시지로 조합하여 전송



application

application 데이터나 binary 데이터 전송



message

다른 전자 우편의 내용을 인캡슐레이션하여 전송



image

still image 데이터의 전송



audio

audio 데이터의 전송



video

video 데이터의 전송 (audio 를 부분으로 가질 수 있다)



- MIME은 전송 데이터에 관한 정보를 표시하기 위해 여러 가지 헤더를 가진다. 이 헤더는 데이터에 대한 정보임과 동시에 데이터의 안전성을 보장하기 위한 보증수표와 같은 것이다. 헤더의 정확한 정보를 통해 데이터의 손실없이 전세계 어디로 움직이는 데이터라도 원형을 유지할 수 있다.



MIME-Version:

전송 데이터가 따르고 있는 MIME 의 버전을 나타낸다.



Content-Type:

전송 데이터의 형식과 세부형식을 표시한다. 위에서 열거한 일곱 가지가 형식이 가능하며, 각 형식은 나름의 세부형식을 가지게 된다. 즉, text 는 세부형식으로 plain과 richtext 등을 가진다.



Content-Transfer-Encoding:

전송 데이터의 본문을 인코딩한 방법을 표시한다.



encoding/deconding



MIME 표준에서 권장하는 인코딩 방법은 다음과 같다. 이곳에 uuencode가 없다. uuencode는 유닉스 환경에서 오래전부터 사용되는 고전적 인코딩 방법이며 현재도 많이 사용되고 있다. 그러나, 앞으로 uuencode를 사용하여 데이터를 송수신하지 말아야 한다. 더 이상 uuencode로 인코딩된 데이터에 대해 누구도 안전한 전달을 보장하지 못한다. 인터넷을 통해 안전한 데이터의 송수신을 보장받으려면 MIME 규약을 지켜야 한다. 현재 MIME을 지원하는 응용 프로그램에서 주로 사용 되는 것은 7 bit, 8 bit, base64, QP 이고 나머지 두 방식은 거의 사용되지 않는다.



7 bit

디폴트 인코딩 방법으로, 전송 데이터의 본문은 미리 7bit로 되어 있어야 하며, 전송 데이터에 대해 실제 인코딩은 하지 않고, 단지 데이터가 7 bit mail-ready representation으로 되어 있다는 것만 나타낸다.



8 bit

전송 데이터가 8bit, 즉, ASCII 문자뿐만 아니라, non-ASCII 문자를 포함하고 있음을 나타내고, 역시 실제 데이터에 대한 인코딩은 하지 않는다.



binary

SMTP에서는 한 라인에 1,000 문자를 넘지 못하도록 규정하고 있는데, 7bit와 8bit는 이를 따르지만, binary 는 길이에 제약이 없고, 역시 실제 데이터에 대한 인코딩은 하지 않는다.



Base64

24bit(3byte)를 입력 받아서, 이를 6bit 씩 잘라 4byte를 출력하는 인코딩 방법이다. ISO646 모든 버젼과 EBCIDIC 모든 버젼의 문자셋과 알파벳을 똑같이 표현할 수 있다. Base64 인코딩은 Base64에서 정하는 딜리미터 (SPACE, TAB, CRLF 등)에 의해 구분되는 단위에 따라 하게 된다. 이를 encoded-word라고 하는데 encoded-word는 "=?charset?encoding?encoded-text?=" 로 표현되며, 문자셋은 인코딩의 대상이 되는 데이터의 문자셋을 나타낸다.



QP(Quoted-Printable)

MSB가 1 인 문자를 "0123456789ABCDEF" 를 사용해서 "=" 다음에 부호값에 해당하는 십육진수가 오는 형태로 인코딩하고, 부호값이 33에서 60, 62 에서 126까지인 문자는 ASCII 문자로 나타내고, 9에서 32까지의 부호값을 가지는 문자는 MSB가 1 인 문자와 같은 방식으로 인코딩한다. 이 방식으로 인코드된 데이터는 한 라인에 76 글자를 넘을 수 없다.



x-token

이 방식은 사용자가 정의한 코드를 사용할 수 있도록 고려한 것으로, "x-" 뒤에 사용자가 정의한 코드의 이름을 넣어 사용할 수 있다.