이 항목에서는 보통사용자가 큐메일을 사용하는 법을 다룹니다. 큐메일시스템에서 멜을 읽거나 보낸다면, 여기에서 어떻게 큐메일을 이용하는 지를 알게 될겁니다.
사용자멜의 전달은 대개 .qmail파일이 통제하는데, 이것들은 사용자 홈디렉토리에 .qmail로 시작하는 이름으로 되어있습니다. dot-qmail맨페지에 .qmail파일 사용법을 설명해 놓았습니다.
.qmail파일에는 전달지시사항이 한 줄에 하나씩 들어있습니다. 줄의 처음문자는 전달방법을 결정합니다.
문자 전달형태 값
# 없슴 (코멘트) 무시
| 프로그램 셸이 실행할 명령어
/ 또는 . mbox (마지막글자가 mbox 경로 (/나 .를 포함)
/이 아니면)
/ 또는 . maildir (마지막 mbox 경로 (/나 .를 포함)
글자가 /이면)
& 포워드 메세지를 포워드할 주소
글자 또는 숫자 포워드 메세지를 포워드할 주소
(첫글자를 포함)
프로그램전달지시를 만나면 큐메일은 셸(/bin/sh)을 가동해서 명령을 실행하는데, 들어오는 메세지를 복사해서 명령에 표준입력으로 넣습니다. qmail-command맨페지에 이 절차를 자세히 설명해 놓았습니다.
프로그램전달은 매우 강력하고 매우 넓은 기능을 구현할 수 있는데, 메세지필터링, 메세지에 자동으로 답하기, procmail 등 제3자 전달자를 통해 전달하는 것등입니다.
예) |preline /usr/ucb/vacation djb
이렇게 하면 큐메일은 preline을 가동해서 /usr/ucb/vacation과 djb를 인수로 주고, 메세지복사본을 표준입력으로 제공합니다.
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?
첫줄은 큐메일이 전달하면서 첨가한 것입니다.
"Maildir"는 Dan Bernstein이 만든 멜복스형태로서 mbox형태의 결점을 말해줍니다. maildir멜복스에는 디렉토리로서 섭디렉토리가 세개 있는데, new, cur, tmp 등입니다. maildir멜복스에 있는 각 메세지는 상태에 따라 부디렉토리중 하나에 별개파일로 되어있는데, new는 읽지 않은 메세지가, cur는 읽은 메세지가, tmp는 전달중인 메세지가 들어 있습니다. maildir맨페지에 maildir형식에 대해 자세히 설명하였습니다.
maildir의 이점중 하나는 다른 전달자가 동시에 업데이트하는 것을 막기위해 하는 록킹을 사용하지 않아도 확실하다는 겁니다. 이것은 maildir멜복스는 NFS를 마운트한 파일시스템에 안전하게 사용할 수 있다는 것을 뜻합니다.
예: ./Maildir/
이것은 메세지를 maildir형태의 멜복스인 $HOME/Maildir에 저장합니다.
------------------------------------------------------------------------------
유의점: maildir멜복스는 큐메일과 같이 제공하는 maildirmake프로그램으로 만듭니다.
예) maildirmake ~/Maildir
------------------------------------------------------------------------------
포워드전달은 명시주소로 메세지를 다시보냅니다. .qmail파일에 명시한 주소는 완전자격이어야 하며, 커멘트필드와 여백이 없어야 합니다.
다음은 틀렸습니다.
&<user@example.com> & user@example.com &Joe User <user@example.com> &user
다음과 같이 해야합니다.
&user@example.com user@example.com
그러면 메세지사본을 user@example.com로 보냅니다.
큐메일에서는 사용자통제 연장주소를 지원합니다. 기본주소인 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파일이 없으면 전달은 실패하고 메세지는 보낸이에게 되돌려집니다.
멜사용자는 메세지를 보내는 데 있어서 MTA를 보통 직접 사용하지 않습니다. 대체로 Mail User Agent (MUA)인 pine이나 mutt 등을 써서 메세지를 작성하고 보내는데, MUA는 MTA를 호출해서 메세지를 전달합니다. MTA로 메세지를 건네주는 처리과정을 injection이라고 합니다.
대부분의 MTA로 메세지를 inject하는 방법에는 두 가지가 있습니다. Simple Mail Transfer Protocol (SMTP)과 이 목적으로 MTA가 제공하는 프로그램을 이용하는 것입니다.
MUA는 로컬호스트나 지정한 멜서버에 있는 표준 SMTP포트인 25번 포트로 TCP 연결을 엽니다. 그 다음, MUA와 MTA는 다음과 같이 끝나는 대화중 하나를 합니다.
SMTP에는 인증장치가 없으므로 메세지를 보내는데 유저네임이나 패스워드가 필요없습니다. 그렇지만 많은 MTA는 로컬사용자가 보내거나 받는 것같지 않은 메세지를 거절합니다. 제대로된 메세지가 reject되면 릴레이제한이 그 원인일 경우가 제일 많습니다. 릴레이설정에 대한 정보는 릴레이항목을 보십시오.
오랜 세월동안 Sendmail이 유닉스 MTA였습니다. 어느 곳에나 그것이 있었기에 많은 프로그래머들은 의례 그것이 MTA라고 여겼습니다. 그 결과, Sendmail의 로컬 인젝션 장치가 로컬멜인젝션에 대한 표준 Application Programmer's Interface (API)가 되었습니다. 큐메일과 기타 비Sendmail MTA는 sendmail프로그램을 공급해서 로컬인젝션에 대해서 진짜 Sendmail의 sendmail가 똑깥이 작동하도록 합니다.
큐메일의 sendmail은 보통 /var/qmail/bin/sendmail에 있는데, 대개 큐메일시스템에서 Sendmail의 sendmail을 대체합니다. 흔히 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 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
큐메일프로그램이 환경변수를 정하거나 사용하기도 합니다. 다음의 테이블에 변수를 열거하고 사용법을 적었습니다.
변수명 해당 맨페지 설정 사용목적
DATABYTES qmail-smtpd used Overrides control/databytes
Portion of address matching
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)
File containing list of mailing
QMAILMFTFILE qmail-inject used 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
Ignore control/rcpthosts and
RELAYCLIENT qmail-smtpd used append value to recipient
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)
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