═α±≥≡εΘΩα ∩≡επ≡α∞∞√ sendmail ∩≡εΦ±⌡εΣΦ≥ ∩≡Φ ∩ε∞ε∙Φ ⌠αΘδα /etc/sendmail/conf. ▌≥ε≥ ⌠αΘδ ∞εµφε ≡ατßΦ≥ⁿ φα φσ±ΩεδⁿΩε ≈α±≥σΘ:
┬ ßεδⁿ°Φφ±≥Γσ ±δ≤≈ασΓ Γ±σ Φτ∞σφσφΦ , Ωε≥ε≡√σ ∩≡Φ⌡εΣΦ≥ⁿ± Γφσ±≥Φ Γ ⌠αΘδ Ωεφ⌠Φπ≤≡α÷ΦΦ, Ωα±α■≥± ≥εδⁿΩε Φ∞σφΦ ∞α°Φφ√, Σε∞σφα Φ ∞α°Φφ °δ■τεΓ Γ Σ≡≤πΦσ ∩ε≈≥εΓ√σ ±δ≤µß√. ╬ΣφαΩε, σ±δΦ ≤ ε≡παφΦτα÷ΦΦ Φ∞σσ≥± Σε±≥α≥ε≈φε ∩≡εΣεδµΦ≥σδⁿφα Φ ±δαΓφα Φ±≥ε≡Φ Φ±∩εδⁿτεΓαφΦ ²δσΩ≥≡εφφεΘ ∩ε≈≥√, ≥ε ∞εµσ≥ εΩατα≥ⁿ± , ≈≥ε Σδ φε≡∞αδⁿφεπε ⌠≤φΩ÷ΦεφΦ≡εΓαφΦ ∩≡ΦΣσ≥± ∩≡εΦτΓσ±≥Φ Φ ≡ Σ ßεδσσ ±≤∙σ±≥Γσφφ√⌡ Φτ∞σφσφΦΘ.
┬ ÷σδε∞ Γ±σ ε∩Φ±αφφ√σ Γ√°σ ±σΩ÷ΦΦ ≡σ°α■≥ ≥≡Φ ε±φεΓφ√⌡ ταΣα≈Φ:
╧≡Φ ≡σΣαΩ≥Φ≡εΓαφΦΦ ⌠αΘδα ±δσΣ≤σ≥ ≤≈Φ≥√Γα≥ⁿ φσΩε≥ε≡√σ ∩≡αΓΦδα, Ωε≥ε≡√σ Φ±∩εδⁿτ≤■≥± ∩≡Φ φα∩Φ±αφΦΦ ⌠αΘδα Ωεφ⌠Φπ≤≡α÷ΦΦ: Γ± Φφ⌠ε≡∞α÷Φ δεΩαδⁿφεπε ⌡α≡αΩ≥σ≡α ±ε±≡σΣε≥ε≈σφα Γ φα≈αδσ ⌠αΘδα, Ωε∞αφΣ√ εΣφεπε ≥Φ∩α ±εß≡αφ√ Γ Ωε∞∩αΩ≥φ√σ π≡≤∩∩√, ßεδⁿ°≤■ ≈α±≥ⁿ ⌠αΘδα ±ε±≥αΓδ ■≥ ∩≡αΓΦδα ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ, Γ Ωεφ÷σ ⌠αΘδα ε∩Φ±αφ√ ∩≡επ≡α∞∞√ ≡α±±√δΩΦ ²δσΩ≥≡εφφεΘ ∩ε≈≥√.
┬±σ Ωε∞αφΣ√, Ωε≥ε≡√σ Φ±∩εδⁿτ≤■≥± Γ ⌠αΘδσ φα±≥≡εσΩ sendmail ∞εµφε ∩≡σΣ±≥αΓΦ≥ⁿ Γ ΓΦΣσ ±δσΣ≤■∙σΘ ≥αßδΦ÷√:
╩ε∞αφΣα | ╤Φφ≥αΩ±Φ± | ═ατφα≈σφΦσ |
---|---|---|
Define Macro | Dxvalue | ╙±≥αφεΓΦ≥ⁿ τφα≈σφΦσ "x" |
Define Class | ╤±word1 word2 ... | ╙±≥αφεΓΦ≥ⁿ τφα≈σφΦσ Ωδα±±α "c" |
Define Class | Fcfile | ταπ≡≤τΦ≥ⁿ τφα≈σφΦσ Ωδα±±α Φτ ⌠αΘδα |
Set Option | Oovalue | ╙±≥αφεΓΦ≥ⁿ τφα≈σφΦσ ε∩÷ΦΦ "o" |
Trusted Users | Tuser1 user2 ... | ╬∩≡σΣσδΦ≥ⁿ ΣεΓσ≡σφφ√⌡ ∩εδⁿτεΓα≥σδσΘ |
Set Precedence | Pname=number | ─δ φε∞σ≡α ε°ΦßΩΦ number ≤±≥αφεΓΦ≥ⁿ Φ∞ name |
Define Mailer | Mname,[field=value] | ╬∩≡σΣσδΦ≥ⁿ ∩≡επ≡α∞∞≤ ≡α±±√δΩΦ ∩ε≈≥√ |
Define Header | H[?mflag?]name:format | ╬∩≡σΣσδΦ≥ⁿ ⌠ε≡∞α≥ ∩εδ ταπεδεΓΩα |
Set Rulset | Sn | ═α≈α≥ⁿ ε∩≡σΣσδσφΦσ φαßε≡α ∩≡αΓΦδ ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ |
Define Rule | Rlhs rhs comment | ╬∩≡σΣσδΦ≥ⁿ ∩≡αΓΦδε ∩≡σεß≡ατεΓαφΦ αΣ≡σ±α |
╘ε≡∞α≥ Ωε∞αφΣ√ ⌠αΘδα φα±≥≡εσΩ sendmail φσ ε≈σφⁿ ≤Σεßσφ Σδ ≈≥σφΦ . ┬ ÷σδε∞ σπε ∞εµφε ε∩≡σΣσδΦ≥ⁿ ±δσΣ≤■∙Φ∞ εß≡ατε∞:
╨Φ±. 3.2. ╤≥≡≤Ω≥≤≡α Ωε∞αφΣ√ ⌠αΘδα φα±≥≡εσΩ sendmail
╥σ∩σ≡ⁿ ≡ατßσ≡σ∞ ßεδσσ ∩εΣ≡εßφε φσΩε≥ε≡√σ Ωε∞αφΣ√ Φ ±σΩ÷ΦΦ ⌠αΘδα φα±≥≡εσΩ sendmail. ╦≤≈°σ Γ±σπε ²≥ε ±Σσδα≥ⁿ φα ε±φεΓσ ≡σαδⁿφεπε ⌠αΘδα. ═α≈φσ∞ ± ±σΩ÷ΦΦ ε∩Φ±αφΦ δεΩαδⁿφ√⌡ ∩α≡α∞σ≥≡εΓ:
################## # local info # ################## Cwlocalhost CP. # UUCP relay host DYucbvax.Berkeley.EDU CPUUCP # BITNET relay host #DBmailhost.Berkeley.EDU DBrelay.kiae.su CPBITNET # "Smart" relay host (may be null) DSrelay.kiae.su # who I send unqualified names to (null means deliver locally) DR # who gets all local email traffic ($R has precedence for unqualified names) DH # who I masquerade as (null for no masquerading) DM # class L: names that should be delivered locally, even if we have a relay # class E: names that should be exposed as from this host, even if we masquerade #CLroot CEroot # operators that cannot be in local usernames (i.e., network indicators) CO @ % ! # a class with just dot (for identifying canonical names) C.. # dequoting map Kdequote dequote
╩αΩ ΓΦΣφε Φτ ²≥επε δΦ±≥Φφπα, Γ ΣαφφεΘ ±σΩ÷ΦΦ ε∩Φ±αφ√ Φ∞ ΣαφφεΘ ∞α°Φφ√ (Cwlocalhost), α ≥αΩµσ Ωδα±± ∞α°Φφ-°δ■τεΓ Γ Σ≡≤πΦσ ∩ε≈≥εΓ√σ ±Φ±≥σ∞√ (CP....). ╧≡Φ ²≥ε∞ φα≡α∙ΦΓαφΦσ Ωδα±±α ∩≡εΦ±⌡εΣΦ≥ ∩ε ∞σ≡σ ε∩Φ±αφΦ °δ■τα Σδ ΩαµΣεπε Φτ ΓΦΣεΓ ∩ε≈≥εΓ√⌡ ±δ≤µß. ┬ Ωεφ÷σ ±σΩ÷ΦΦ ε∩Φ±αφ√ ±Φ∞Γεδ√, Ωε≥ε≡√σ φσ ∞επ≤≥ Φ±∩εδⁿτεΓα≥ⁿ± Γ Ωα≈σ±≥Γσ Φ∞σφ ∩εδⁿτεΓα≥σδσΘ ΦδΦ Σε∞σφεΓ.
╤δσΣ≤■∙α ±σΩ÷Φ - ε∩≡σΣσδσφΦσ ∞αΩ≡ε±εΓ sendmail:
###################### # Special macros # ###################### # SMTP initial login message De$j Sendmail $v/$Z ready at $b # UNIX initial From header format DlFrom $g $d # my name for error messages DnMAILER-DAEMON # delimiter (operator) characters Do.:%@!^/[] # format of a total name Dq$?x$x <$g>$|$g$. # Configuration version number DZ8.6.6
┬ ΣαφφεΘ ±σΩ÷ΦΦ ε∩Φ±αφ√ ±εεß∙σφΦ , Ωε≥ε≡√σ Γ√Σασ≥ sendmail ∩≡Φ ΓταΦ∞εΣσΘ±≥ΓΦΦ ± Σ≡≤πΦ∞Φ ≥≡αφ±∩ε≡≥φ√∞Φ απσφ≥α∞Φ. ╩αΩ ΓΦΣφε Φτ ²≥επε ε∩Φ±αφΦ , ε∩≡σΣσδσφΦσ ∞αΩ≡ε±α ²≥ε φσ ≥εδⁿΩε ∩≡Φ±ΓαΦΓαφΦσ τφα≈σφΦ , φε Φ Γ√∩εδφσφΦσ ε∩≡σΣσδσφφ√⌡ ΣσΘ±≥ΓΦΘ. ═αΦßεδσσ Φφ≥σ≡σ±φεσ ∩≡σΣδεµσφΦσ Φτ Γ±σ⌡ - ∩≡σΣδεµσφΦσ, ε∩≡σΣσδ ■∙σσ τφα≈σφΦσ ∞αΩ≡ε±α q:
Dq$?x$x <$g>$|$g$.
╟Σσ±ⁿ ε∩Φ±αφα ≤±δεΓφα ∩εΣ±≥αφεΓΩα τφα≈σφΦ . ┬±σ ∩≡σΣδεµσφΦσ ∞εµφε ε∩Φ±α≥ⁿ ±δσΣ≤■∙σΘ ⌠≡ατεΘ:
"┼±δΦ τφα≈σφΦσ ∩σ≡σ∞σφφεΘ x ≤±≥αφεΓδσφε, ≥ε: q = τφα≈σφΦσ_x <τφα≈σφΦσ_g>, Φφα≈σ: q=τφα≈σφΦσ_g".
╥ε µσ ±α∞εσ ∞εµφε τα∩Φ±α≥ⁿ Φ ∩ε-Σ≡≤πε∞≤:
if(x!=NULL) { strcpy(q,x); strcat(q," <"); strcat(q,g); strcat(q,">"); { else { strcpy(q,g); }
┬ Σαφφε∞ ±δ≤≈ασ $? ±εε≥Γσ≥±≥Γ≤σ≥ ε∩σ≡α≥ε≡≤ if, $| - else, α $. - Ωεφσ÷ ≤±δεΓφεπε ε∩σ≡α≥ε≡α.
╤δσΣ≤■∙α ±σΩ÷Φ - ²≥ε ε∩≡σΣσδσφΦσ ε∩÷ΦΘ:
############### # Options # ############### # strip message body to 7 bits on input? #O7False # Insist that the BIND name server be running to resolve names OI # deliver MIME-encapsulated error messages? OjTrue
┬ Σαφφε∞ ±δ≤≈ασ ∩≡ΦΓσΣσφ ≥εδⁿΩε ⌠≡απ∞σφ≥ ²≥εΘ ±σΩ÷ΦΦ. ┴εδⁿ°Φφ±≥Γε ∩α≡α∞σ≥≡εΓ εß∙Φσ Σδ Γ±σ⌡ ≤±≥αφεΓεΩ sendmail. ╙Ωαταφφ√σ µσ Γ δΦ±≥Φφπσ ∩α≡α∞σ≥≡√ Γδ ■≥± ∩≡Φφ÷Φ∩Φαδⁿφ√∞Φ ± ≥ε≈ΩΦ τ≡σφΦ ≡σµΦ∞εΓ ≡αßε≥√ sendmail. ╧σ≡Γ√Θ ∩α≡α∞σ≥≡ ε∩≡σΣσδ σ≥ ≥ε≥ ⌠αΩ≥, ≈≥ε ∩ε ∩ε≈≥σ ∞εµφε ∩σ≡σ±√δα≥ⁿ ±σ∞ΦßΦ≥εΓ≤■ Φφ⌠ε≡∞α÷Φ■. ╤επδα±φε RFC-822 Φφ⌠ε≡∞α÷Φ Σεδµφα ß√≥ⁿ ±σ∞ΦßΦ≥εΓα , φε Σδ ∩σ≡σΣα≈Φ ΩΦ≡ΦδδΦ÷√ ²≥ε τφα≈Φ≥ Φ±∩εδⁿτεΓα≥ⁿ ΩεΣΦ≡εΓαφΦσ, ≈≥ε αß±εδ■≥φε φσ ∩≡Φσ∞δσ∞ε. ╧ε²≥ε∞≤ Σαφφ√Θ ∩α≡α∞σ≥≡ Σεδµσφ ß√≥ⁿ ταΩε∞σφ≥α≡σφ. ┬ ±Φ±≥σ∞α⌡, πΣσ Φ±∩εδⁿτ≤σ≥± ±σ≡Γσ≡ Σε∞σφφ√⌡ Φ∞σφ, ε∩÷Φ I (OI) Σεδµφα ß√≥ⁿ ≤±≥αφεΓδσφα, ≈≥εß√ φσ ß√δε ε°ΦßεΩ ∩≡Φ ΦΣσφ≥Φ⌠ΦΩα÷ΦΦ Σε∞σφεΓ. ╧ε±δσΣφΦΘ ∩α≡α∞σ≥≡ φσ Γδ σ≥± ∩≡Φφ÷Φ∩Φαδⁿφ√∞, φε Σδ ÷σδσΘ ßεδσσ ∩εφ ≥φεπε ∩≡σΣ±≥αΓδσφΦ σπε ±δσΣ≤σ≥ ≤±≥αφεΓΦ≥ⁿ. ┼±δΦ ∩ε≈≥εΓ√Θ ΩδΦσφ≥ φσ ∩εΣΣσ≡µΦΓασ≥ MIME, ≥ε Σαφφ√Θ ∩α≡α∞σ≥≡ ±δσΣ≤σ≥ ταΩε∞σφ≥α≡Φ≥ⁿ.
╤δσΣ≤■∙Φσ ΣΓσ ±σΩ÷ΦΦ ε∩≡σΣσδ ■≥ ≤≡εΓσφⁿ ±εεß∙σφΦΘ εß ε°ΦßΩα⌡ Φ ΣεΓσ≡σφφ√⌡ ∩εδⁿτεΓα≥σδσΘ:
########################### # Message precedence # ########################### Pfirst-class=0 Pspecial-delivery=100 Plist=-30 Pbulk=-60 Pjunk=-100 ##################### # Trusted users # ##################### Troot Tdaemon Tuucp
╟α ²≥Φ∞Φ ΣΓ≤∞ ±σΩ÷Φ ∞Φ ±δσΣ≤σ≥ ±σΩ÷Φ ε∩Φ±αφΦ ∩εδσΘ ταπεδεΓΩα ∩ε≈≥εΓεπε ±εεß∙σφΦ , Ωε≥ε≡√Θ πσφσ≡Φ≡≤σ≥± ∩≡επ≡α∞∞εΘ sendmail:
######################### # Format of headers # ######################### H?P?Return-Path: $g HReceived: $?sfrom $s $.$?_($?s$|from $.$_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for $u$.; $b H?D?Resent-Date: $a H?D?Date: $a H?F?Resent-From: $q H?F?From: $q H?x?Full-Name: $x HSubject: # HPosted-Date: $a # H?l?Received-Date: $b H?M?Resent-Message-Id: <$t.$i@$j> H?M?Message-Id: <$t.$i@$j>
╘ε≡∞α≥ Ωε∞αφΣ ΣαφφεΘ ±σΩ÷ΦΦ ε∩≡σΣσδ σ≥ ΩαΩΦσ ∩εδ ΓΩδ■≈α■≥± Γ ταπεδεΓεΩ, α ΩαΩΦσ φσ ΓΩδ■≈α■≥± . ─αφφα ±σΩ÷Φ ≥σ±φε ±Γ ταφα ± ±σΩ÷ΦσΘ ε∩≡σΣσδσφΦ ∩≡επ≡α∞∞ ≡α±±√δΩΦ ∩ε≈≥√. ┼±δΦ ∩ε±δσ H φσ≥ τφαΩα Γε∩≡ε±α, ≥ε ∩εδσ ΓΩδ■≈ασ≥± Γ ταπεδεΓεΩ ±εεß∙σφΦ Σδ δ■ßεΘ ∩≡επ≡α∞∞√ ≡α±±√δΩΦ, σ±δΦ ∩ε±δσ H ±Φ∞Γεδ "?" ∩≡Φ±≤≥±≥Γ≤σ≥, ≥ε Γ ±≥≡εΩσ α≡π≤∞σφ≥εΓ ∩≡επ≡α∞∞√ ≡α±±√δΩΦ Σαφφ√Θ ⌠δαπ Σεδµσφ ß√≥ⁿ ε∩≡σΣσδσφ Σδ ≥επε, ≈≥εß√ Σαφφεσ ∩εδσ ß√δε ΓΩδ■≈σφε Γ ταπεδεΓεΩ. ╩αΩ ±δσΣ≤σ≥ Φτ ∩≡ΦΓσΣσφφεπε Γ√°σ ε∩Φ±αφΦ , Γ±σπΣα ΓΩδ■≈α■≥± ≥εδⁿΩε ∩εδ Received Φ Subject. ┬±σ ∩σ≡σ≈Φ±δσφφ√σ ∩εδ φσ Γδ ■≥± εß τα≥σδⁿφ√∞Φ ∩εδ ∞Φ ταπεδεΓΩα.
╤δσΣ≤■∙α ±σΩ÷Φ - ∩≡αΓΦδα ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ. ═ε ∩≡σµΣσ ≈σ∞ εß±≤µΣα≥ⁿ σσ ±εΣσ≡µαφΦσ ±δσΣ≤σ≥ ±Ωατα≥ⁿ ΩαΩ Φ ΩεπΣα sendmail ²≥Φ αΣ≡σ±α ∩≡σεß≡ατεΓ√Γασ≥.
╧≡σµΣσ Γ±σπε φσεß⌡εΣΦ∞ε ≡α±±∞ε≥≡σ≥ⁿ ±⌡σ∞≤ ∩≡σεß≡ατεΓαφΦ (≡Φ±≤φεΩ 3.3).
╨Φ±. 3.3. ╧≡αΓΦδα
╧≡Φ ∩εδ≤≈σφΦΦ ∩ε≈≥εΓεπε ±εεß∙σφΦ αΣ≡σ±α, ≤Ωαταφφ√σ Γ ∩εδ ⌡ To, From, Cc, ∩≡σεß≡ατ≤■≥± Γ ±εε≥Γσ≥±≥ΓΦΦ ± ∩≡αΓΦδα∞Φ ∩≡σεß≡ατεΓαφΦ .
###################################################################### ###################################################################### ##### ##### REWRITING RULES ##### ###################################################################### ###################################################################### ########################################### ### Rulset 3 - Name Canonicalization ### ########################################### S3 # handle null input (translate to <@> special case) R$@ $@ <@> # basic textual canonicalization -- note RFC733 heuristic here R$*<$*>$*<$*>$* $2$3<$4>$5 strip multiple <> <> R$*<$*<$+>$*>$* <$3>$5 2-level <> nesting R$*<>$* $@ <@> MAIL FROM:<> case R$*<$+>$* $2 basic RFC821/822 parsing # handle list:; syntax as special case R$*:;$* $@ $1 :; <@> # make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone later R@ $+ , $+ @ $1 : $2 change all "," to ":" # localize and dispose of route-based addresses R@ $+ : $+ $@ $>96 < @$1 > : $2 handle <route-addr> # find focus for list syntax R $+ : $* ; @ $+ $@ $>96 $1 : $2 ; < @ $3 > list syntax R $+ : $* ; $@ $1 : $2; list syntax # find focus for @ syntax addresses R$+ @ $+ $: $1 < @ $2 > focus on domain R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right R$+ < @ $+ > $@ $>96 $1 < @ $2 > already canonical # do some sanity checking R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs
# convert old-style addresses to a domain-based address R$- ! $+ $@ $>96 $2 < @ $1 .UUCP > resolve uucp names R$+ . $- ! $+ $@ $>96 $3 < @ $1 . $2 > domain uucps R$+ ! $+ $@ $>96 $2 < @ $1 .UUCP > uucp subdomains # if we have % signs, take the rightmost one R$* % $* $1 @ $2 First make them all @s. R$* @ $* @ $* $1 % $2 @ $3 Undo all but the last. R$* @ $* $@ $>96 $1 < @ $2 > Insert < > and finish # else we must be a local name ################################################ ### Ruleset 96 - bottom half of ruleset 3 ### ################################################ # At this point, everything should be in a "local_part<@domain>extra" format. S96 # handle special cases for local names R$* < @ localhost > $* $: $1 < @ $j . > $2 no domain at all R$* < @ localhost . $m > $* $: $1 < @ $j . > $2 local domain R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domain R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d] R$* < @@ $=w > $* $: $1 < @ $j . > $3 self-literal R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon IP addr # pass UUCP addresses straight through R$* < @ $+ . UUCP > $* $@ $1 < @ $2 . UUCP . > $3 # pass to name server to make hostname canonical R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 # local host aliases and pseudo-domains are always canonical R$* < @ $=w > $* $: $1 < @ $2 . > $3 R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4 R$* < @ $* . . > $* $1 < @ $2 . > $3 # if this is the local hostname, make sure we treat is as canonical R$* < @ $j > $* $: $1 < @ $j . > $2 ################################################## ### Ruleset 4 - Final Output Post-rewriting ### ################################################## S4 R$*<@> $@ $1 handle <> and list:; # strip trailing dot off possibly canonical name R$* < @ $+ . > $* $1 < @ $2 > $3 # externalize local domain info R$* < $+ > $* $1 $2 $3 defocus R@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr> canonical R@ $* $@ @ $1 ...and exit # UUCP must always be presented in old form R$+ @ $- . UUCP $2!$1 u@h.UUCP => h!u # delete duplicate local names R$+ % $=w @ $=w $1 @ $j u%host@host => u@host ############################################################## ### Ruleset 97 - recanonicalize and call ruleset zero ### ### (used for recursive calls) ### ############################################################## S97 R$* $: $>3 $1 R$* $@ $>0 $1 ###################################### ### Ruleset 0 - Parse Address ### ###################################### S0 R<@> $#local $: <> special case error msgs R$* : $* ; $#error $@ USAGE $: "list:; syntax illegal for recipient addresses" R<@ $+> $#error $@ USAGE $: "user address required" R<$* : $* > $#error $@ USAGE $: "colon illegal in host name part" # handle numeric address spec R$* < @ [ $+ ] > $* $: $>98 $1 < @ [ $2 ] > $3 numeric internet spec R$* < @ [ $+ ] > $* $#smtp $@ [$2] $: $1 < @ [$2] > $3 still numeric: send # now delete the local info -- note $=O to find characters that cause forwarding R$* < @ > $* $@ $>97 $1 user@ => user R< @ $=w . > : $* $@ $>97 $2 @here:... -> ... R$* $=O $* < @ $=w . > $@ $>97 $1 $2 $3 ...@here -> ...
# handle local hacks R$* $: $>98 $1 # short circuit local delivery so forwarded email works R$+ < @ $=w . > $: $1 < @ $2 . @ $H > first try hub R$+ < $+ @ $+ > $#local $: $1 yep .... R$+ < $+ @ > $#local $: @ $1 nope, local address # resolve remotely connected UUCP links (if any) # resolve fake top level domains by forwarding to other hosts R$*<@$+.BITNET.>$* $: $>95 < $B > $1 <@$2.BITNET.> $3 user@host.BITNET # forward non-local UUCP traffic to our UUCP relay R$*<@$*.UUCP.>$* $: $>95 < $Y > $1 <@$2.UUCP.> $3 uucp mail # pass names that still have a host to a smarthost (if defined) R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on smarthost name # deal with other remote names R$* < @$* > $* $#smtp $@ $2 $: $1 < @ $2 > $3 user@host.domain # if this is quoted, strip the quotes and try again R$+ $: $(dequote $1 $) strip quotes R$+ $=O $+ $@ $>97 $1 $2 $3 try again # handle locally delivered names R$=L $#local $: @ $1 special local names R$+ $#local $: $1 regular local names ########################################################################### ### Ruleset 5 - special rewriting after aliases have been expanded ### ### (new sendmail only) ### ########################################################################### S5 # see if we have a relay or a hub R$+ $: < $R > $1 try relay R< > $+ $: < $H > $1 try hub R< > $+ $@ $1 nope, give up R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 > R< $+ > $+ $@ $>95 < $1 > $2 < @ $1 > ################################################################### ### Ruleset 95 - canonify mailer:host syntax to triple ### ################################################################### S95 R< > $* $@ $1 strip off null relay R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer R< $=w > $* $@ $2 delete local host R< $+ > $* $#relay $@ $1 $: $2 use unqualified mailer ################################################################### ### Ruleset 98 - local part of ruleset zero (can be null) ### ################################################################### S98
╟α ±σΩ÷ΦσΘ ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ ±δσΣ≤σ≥ ±σΩ÷Φ ε∩≡σΣσδσφΦ ∩≡επ≡α∞∞ ≡α±±√δΩΦ ∩ε≈≥√. ┬ φσΘ ε∩≡σΣσδ σ≥± δεΩαδⁿφα ∩≡επ≡α∞∞α ≡α±±√δΩΦ (mail), ∩≡επ≡α∞∞α ≡α±±√δΩΦ Σδ Γ√∩εδφσφΦ (sh) Φ ∩≡επ≡α∞∞α ≡α±±√δΩΦ ∩ε SMTP.
################################################## ### Local and Program Mailer specification ### ################################################## Mlocal, P=/usr/libexec/mail.local, F=lsDFMrmn, S=10, R=20/40, A=mail -d $u Mprog, P=/bin/sh, F=lsDFMeu, S=10, R=20/40, D=$z:/, A=sh -c $u S10 R<@> $n errors to mailer-daemon R$+ $: $>40 $1 S20 R$+ < @ $* > $: $1 strip host part S40 ##################################### ### SMTP Mailer specification ### ##################################### Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990, A=IPC $h Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990, A=IPC $h Mrelay, P=[IPC], F=mDFMuXa, S=11/31, R=61, E=\r\n, L=2040, A=IPC $h
╟α≥σ∞ ΦΣ≤≥ ∩≡αΓΦδα ε∩≡σΣσδσφΦ δεΩαδⁿφεπε ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ Σδ ΩεφΩ≡σ≥φ√⌡ ∩≡επ≡α∞∞ ≡α±±√δΩΦ, Γ ≈α±≥φε±≥Φ φαßε≡ ∩≡αΓΦδ S11.
# envelope sender and masquerading recipient rewriting # S11 R$+ $: $>51 $1 sender/recipient common R$* :; <@> $@ $1:; list:; special case R$* $@ $>61 $1 qualify unqual'ed names
┬ ±σΩ÷ΦΦ ∩≡επ≡α∞∞ ≡α±±√δΩΦ ∞√ Γ φα°σ∞ ∩≡Φ∞σ≡σ φσ ≤ΩαταδΦ σ∙σ εΣφ≤ Γαµφ≤■ Γετ∞εµφε±≥ⁿ - ≡α±±√δΩ≤ ∩ε ∩≡ε≥εΩεδ≤ UUCP:
╠uucp, P=/usr/bin/uux, F=DFMhuU, S=13, R=23, M=100000, A=uux - -r -z -a$f -gC $h!rmail
┼±≥σ±≥Γσφφε, ≈≥ε ∩≡αΓΦδα ∩≡σεß≡ατεΓαφΦ αΣ≡σ±εΓ S13 Φ R23 Σεδµφ√ ß√≥ⁿ ε∩Φ±αφ√ Γ ⌠αΘδσ φα±≥≡εσΩ sendmail.
═αταΣ | ╤εΣσ≡µαφΦσ | ┬∩σ≡σΣ