4. 사용법

이 항목에서는 보통사용자가 큐메일을 사용하는 법을 다룹니다. 큐메일시스템에서 메일을 읽거나 보낸다면, 어떻게 큐메일을 이용하는 지를 여기서 알게 됩니다.

4.1. .qmail파일들

사용자메일의 전달은 대개 하나 이상의 (dot kyoo mail 로 발음하는) .qmail파일들이 통제하는데, 이것들은 사용자 홈디렉토리에 .qmail로 시작하는 이름으로 되어있습니다. dot-qmail맨페지에 .qmail파일 사용법을 설명해 놓았습니다.

.qmail파일에는 전달지시사항이 한 줄에 하나씩 들어있습니다. 줄의 처음문자는 전달방법을 결정합니다.

표 6. 전달지시사항

문자 전달형태
# 없음 (코멘트) 무시
| 프로그램 셸이 실행할 명령어
/ 또는 . mbox (마지막글자가 /이 아니면) mbox 경로 (/나 .를 포함)
/ 또는 . maildir (마지막 글자가 /이면) maildir 경로 (/나 .를 포함)
& 포워드 메세지를 포워드할 주소
글자 또는 숫자 포워드 메세지를 포워드할 주소 (첫글자를 포함)

4.1.1. 프로그램전달

프로그램전달지시를 만나면 큐메일은 셸(/bin/sh)을 가동해서 명령을 실행하는데, 들어오는 메세지를 복사해서 명령에 표준입력으로 넣습니다. qmail-command맨페지에 이 절차를 자세히 설명해 놓았습니다.

프로그램전달은 매우 강력하고 매우 넓은 기능을 구현할 수 있는데, 메세지필터링, 메세지에 자동으로 답하기, procmail 과 같은 제3자 전달자를 통해 전달하는 것등입니다.

예)
|preline /usr/ucb/vacation djb

이렇게 하면 큐메일은 preline을 가동해서 /usr/ucb/vacation과 djb를 인수로 주고, 메세지복사본을 표준입력으로 제공합니다.

4.1.2. mbox 전달

Mbox는 표준유닉스메일복스형태를 큐메일식으로 부르는 말로서 여러메세지를 단일파일에 저장하고, 메세지에는 "From "줄이 머리에 있습니다. 이 줄은 헤더필드같이 보이지만 아닙니다. 이것은 다만 전달자가 첨가해서 이메일클라이언트에게 해당메세지가 시작하는 곳을 알게할 뿐입니다.

예:
./Mailbox

이렇게 하면 "From "줄을 앞에 붙여서 $HOME/Mailbox에 추가합니다. 단일 메세지를 보유한 간단한 mbox메일복스는 다음과 같습니다.
From user1@example.net Thu May 13 18:34:50 1999 
Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000  
From: user1@example.net
To: user2@example.com
Subject: hey

What's up?

첫줄은 큐메일이 전달하면서 첨가한 것입니다.

4.1.3. maildir 전달

"Maildir"는 Dan Bernstein이 mbox형태의 결점을 알리려고 만든 메일복스형태로서, maildir메일복스는 디렉토리로서 여기에는 섭디렉토리가 세개 있는데, new, cur, tmp 등입니다. maildir메일복스에 있는 각 메세지는 상태에 따라 부디렉토리중 하나에 별개파일로 되어있는데, new는 읽지 않은 메세지가, cur는 읽은 메세지가, tmp는 전달중인 메세지가 들어 있습니다. maildir맨페지에 maildir형식에 대해 자세히 설명하였습니다.

maildir의 이점중 하나는 다른 전달자가 동시에 업데이트하는 것을 막기위해 하는 록킹을 사용하지 않아도 확실합니다. 이것은 maildir메일복스는 NFS를 마운트한 파일시스템에서 안전하게 사용할 수 있다는 것을 뜻합니다.

예:
./Maildir/

이것은 메세지를 maildir형태의 메일복스인 $HOME/Maildir에 저장합니다.

-------------------------------------------------------------

유의점: qmial-local은 maildir메일복스로 메일을 전달하지만 메일복스를 만들지는 못합니다. maildir메일복스는 큐메일과 같이 제공하는 maildirmake프로그램으로 만듭니다.
 
maildirmake ~/Maildir
maildirmake는 maildir의 소유자가 실행해야지 룻이 하지 않습니다. useradd 또는 adduser 명령이 "skeleton"디렉토리를 지원한다면 (대개 /etc/skel), 거기에 maildir를 만들면 새 사용자들에게 자동으로 만들어집니다.

-------------------------------------------------------------

4.1.4. 포워드 전달

포워드전달은 명시주소로 메세지를 다시보냅니다. .qmail파일에 명시한 주소는 완전자격이어야 하며, 커멘트필드와 여백이 없어야 합니다.

다음은 틀렸습니다.
&<user@example.com>			  
& user@example.com 			
&Joe User <user@example.com>   

다음과 같이 해야합니다.
& user@example.com 	 
user@example.com		
&user							

처음 두개는 user@example.com이 메세지사본을 받도록 하고, 남은 한개는 로컬유저인 user에게 사본을 보냅니다.

4.1.5. 연장주소

큐메일에서는 사용자통제 연장주소를 지원합니다. 기본주소인 username@hostname.domain외에 사용자는 username-extension@hostname.domain으로 메일을 받을 수 있습니다. 우리는 지금 로컬시스템에서 일어나는 행동을 고려하고 있으므로, 앞으로 이번 항목에서는 "@hostname.domain"부분은 적지 않겠습니다.

username-extension에 대한 전달지시사항은 ~username/.qmail-extension에 있습니다.

예를 들면, dave-lwq@sparge.example.com은 sparge호스트에 있는 ~dave/.qmail-lwq가 통제합니다.

연장은 복수필드로 될 수 있습니다. 예를 들면 dave-list-qmail인데, ~dave/.qmail-list-qmail이 통제합니다. 이번 예에서 dave-list-qmail은 큐메일 메일링리스트에 가입했고, ~dave/.qmail-list-qmail은 리스트메세지를 별도의 메일복스에 파일보관하도록 지시합니다.

. qmail파일들은 -default를 와일드카드로 씁니다. 그래서 dave-list-qmail은 ~/.qmail-list-default로도 처리할 수 있습니다. 이렇게 하면 모든 dave-list-whatever주소들을 다루는데 있어서 .qmail파일은 하나만 있어도 족합니다. 그러나 dave-list는 ~dave/.qmail-list-default가 통제하지 못하는데, list다음에 "-"이 없기 때문임을 유의하십시오.

큐메일은 찾는 것중에서 제일 가까운 것을 씁니다. 예를 들어서, dave-list-qmail의 주소로 메세지가 왔다면, 다음과 같이 찾은 것중에서 첫번째것을 씁니다.

  • .qmail-list-qmail

  • .qmail-list-default

  • .qmail-default

일치하는 .qmail파일이 없으면 전달은 실패하고 메세지는 보낸이에게 되돌려집니다.

4.2. 메세지 보내기

메일사용자는 메세지를 보내는 데 있어서 MTA를 보통 직접 사용하지 않습니다. 대체로 Mail User Agent (MUA)인 pine이나 mutt 등을 써서 메세지를 작성하고 보내는데, MUA는 MTA를 호출해서 메세지를 전달합니다. MTA로 메세지를 건네주는 처리과정을 injection이라고 합니다.

대부분의 MTA로 메세지를 inject하는 방법에는 두 가지가 있습니다. Simple Mail Transfer Protocol (SMTP)과 이 목적으로 MTA가 제공하는 프로그램을 이용하는 것입니다.

4.2.1. SMTP

MUA는 로컬호스트나 지정한 메일서버에 있는 표준 SMTP포트인 25번 포트로 TCP 연결을 엽니다. 그 다음, MUA와 MTA는 다음과 같이 끝나는 대화중 하나를 합니다.

  • the message being transfered to the MTA, 또는

  • a error status being returned to the MUA

SMTP에는 인증장치가 없으므로 메세지를 보내는데 유저네임이나 패스워드가 필요없습니다. 그렇지만 많은 MTA는 로컬사용자가 보내거나 받는 것같지 않은 메세지를 거절합니다. 제대로된 메세지가 reject되면 릴레이제한이 그 원인일 경우가 제일 많습니다. 릴레이설정에 대한 정보는 릴레이항목을 보십시오.

4.2.2. /var/qmail/bin/sendmail

오랜 세월동안 Sendmail이 유닉스 MTA였습니다. 어느 곳에나 그것이 있었기에 많은 프로그래머들은 의례 그것이 MTA라고 여겼습니다. 그 결과, Sendmail의 로컬 인젝션 장치가 로컬메일인젝션에 대한 표준 Application Programmer's Interface (API)가 되었습니다. 큐메일과 기타 비Sendmail MTA는 sendmail프로그램을 공급해서 로컬인젝션에 대해서 진짜 Sendmail의 sendmail가 똑깥이 작동하도록 합니다.

큐메일의 sendmail은 보통 /var/qmail/bin/sendmail에 있는데, 대개 큐메일시스템에서 Sendmail의 sendmail을 대체합니다. 흔히 sendmail프로그램은 다음에 있습니다.

  • /usr/lib/sendmail

  • /usr/sbin/sendmail

큐메일시스템에서 "ls -l path-to-sendmail"하면 sendmail이 /var/qmail/bin/sendmail로 심볼릭링크되어있슴을 보여줍니다.
$ ls -l /usr/lib/sendmail
lrwxrwxrwx   1 root	 root			29 Feb 19 11:04 /usr/lib/sendmail \ 
 -> /var/qmail/bin/sendmail

큐메일과 같이 제공되는 sendmail 맨페지가 이 프로그램을 어떻게 사용하는 지 설명합니다.

4.2.3. qmail-inject

sendmail API외에 큐메일에는 qmail-inject라는 자체 인젝션프로그램이 있습니다. 사실 sendmail은 qmail-inject의 wrapper입니다.

API이지만 sendmail은 매우 널리 쓰이므로 더 나은 듯합니다. qmail-inject가 제공하는 큐메일 API는 큐메일을 설치한 시스템에서만 작동하지만, sendmail 인터페스는 거의 어디에나 있습니다.

예를 들면, joe@example.com에게 빈 메세지를 보내려면 다음과 같이 합니다.
echo To: joe@example.com | /var/qmail/bin/qmail-inject

4.3. 환경변수

큐메일프로그램이 환경변수를 정하거나 사용하기도 합니다. 다음의 테이블에 변수를 열거하고 사용법을 적었습니다.

표 7. 환경변수

변수명 해당 맨페지 설정 사용목적
DATABYTES qmail-smtpd used Overrides control/databytes Portion of address maching
DEFAULT qmail-command set "-default" in a .qmail file name
DTLINE qmail-command set Delivered-To header field
EXT qmail-command set The address extension
EXT2 qmail-command set Portion of EXT following first dash
EXT3 qmail-command set Portion of EXT following second dash
EXT4 qmail-command set Portion of EXT following third dash
HOME qmail-command set The user's home directory
HOST qmail-command set The domain part of the recipient address
HOST2 qmail-command set Portion of HOST preceding last dot
HOST3 qmail-command set Portion of HOST preceding second-to-last dot
HOST4 qmail-command set Portion of HOST preceding third-to-last dot
LOCAL qmail-command set The local part of the recipient address
LOGNAME qmail-inject used User name in From header field (4)
MAILHOST qmail-inject used Host name in From header field (2)
MAILNAME qmail-inject used Personal name in From header field (2)
MAILUSER qmail-inject used User name in From header field (2)
NAME qmail-inject used Personal name in From header field (3)
NEWSENDER qmail-command set Forwarding sender address (see "man dot-qmail")
QMAILDEFAULTDOMAIN qmail-inject used Overrides control/defaultdomain
QMAILDEFAULTHOST qmail-inject used Overrides control/defaulthost
QMAILHOST qmail-inject used Host name in From header field (1)
QMAILIDHOST qmail-inject used Overrides control/idhost
QMAILINJECT qmail-inject used Specify various options (see next table)
QMAILMFTFILE qmail-inject used File containing list of mailing list addresses for Mail-Followup-To generation
QMAILNAME qmail-inject used Personal name in From header field (1)
QMAILPLUSDOMAIN qmail-inject used Overrides control/plusdomain
QMAILSHOST qmail-inject used Host name in envelope sender address
QMAILSUSER qmail-inject used User name in envelope sender address
QMAILUSER qmail-inject used User name in From header field (1)
RECIPIENT qmail-command set Envelope recipient address
RELAYCLIENT qmail-smtpd used Ignore control/rcpthosts and append value torecipient address
RPLINE qmail-command set Return-Path header field
SENDER qmail-command set Envelope sender address
UFLINE qmail-command set UUCP-style "From" line
USER qmail-command set The current user
USER qmail-inject used User name in From header field (3)

표 8. QMAILINJECT Flags

Letter Purpose
c Use address-comment style for the From field
s Do not look at any incoming Return-Path field
f Delete any incoming From field
i Delete any incoming Message-ID field
r Use a per-recipient VERP
m Use a per-message VERP