iWiz ShareBase

IT Specialist 윤태현의 iWiz ShareBase는 IT뿐 아니라 각종 잡다한 지식들을 함께 나누는 지식공유 커뮤니티입니다.

iWiz,ShareBase,윤태현,Java,JSP,EJB,IT,정보기술,웹프로그래밍,PHP,ASP,DBMS,MySQL,서버,네트워크,server,network,WAS,웹애플리케이션,블로그,blog,웹서버,DB,오라클,oracle,mysql,JRun,웹로직,톰캣,tomcat,아파치,자동차,EF쏘나타,로또 6/45

갤러리 Pixelgrapher.com | 로또 6/45 번호생성 및 통계 데이터 | 전체기사보기 | 전체글 #1 | 전체글 #2 | 전체글 #3 | 전체글 #4 | 전체글 #5 | 전체글 #6 | 전체글 #7 | 전체글 #8 | 전체글 #9 | 전체글 #10 |
HOME iWiz
ShareBase
Remember 0523 & 0818
지식은 나눌수록 커집니다 - iWiz's ShareBase
웹프로그래밍(기타) PHP, ASP, Perl, CGI 등 각종 웹프로그래밍에 관한 자료들입니다.


  iWiz(2004-07-12 18:55:16, Hit : 7154, Vote : 31
 http://www.wz.pe.kr

인터넷 메일 메시지의 구조


. 인터넷 텍스트 메시지의 구조

인터넷 텍스트 메시지는 다음과 같이 구성됩니다.

메시지 = 헤더 + 본문
헤더와/본문의 구분 : NULL 라인


   메시지는는 한 개 이상의 텍스트 라인으로 구성합니다.
   각 라인은 Carriage Return(CR)과 Line Feed(LF)의 조합(CRLF)으로 끝나게 되어 있으며, 헤더의 경우를 제외하면 각 라인의 최대 길이는 최대 76자로 되어 있습니다.
   헤더와 본문을 구분하기 위해서 사이에 NULL 라인을 넣게 되어 있네요. NULL 라인 이라 함은 CRLF로만 구성된 라인을 말합니다.

헤더에서 보면 가끔 한 줄이 76자를 넘는 필드도 있습니다. 그래도 한도 끝도 없이 길어질 수는 없고 대략 한 줄의 길이를 최대 512자 정도(SMTP에서의 제한)로 생각하면, 큰 문제 없습니다.

위에서 나타낸 구조에 따르자면 헤더가 끝나는 시점은 NULL 라인이 나타나는 시점이겠죠. 즉, NULL 라인이 처음 나오기 전까지가 헤더라고 볼 수 있습니다. 그런데, 잘못 구성된 메일 시스템에서 헤더 중간에 NULL 라인을 들어간 것들이 가끔 있습니다.

 

2. 헤더 필드의 구성

헤더에 들어가는 각 필드는,

<필드 이름>: <필드 내용>CRLF

의 형식으로 구성됩니다.

여기서 <필드 이름>은 대소문자를 구분하지 않습니다. 그러니까, From/FROM/from 이런 것들은 모두 똑같다는 겁니다.
경우에 따라서 읽는 사람이 좀 더 편하게 읽게 하기 위해, 또는 다른 제약 때문에, 필드 내용을 여러 줄에 쓰는 경우가 있습니다. 이 경우에는 연속된 필드라는 것을 표시하기 위해서 줄의 맨 앞에 연속된 공백문자(LWSP Char: Linear White Space Character)를 넣도록 되어 있습니다. LWSP에 해당되는 문자로는 SPACE, TAB 등을 들 수 있겠죠. (Backspace는 제외됩니다)

예를 들면, 아래와 같은 네 가지 헤더 필드는 모두 똑같습니다. CRLF도 LWSP 문자의 일부로 인식하는거죠. 여러 줄의 필드 내용이 합쳐질(unfolding) 때에는 LWSP 문자들은 하나의 SPACE 문자로 처리합니다. 백스페이스 같은 문자는 공백 문자로 취급하지도 않을 뿐더러 좀 위험하겠죠.

To: "Joe & J. Harvey" , JJV @ BBN
To: "Joe & J. Harvey" ,
       JJV@BBN
To: "Joe & J. Harvey"
       , JJV
   @BBN
To: "Joe &
   J. Harvey" , JJV @ BBN


그래서 헤더를 처리할 때에는 첫 글자가 SPACE 혹은 TAB이면 전줄의 헤더에 이어지는 줄이라는 것을 알 수가 있죠. 보통 대부분의 시스템에서는 간편하게 TAB 하나만 넣는 경우가 많지만, 경우에 따라서는 여러 개의 SPACE가 들어가는 경우도 있습니다. 따라서 LWSP에 대한 처리는 필수라고 할 수 있겠지요.



3. 괄호의 사용

헤더의 필드 내용에서는 괄호도 용도가 정해져 있습니다.

(, ) : 괄호는 주석을 넣기 위해서 사용합니다.
:, ; : 콜론과 세미콜론은 주소 지정시에 그룹을 표시하기 위해서 사용합니다.
<, > : 양쪽 꺽쇠는 주소 지정이나 Routing 경로를 표시할 때, 사용합니다.
[, ] : 대괄호는 IP Address를 직접 지정하기 위해서 사용합니다.



다음에는 각 헤더 필드에 대한 내용을 보도록 하죠...

 

1. 헤더 필드의 순서

헤더 필드의 순서는 꼭 이리해야 한다...고 규정짓고 있지는 않지만, 이 순서가 권장되고 있습니다.
RFC에서 Recommended 라고 표시되는 부분인데, 이런 부분은 반드시 강제하는 것은 아니지만, 여러 가지 이유로 볼 때, 큰 문제 없으면 따르도록 되어 있는 부분들이고, 실제로 대부분의 관련된 프로그램에서 그렇게 하고 있습니다.

Return-Path
Received
Date
From
Subject
Sender
To
cc
그외...

대부분의 MTA(Mail Transfer Agent)에서 이 순서를 거의 지키고 있습니다.
Microsoft Exchange Server의 경우에, 원하는 대로 헤더 필드가 들어오지 않는 경우에는 Decoding에 문제가 좀 생기기도 한다는군요.



2. 각종 헤더 필드

날짜/시간 관련 헤더 필드

   "Date" 헤더 필드

문법
"Date: " date-time
date-time := [ day "," ] date time
day := "Mon" / "Tue" / "wed" / "Thu" / "Fri" / "Sat" / "Sun"
date := 1or2Digit month 2Digit
month := "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun"
           / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
time := hour zone
hour := 2Digit ":" 2Digit [":" 2Digit]
zone := "UT" / "GMT" ; Universal Time
         / "EST" / "EDT" ; Eastern
         / "CST" / "CDT" ; Central
         / "MST" / "MDT" ; Mountain
         / "PST" / "PDT" ; Pacific
         / 1Alpha ; Military (Z, A, M, N, Y...)
         / ("+" / "-") 4Digit ; Local Difference


Mon, 11 Oct 1999 16:17:24 +0900

문법이 굉장히 복잡하지요? 보기만 복잡하지 예를 보면 아주 간단합니다. 맨 앞의 요일은 있을 수도 있고, 없을 수도 있습니다. 그 뒤에는 날짜와 시간, 그리고 지역 시간대를 표시합니다. 이 필드는 보통 MTA가 알아서 넣어 주죠.


경로 추적을 위한 헤더 필드

여기에는 Return-Path, Received가 있습니다.

Return-Path: route-addr
Received: ...
...

   "Return-Path" 헤더 필드
메시지 전송이 실패했을 경우, 메시지가 되돌아갈 메일박스(id@host 형식)를 지정합니다. 메일 박스, 주소를 지정하는 방식은 워낙 다양하므로, 뒤에 보도록 하죠. 이 필드도 보통 MTA가 설정해주도록 되어 있습니다.

   "Received" 헤더 필드
실제 메시지 소스를 보면 이 헤더 필드는 여러 개가 들어 있는 것을 알 수 있습니다. 이 필드는 메일이 어떤 중간 경로를 통해서 전달되었는지를 추적하기 위해서 MTA가 자동적으로 추가합니다. 보통 MTA를 설정할 때, 여기에 몇 개 이상의 "Received" 헤더가 있으면 메일이 루프를 돌고 있거나 전달될 수 없는 것으로 처리하는 경우가 많죠.


발신자에 대한 정보를 담고 있는 헤더 필드

여기에는 From, Sender, Reply-To가 있습니다.

From: mailbox
Sender: address
Reply-To: address

   "From" 헤더 필드
From은 편지 봉투의 보낸 사람 이름 쓰는 곳에 쓰는 내용입니다. 즉, 메시지를 보낸 사람의 (명목상?) 메일 박스를 표시합니다.

   "Sender" 헤더 필드
Sender는 있어도 되고 없어도 됩니다. 있는 경우에는 From과 의미가 약간 중복되죠. 우리가 직접 편지를 쓰더라도 다른 사람에게 우체국에 가져가서 보내줄 것을 부탁할 수 있듯이, 이 필드는 실제 메시지를 보낸 사람을 표시하기 위해서 사용합니다. 그럴 경우가 아니라면 필요없죠.

   "Reply-To" 헤더 필드
Reply-To는 메시지의 답장을 받을 사람의 주소입니다. 보통의 경우는 From의 주소와 같은 주소를 사용합니다. 경우에 따라서 다르게 설정할 수도 있겠죠.

이 Field가 설정되어 있는 경우에는 답장을 보낼 때, From을 참조하지 않습니다.
이 Field가 설정되어 있지 않은 경우에는 From를 참조하여 답장을 보내게 됩니다.


수신자에 대한 헤더 필드

여기에는 To, Cc, Bcc가 있습니다.

To: address
cc: address
bcc: address

   "To" 헤더 필드
메시지를 받을 사람(들)의 주소를 지정합니다. 여러 사람을 지정할 수도 있고, 그룹을 만들 수도 있습니다. 이 Field에 지정되는 수신자는 "주수신자"라고 부릅니다.

   "cc" Field
역시 메시지를 받을 사람(들)을 지정할 수 있습니다. 여기에 지정되는 수신자는 "부수신자"라고 부릅니다. 보통 "참조"라고 표시하죠.

   "bcc" Field
"부부수신자"라고 해야 하나요? 보통 "숨은 참조"라고 표시합니다.


기타 헤더 필드

Subject: text
Messeage-ID: msg-id
In-Reply-To: msg-id

   "Subject" 헤더 필드
말 그대로 메시지 제목을 적는 필드입니다. 이 필드가 Optional하다는 것은, 이 필드가 없어도 제목은 메일의 송수신에는 지장이 없다는 뜻이 되겠네요.

   "Message-ID" 헤더 필드
말 그대로 메시지의 ID죠. 보통 현재 시각 (1970년 1월 1일 자정부터 지금 시각까지를 초단위로 계산한 것), MTA의 IP주소 등을 조합해서 만듭니다. 어떤 곳에 쓰인다는 언급은 없습니다. 메일의 열람 확인에 쓰이기도 합니다.


확장 / 사용자 정의 헤더 필드

보통 "X-"로 시작하는 헤더 필드는 RFC에서 표준으로 규정하고 있는 필드가 아니라, 확장된 헤더 필드를 의미합니다. 그 중에서 많이 쓰이는 것으로는 "X-Priority", "X-Mailer" 등이 있습니다.



3. 주소 지정 방식

일반적인 도메인 이름을 지정할 때는 별 제약이 없지만, 직접 IP Address를 지정할 때에는 대괄호([, ])를 사용합니다.

[10.0.3.19]


아래는 실제로 From, To 등에 많이 사용하는 주소 지정 방법들입니다.

   메일 박스를 직접 지정합니다. 가장 간단한 방법이죠.

Neuman@BBN-TENEXA

   앞에 메일 박스를 수식하는 문자를 함께 사용하는 방법입니다. 이 방법을 가장 많이 사용하죠.

Alfred Neuman

   따옴표 사용

"George, Ted"

   주석도 사용가능합니다. 하지만 처리하기 복잡해지겠죠.

Wilt. (the Stilt) Chamberlain@NBA.US
(Wilt.Chamberlain@NBA.US와 동일합니다)

   그룹 지정이 가능합니다.

Gourments: Pompous Person ,
    Childs@WGBH.Boston, Galloping Gourmet@
   ANT.Down-Under (Australian National Television),
    Cheapie@Discount-Liqours;
   Cruisers: Port@portugal, Jones@EA;
    Another@Somewhere.SomeOrg


* iWiz님에 의해서 게시물 이동되었습니다 (2010-02-03 16:57)



62   mod_throttle 모듈을 이용한 사용자 트래픽 제어  iWiz 2006/06/22 9065 0
61   Tomcat-Apache using JK2 connector  iWiz 2004/03/21 7839 41
60   RedHat 9.0에서의 JRun JSP 컴파일러의 문제점  iWiz 2004/01/04 5555 50
59   RedHat 9.0에서의 JRun-Apache 커넥터의 문제점  iWiz 2004/01/04 5190 48
58   JRun 4.0의 튜닝 관련 옵션  iWiz 2004/01/04 5949 68
57   JRun 4.0의 Activity 모니터링 방법  iWiz 2004/01/04 4923 57
56   JRun4.0: DataSource 커넥션풀 관련 옵션 [4]  iWiz 2004/01/04 6665 46
55   JRun에서 JSP 컴파일시 java 파일 생성하기  iWiz 2004/01/04 8072 63
54   JRun의 실제 서비스 운영시 고려사항  iWiz 2004/01/04 6375 44
53   수정된 인터넷 익스플로러에서 상호작용 ActiveX 컨트롤 활성화 가이드  iWiz 2006/03/03 8458 4
52   HTML 특수기호 엔터티(Entity) 테이블 [2]  iWiz 2006/03/03 14185 2
51   웹사이트의 새로운 혁명 Ajax [13]  iWiz 2005/11/22 5871 6
50   MSN 메신저 친구 자동등록 스크립트  iWiz 2004/10/12 6195 35
49   JavaScript MD5 해쉬 생성 함수  iWiz 2004/01/07 9082 35
48   JavaScript로 만든 진법변환 및 보수계산기 [4]  iWiz 2004/01/04 160668 51

1 [2][3][4][5]
 

Copyright 1999-2023 Zeroboard / skin by zero
iWiz ShareBase, ⓒCopyleft by iWiz.  For more information contact .
본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며, 이를 위반시에는 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다. [게시일 2004. 1. 31]