Sendmail & POP

¹Úõ¿ë
Ç×°ø¿ìÁÖ¿¬±¸¼Ò
E-mail : cypark@kari.re.kr


1. ÀüÀÚ¿ìÆí(E-Mail)

¢Á ÀüÀÚ¿ìÆí Àü´Þ±¸Á¶
¢Á ÇÑ±Û sendmail ¼³Ä¡
¢Á Mail testing
¢Á sendmail.cf ±¸¼º
¢Á sendmail.cf µð¹ö±ë

2. MailÀÇ Àü´Þ ±¸Á¶

3. Mail Addressing

¢Á Within Internet

¢Á From Internet to BITNET

¢Á From BITNET to Internet

 

¢Á From Internet to UUCP

¢Á From UUCP to Internet

4. ÇÑ±Û Sendmail

¢Á ÃÖ¿ìÇü(KAIST), Berkeley Sendmail 8.6.12¸¦ ÇѱÛÈ­
¢Á security hole fixed
¢Á MIME(Multipurpose Internet Mail Extensions)°ú ȣȯ
¢Á ´Ù¾çÇÑ ¿î¿µÃ¼Á¦ Áö¿ø (30¿©Á¾)
¢Á RFC 1557ÂüÁ¶ ¢Á È­ÀÏ °¡Á®¿À±â

5. ÇÑ±Û Sendmail ¼³Ä¡

  step 1 : ¾ÐÃàÈ­ÀÏ Ç®±â
      gzip -d sendmail.8.6.12h2.tar.gz
      tar xvf sendmail.8.6.12h2.tar

  step 2 : src/Makefile.SunOS ¼öÁ¤ (SunOS 4.1.3 ÀÏ飁)
      DBMDEF = -DNDBM -DNIS
      LIBS = -ldbm  -lresolv

  step 3 : ½ÇÇàÈ­ÀÏ »ý¼º
      make  -f  Makefile.SunOS
        À̶§ ¸¶Áö¸· ºÎºÐ¿¡¼­ ³ª¿À´Â error´Â on-line mainual ºÎºÐÀ̹ǷÎ
        ¹«½ÃÇØµµ µÊ

  step 4 : ½ÇÇàÈ­ÀÏ º¹»ç
      cp /usr/lib/sendmail /usr/lib/sendmail.org
      make  -f  Makefile.SunOS install-sendmail
        À̶§ sendmailÀÌ /usr/lib·Î º¹»çµÇ°í mailq¿Í newaliases°¡
        sendmail·Î symbolic link µÈ´Ù.

  step 5 : sendmail.cf ¼öÁ¤
      cp sendmail.cf.sparc-sun-sunos4.1.3 sendmail.cf
      vi sendmail.cf
      DDkari.re.kr
      Djkari.re.kr
      DMkari.re.kr

  step 6 : sendmail.cf º¹»ç
      cp senfdmail.cf   /etc
        Solaris 2.4¿¡¼­´Â /etc/mail µð·ºÅ丮·Î º¹»ç

  step 7 : /etc/sendmail.cw »ý¼º
      º°¸í µµ¸ÞÀÎ À̸§ : kari.re.kr

  step 8 : newaliases ½ÇÇà
      /usr/ucb/newaliases

  step 9 : sendmail daemon restart
      $  kill  -1 `ps t"?" | grep sendmail `
      $  /usr/lib/sendmail -bd -q1h

6. Mail Testing

  $ Mail -v cypark@garam.kreonet.re.kr
    Subject: sendmail test

    This is sendmail test.
    Mail command is not supported Hangul messages
    Please use ELM Hangul version

    ctrl+D
    Cc:

  $ cypark@garam.kreonet.re.kr... Connecting to garam.kreonet.re.kr. (smtp)...

  220-garam.kreonet.re.kr Sendmail 8.6.9H1/8.6.12 ready at Thu, 26 Oct 1995 11:40:15
  220 ESMTP spoken here
  >>> EHLO kari.re.kr
  250-garam.kreonet.re.kr Hello [150.197.1.4], pleased to meet you
  250-EXPN
  250-SIZE
  250 HELP
  >>> MAIL From:<cypark@kari.re.kr> SIZE=107
  250 <cypark@kari.re.kr>... Sender ok
  >>> RCPT To:<cypark@garam.kreonet.re.kr>
  250 <cypark@garam.kreonet.re.kr>... Recipient ok
  >>> DATA
  354 Enter mail, end with "." on a line by itself
  >>> .
  250 LAA21010 Message accepted for delivery
  cypark@garam.kreonet.re.kr... Sent (LAA21010 Message accepted for delivery)
  Closing connection to garam.kreonet.re.kr.
  >>> QUIT
  221 garam.kreonet.re.kr closing connection

7. ¼³Ä¡½Ã À¯ÀÇ»çÇ×

¢Á hmail°ú elm2.4h3À» »ç¿ëÇϰí ÀÖ´Â °æ¿ì ¢Á sendmail compile½Ã ¸¶Áö¸· ºÎºÐ¿¡¼­ error´Â ¹«½ÃÇØµµ µÊ.
      ´Ü, on-line ¸Þ´º¾óÀÌ ÇÊ¿äÇϸé ÇØ´ç man directory(/usr/man/man?)¿¡ copy ÇÑ´Ù.

8. Sendmail Configuration È­ÀÏÀÇ ±¸¼º

    Define Macros         DDkari.re.kr
    Define Class          CDkari.re.kr
    Set option            OA/etc/aliases
    Trusted Users         Troot cypark
    Message Precedence    Pfirst-class=0
    Define Mailer         Mlocal, P=/bin/mail, .....
    Define Header         H?F?From : $q
    Set Ruleset           S0, S1, S2,....
    Define Rule           Rlhs <tab> rhs <tab> comment

        lhs : pattern match,  rhs : transforming the address

9. Pattern Match & Transforming ¿¹

    input address     : hunt@nbsenh.bitnet
                         |      |
    rewriting rule    : R$+<@$+.bitnet>  $1%$2<@$B>
                         |      |
    address token     : hunt<@nbsehn.bitnet>
                         |      |
    indefinite token  : hunt <nbsehn>
                         |      |
    transformation    : $1  %  $2  < @ $B>
                         |      |      |
    rewriting address : hunt%nbsehn<@cunyvm.cuny.edu>

10. Sendmail.cf µð¹ö±ë

¢Á /usr/lib/sendmail -bt
¢Á /usr/lib/sendmail -bt -Ctest.cf
¿¹)  /usr/lib/sendmail -bt
    ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
    Enter <ruleset> <address>
    > 0 cypark                        ¢Ð  username
    rewrite: ruleset  0   input: cypark
    rewrite: ruleset 98   input: cypark
    rewrite: ruleset 98 returns: cypark
    rewrite: ruleset  0 returns: $# local $: @ cypark
    >

    > 0 cypark@viva                   ¢Ð  hostname
    rewrite: ruleset  0   input: cypark @ viva
    rewrite: ruleset 98   input: cypark @ viva
    rewrite: ruleset 98 returns: cypark @ viva
    rewrite: ruleset 97   input: cypark @ viva
    rewrite: ruleset  3   input: cypark @ viva
    rewrite: ruleset 96   input: cypark < @ viva >
    rewrite: ruleset 96 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  3 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  0   input: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset 98   input: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset 98 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  0 returns: $# local $: @ cypark
    rewrite: ruleset 97 returns: $# local $: @ cypark
    rewrite: ruleset  0 returns: $# local $: @ cypark
    >

    > 0 cypark@viva.kari.re.kr        ¢Ð  hostname.domainname
    rewrite: ruleset  0   input: cypark @ viva . kari . re . kr
    rewrite: ruleset 98   input: cypark @ viva . kari . re . kr
    rewrite: ruleset 98 returns: cypark @ viva . kari . re . kr
    rewrite: ruleset 97   input: cypark @ viva . kari . re . kr
    rewrite: ruleset  3   input: cypark @ viva . kari . re . kr
    rewrite: ruleset 96   input: cypark < @ viva . kari . re . kr >
    rewrite: ruleset 96 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  3 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  0   input: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset 98   input: cypark < @ viva . kari . re . kr . >

    rewrite: ruleset 98 returns: cypark < @ viva . kari . re . kr . >
    rewrite: ruleset  0 returns: $# local $: @ cypark
    rewrite: ruleset 97 returns: $# local $: @ cypark
    rewrite: ruleset  0 returns: $# local $: @ cypark
    >

    > 0 cypark@garam.kreonet.re.kr    ¢Ð  Ÿ±â°üÀÇ address
    rewrite: ruleset  0   input: cypark @ garam . kreonet . re . kr
    rewrite: ruleset 98   input: cypark @ garam . kreonet . re . kr
    rewrite: ruleset 98 returns: cypark @ garam . kreonet . re . kr
    rewrite: ruleset 97   input: cypark @ garam . kreonet . re . kr
    rewrite: ruleset  3   input: cypark @ garam . kreonet . re . kr
    rewrite: ruleset 96   input: cypark < @ garam . kreonet . re . kr >
    rewrite: ruleset 96 returns: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset  3 returns: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset  0   input: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset 98   input: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset 98 returns: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset 95   input: < > cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset 95 returns: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset  0 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset 97 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . >
    rewrite: ruleset  0 returns: $# smtp $@ garam . kreonet . re . kr . $: cypark < @ garam . kreonet . re . kr . >
    >

    > 0 cypark@aaa.bitnet             ¢Ð  BITNET
    rewrite: ruleset  0   input: cypark @ aaa . bitnet
    rewrite: ruleset 98   input: cypark @ aaa . bitnet
    rewrite: ruleset 98 returns: cypark @ aaa . bitnet
    rewrite: ruleset 97   input: cypark @ aaa . bitnet
    rewrite: ruleset  3   input: cypark @ aaa . bitnet
    rewrite: ruleset 96   input: cypark < @ aaa . bitnet >
    rewrite: ruleset 96 returns: cypark < @ aaa . bitnet >
    rewrite: ruleset  3 returns: cypark < @ aaa . bitnet >
    rewrite: ruleset  0   input: cypark < @ aaa . bitnet >
    rewrite: ruleset 98   input: cypark < @ aaa . bitnet >
    rewrite: ruleset 98 returns: cypark < @ aaa . bitnet >
    rewrite: ruleset 95   input: < ibm3090 . snu . ac . kr > cypark < @ aaa . BITNET >
    rewrite: ruleset 95 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET >
    rewrite: ruleset  0 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET >
    rewrite: ruleset 97 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET >
    rewrite: ruleset  0 returns: $# relay $@ ibm3090 . snu . ac . kr $: cypark < @ aaa . BITNET >
    >

    > 0 cypark%viva.kari.re.kr@mit.edu    ¢Ð  ¿ÜºÎ¿¡¼­ ³»ºÎ·Î
    rewrite: ruleset  0   input: cypark % viva . kari . re . kr @ mit . edu
    rewrite: ruleset 98   input: cypark % viva . kari . re . kr @ mit . edu
    rewrite: ruleset 98 returns: cypark % viva . kari . re . kr @ mit . edu
    rewrite: ruleset 97   input: cypark % viva . kari . re . kr @ mit . edu
    rewrite: ruleset  3   input: cypark % viva . kari . re . kr @ mit . edu
    rewrite: ruleset 96   input: cypark % viva . kari . re . kr < @ mit . edu >
    rewrite: ruleset 96 returns: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset  3 returns: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset  0   input: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset 98   input: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset 98 returns: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset 95   input: < > cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset 95 returns: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset  0 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset 97 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . >
    rewrite: ruleset  0 returns: $# smtp $@ mit . edu . $: cypark % viva . kari . re . kr < @ mit . edu . >

    ######################################
    ### Ruleset 0 -- Parse Address ###
    ######################################

    S0

    # resolve fake top level domains by forwarding to other hosts
    R$*<@$+.BITNET>$* $: $>95 < $B > $1 <@$2.BITNET> $3 user@host.BITNET
    R$*<@$+.CSNET>$* $: $>95 < $C > $1 <@$2.CSNET> $3 user@host.CSNET

    # next 6 lines are added -- cypark 95/03/31   ¢Ð  ÇÊ¿ä½Ã ´ÙÀ½°ú °°ÀÌ ¹Ù²Û´Ù
    R$*<@karic2.$D.>$* $#local $: $1 forwared from karic2 to viva
    R$*<@$->$*         $#smtp $@ $2.$j $: $1 < @ $2.$j > user@host
    R$*<@$+.$j>$*      $#smtp $@ $2.$j $: $1 < @ $2.$j > $3
    R$*<@$+.kaist.ac.kr>$* $: $>95 < $R > $1 <@$2.kaist.ac.kr> $3
    R$*<@$+.andong.ac.kr>$* $: $>95 <ercc.snu.ac.kr > $1<@$2.andong.ac.kr>$3
    # if you are using relay host, next line is uncomment
    #R$*<@$*>$* $: $>95 < $R > $1 <@$2> $3 relayed

    > 0 cypark@abc.andong.ac.kr      ¢Ð  ruleset 0¿¡¼­ ¹Ù²Û °á°ú
    rewrite: ruleset  0   input: cypark @ abc . andong . ac . kr
    rewrite: ruleset 98   input: cypark @ abc . andong . ac . kr
    rewrite: ruleset 98 returns: cypark @ abc . andong . ac . kr
    rewrite: ruleset 97   input: cypark @ abc . andong . ac . kr
    rewrite: ruleset  3   input: cypark @ abc . andong . ac . kr
    rewrite: ruleset 96   input: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset 96 returns: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset  3 returns: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset  0   input: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset 98   input: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset 98 returns: cypark < @ abc . andong . ac . kr >
    rewrite: ruleset 95   input: < ercc . snu . ac . kr > cypark < @ abc . andong . ac . kr >
    rewrite: ruleset 95 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr >
    rewrite: ruleset  0 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr >
    rewrite: ruleset 97 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr >
    rewrite: ruleset  0 returns: $# relay $@ ercc . snu . ac . kr $: cypark < @ abc . andong . ac. kr >
    >

11. POP(Post Office Protocol)

¢Á POP Server ¼³Ä¡
¢Á POP Server ½ÃÇè
¢Á POP Server Log
¢Á POP Server Troubleshooting

12. POP

¢Á U. C Berkeley¿¡¼­ ÃÖÃʰ³¹ß
¢Á Mail server¿¡ ·Î±×ÀÎ ÇÏÁö ¾Ê°í client¿¡¼­ mail check
¢Á RFC 1081, 1082 ÂüÁ¶
¢Á Server S/W
¢Á Client S/W
      Eudora, Qvtnetµî POP3¸¦ Áö¿øÇÏ´Â ¸ðµç ÇÁ·Î±×·¥¿¡¼­ °¡´É

13. POP Server¼³Ä¡(PopperÀ϶§)

  step 1 : ¾ÐÃàÈ­ÀÏ Ç®±â
      uncompress popper-1.831beta.tar.Z
      tar xvf popper-1.831beta.tar


  step 2 : Makefile ¼öÁ¤
      ${TARGET}  :  ${OBJS}
      cc ${OBJS}  -o ${TARGET} -lresolv

  step 3 : compile & install
      make
      make install

  step 4 : /etc/service È­ÀϼöÁ¤
      pop 110/tcp
      pop2    109/tcp

  step 5 : /etc/inetd.conf È­ÀϼöÁ¤
      pop tcp nowait  root    /usr/etc/popper     popper
      pop2    tcp nowait  root    /usr/etc/popper popper

  step 6 : inetd daemon restart
      $ kill -1 `ps t"?" | grep inetd`
      $ inetd

14. POP Server ¼³Ä¡(QpopÀÏ ¶§)

  Step 1 : ¾ÐÃàÈ­ÀÏÇ®±â
      uncompress qpop2.1.4-r3.tar.Z
      tar xvf qpop2.1.4-r3.tar

  Step 2 : popper.h and make.xxx È­ÀϼöÁ¤
      ÇÊ¿ä½Ã µÎ °³ÀÇ È­ÀÏ¿¡¼­ parameter°ª ¼öÁ¤

  Step 3 : compile
      make sunos
      À̶§ popper.sunos°¡ »ý¼ºµÊ (O/S¿¡ µû¶ó popper.xxx »ý¼º)

  Step 4 : install
      cp popper.sunos  /usr/etc/popper

  Step 5 : ¾Õ¿¡¼­ ¼³¸íÇÑ popper1.83ÀÇ Step 4 ÀÌÇϸ¦ ¼öÇà

15. POP Server Testing

    $ telnet localhost 110
    Connected to localhost
    Escape character is '^['
    +OK UCB POP Server (Version 1.831beta) at viva starting
    user cypark         ¢Ð   »ç¿ëÀÚÀ̸§ ÀÔ·Â
    +OK password requird for cypark
    pass xxxx           ¢Ð   ºñ¹Ð¹øÈ£ ÀÔ·Â
    +OK cypark has 0 message(s) (0 octets)
    quit                ¢Ð   Á¾·á

 

16. POP Server Log

  step 1 : /etc/syslog.conf ¼öÁ¤
      local0.notice, local0.debug  /usr/spool/mqueue/POPlog

  step 2 : POPlog È­ÀÏ »ý¼º
      touch /usr/spool/mqueue/POPlog

  step 3 : Syslog daemon restart
      $ kill -1 `ps t"?" | grep syslogd`
      $ syslogd

17. POP Server Troubleshooting

¢Á Sun¿¡¼­ YP¸¦ »ç¿ëÇÒ¶§¿¡´Â /var/yp¿¡¼­ make ¸¦ ¹Ýµå½Ã ¼öÇàÇÏ¿©¾ß ÇÑ´Ù.
¢Á /usr/spool/mail/.username.popÀÇ size°¡ zeroÀ̾î¾ß ÇÑ´Ù. (zero°¡ ¾Æ´Ï¸é »èÁ¦)
¢Á /etc/inetd.conf, /etc/serviceÈ­ÀÏ¿¡ entry Ãß°¡½Ã delimit´Â ¹Ýµå½Ã <tab>À¸·Î ±¸ºÐÇÑ´Ù
¢Á POP¿¡¼­´Â password¿¡ space¸¦ »ç¿ëÇÒ¼ö ¾ø´Ù(popper1.83beta)
¢Á PC¿¡¼­ Eudora»ç¿ë½Ã ÇѱÛÀÌ ±úÁú°æ¿ì Menu bar¿¡¼­ Special-Setting-Sending mail¿¡ ÀÖ´Â "May use Quoted-Printable"À» disable½ÃÄÑ¾ß ÇÑ´Ù.

ºÎ·Ï : Sendmail Configuration

Configuration File Syntax

+---------------+-----------------------+-----------------------------------+
| Command       | Syntax                | Meaning                           |
+---------------+-----------------------+-----------------------------------+
| Define Macro  | Dxvalue               | set macro x to value              |
| Define Class  | Ccword1 [word2]..     | set class c to word1, word2..     |
|               | Fcfile                | load class c from  file           |
| Set Option    | Oovalue               | set option o to value             |
| Trusted Users | Tuser1 [user2]..      | trusted users are user1 user2..   |
| Set Precedence| Pname=number          | set name to precedence number     |
| Define Mailer | Mname,{field=value}   | define mailer name                |
| Define Header | H[?mflag?]name:format | set header format                 |
| Set Ruleset   | Sn                    | start ruleset number n            |
| Define Rule   | Rlhs rhs comment      | rewrite lhs pattern to rhs format |
+---------------+-----------------------+-----------------------------------+

The Define Macro Command( D )

¢Á defines a macro and stores a value in it
¢Á a macro name can be any single ASCII character
¢Á lowcase letters and special symbols are used internal macros(reserved)
¢Á uppercase letters are used user-defined macros

  Required sendmail macros
  +--------+-------------------------------+------------------------------+
  |  Macro | Value assigned this macro     | Example                      |
  +--------+-------------------------------+------------------------------+
  |    e   | SMTP entry message            | De$j Sendmail $v ready at $b |
  |    j   | site's official domain name   | Dj$w.$D                      |
  |    l   | format of UNIX from line      | DlFrom $g $d                 |
  |    n   | name used in error messages   | DnMAILER-DAEMON              |
  |    o   | set of operators in address   | Do.:%\@!^=/                  |
  |    q   | default sender address format | Dq$g$?x ($x)$.               |
  +--------+-------------------------------+------------------------------+

      ¿¹)  DDkari.re.kr

Sendmail's Internal Macros(reserverd)

  +------+-----------------------------------------------------+
  |Macro | Function                                            |
  +------+-----------------------------------------------------+
  |   a  | origination date in RFC822 format                   |
  |   b  | current date in RFC822 format                       |
  |   c  | hop count                                           |
  |   d  | date in UNIX(ctime) format                          |
  |   e  | SMTP entry messages                                 |
  |   f  | sender "from" address                               |
  |   g  | sender address relative to the recipient            |
  |   h  | recipient host                                      |
  |   i  | queue id                                            |
  |   j  | "official" domain name for this site                |
  |   l  | format of the UNIX from line                        |
  |   n  | name of the daemon(for error messages)              |
  |   o  | set of "operators" in address                       |
  |   p  | sendmail's PID                                      |
  |   q  | default format of sender address                    |
  |   r  | protocol used                                       |
  |   s  | sender's hostname                                   |
  |   t  | numeric representation of the current time          |
  |   u  | recipient user                                      |
  |   v  | version number of sendmail                          |
  |   w  | hostname of this site                               |
  |   x  | full name of the sender                             |
  |   z  | home directory of the recipient                     |
  +------+-----------------------------------------------------+

      ¿¹) Dwgaram
          DDkreonet.re.kr
          Dj$w.$D

The Define Class Command ( C, F )

¢Á array of values
¢Á used for anything with multiple values, such as multiple names for the local host or list of UUCP hostname

      ¿¹)  CVbronson ora
           Fw/etc/sendmail.cw

The Set Option Command( O )

¢Á internal options set inside the sendmail.cf file
¢Á string, integer, boolean, time interval

      ¿¹)  OA/etc/aliases
           OH/usr/lib/sendmail.hf
           OF0600
           OT3d

Defining Trusted Users ( T )

¢Á users who are permitted to override the sender name using -f flag
¢Á must be valid user name from the /etc/passwd file

      ¿¹)  OTroot
           OTdaemon uucp
           OTcypark

Defining Mail Precedence ( P )

¢Á assign priority to message entering its queue
¢Á higher number means high precedence
¢Á default value is zero
¢Á negative number indicate especially low priority mail

      ¿¹)  Pfirst-class=0
           Pspecial-delivery=100
           Pjunk=-100

Defining Mail Headers ( H )

¢Á optional head flag enclosed in question marks, a header name, a colon and a header template

      ¿¹)  H?P?Return-Path: <$g>
           HReceived: $?sfrom $s $.by $j ($v/$Z)
           H?D?Recent-Date: $a
           H?D?Date: $a
           H?F?Recent-From: $q
           H?F?From: $q
           H?x?Full-Name: $x
           HSubject:
           H?M?Recent-Message-Id: <$t.$i@$j>
           H?M?Message-Id: <$t.$i@$j>

Defining Mailers ( M )

¢Á mail delivery programs used by sendmail

  Mailer Definition Fields
  +-------+-----------+----------------------------------+-------------+
  | Field | Meaning   | Contents                         |Example      |
  +-------+-----------+----------------------------------+-------------+
  |   P   | Path      | path of the mailer               |P=/bin/mail  |
  |   F   | Flags     | sendmail flags for this mailer   |F=lsDFMe     |
  |   S   | Sender    | ruleset for sender address       |S=10         |
  |   R   | Recipient | ruleset for recipient address    |R=20         |
  |   A   | Argv      | the mailer's argument vector     |A=sh-c $u    |
  |   E   | Eol       | end-of-line string for the mailer|E=\r\n       |
  |   M   | Maxsize   | Maximum message length           |M=100000     |
  +-------+-----------+----------------------------------+-------------+

Defining Mailers (°è¼Ó)

  Sendmail Mailer Flag
  +-----+---------------------------------------------------------------+
  |Name | Function                                                      |
  +-----+---------------------------------------------------------------+
  | C   | add @domain to address that do not have an @                  |
  | D   | the mailer wants a Date: header line                          |
  | E   | add > to message lines that begin with From:                  |
  | e   | this is an expensive mailer, see sendmail option c            |
  | F   | the mailer wants a From: header line                          |
  | f   | the mailer accepts a -f  flag from trusted  users             |
  | h   | preserve uppercase in hostnames                               |
  | I   | the mailer will be speaking SMTP to another sendmail          |
  | L   | limit the line lengths are as specified in RFC821             |
  | l   | this is a local mailer                                        |
  | M   | this mailer wants a Message-Id: header line                   |
  | m   | the mailer can send to multiple users in one transaction      |
  | n   | don't insert a UNIX-style From: line in the message           |
  | P   | the mailer wants a Return-Path: line                          |
  | R   | use the MAIL From: return path rather than the return address |
  | r   | the mailer accepts a -r  flag from trusted users              |
  | S   | don't reset the userid before calling the mailer              |
  | s   | strip quotes off of the address before calling the mailer     |
  | U   | the mailer wants Unix-style From: lines                       |
  | u   | preserve uppercase in the usernames                           |
  | X   | prepend a dot to lines beginning with a dot                   |
  | x   | the mailer wants a Full-Name: header line                     |
  +-----+---------------------------------------------------------------+

     ¿¹)  Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $u

Rewriting the Mail Address ( R )

¢Á rulesets are groups of individual rewrite rules used to phase e-mail address from user mail program and rewrite them into the form required by the mail delivery program
¢Á seperated by tab characters

  a) Pattern Matching ( The Left Hand Side )
       Pattern Matching Symbols
  +---------+-----------------------------------------------------------+
  | Symbol  |  Meaning                                                  |
  +---------+-----------------------------------------------------------+
  |    $*   |  match zero or more tokens                                |
  |    $+   |  match one or more tokens                                 |
  |    $-   |  match exactly one token                                  |
  |    $=x  |  match any token in class x                               |
  |    $~x  |  match any token not in class x                           |
  |    $x   |  match all token in macro x                               |
  |    $%x  |  match any token in NIS map named in macro x (Sun)        |
  |    $!x  |  match any token not in NIS map named in macro x (Sun)    |
  |    $%y  |  match any token in NIS hosts.byname map (Sun)            |
  +---------+-----------------------------------------------------------+

     ¿¹)  cypark@garam.kreonet.re.kr
               |           |
              $-     @    $+
               |           |
              $1     @    $2

  b) Transfomation the Address ( The Right Hand Side )
       Transformation Metasymbols
  +---------------+------------------------------------------------+
  | Symbol        | Meaning                                        |
  +---------------+------------------------------------------------+
  |    $x         | expand macro x                                 |
  |    $n         | substitute indefinite token n from LHS         |
  |    $>n        | call ruleset n                                 |
  |    $#mailer   | resolve to mailer                              |
  |    $@         | terminate rewrite ruleset                      |
  |    $:         | terminate rewrite rule                         |
  |    $[host$]   | map to primary hostname                        |
  |    ${x name$} | map name through yp map $x (Sun)               |
  +---------------+------------------------------------------------+

      ¿¹)  input address :  hunt@nbsenh.bitnet
                              |       |
         rewriting address: R$+<@$+.bitnet>   $1%$2<@$B>
                              |       |
         address tocken:    hunt<@nbsenh.bitnet>
                              |      |
         indefinite token:  hunt   nbsenh
                              |      |
         transformation     $1 %  $2 < @  $B>
                              |      |       |
         rewritten address: hunt%nbsenh<@cunyvm.cuny.edu>

Sendmail Command-line Arguments

 +------------------+-------------------------------------------------+
 |     option       |        meaning                                  |
 +------------------+-------------------------------------------------+
 |       -bd        |        run as a daemon                          |
 |       -bt        |        run in test mode                         |
 |       -bi        |        initialize the alias database            |
 |       -bp        |        print mail queue                         |
 |       -bz        |        freeze the configuration file            |
 |       -q[time]   |        repeat at interval time                  |
 |       -Cfile     |        use file as the configuration file       |
 +------------------+-------------------------------------------------+