Some debugging output references C language structures that are internal to sendmail. For those it will help if you have access to sendmail source. One subroutine, called printaddr(), is used to dump complete details about all the recipients for a given mail message. This subroutine is used by many categories of debugging output, but rather than describe it repeatedly, we describe it once here and reference this description as needed.
The sendmail program's internal printaddr() subroutine prints details about addresses. The sendmail program views an address as more than just an expression like wc@bcx.com. Internally, it represents every address with a C language structure. The printaddr() routine prints the values stored in most of the items of that structure. Its output looks like this:
ra
=addr
: mailermnum
(mname
), hosthname
user `uname
', ruser `rname
' next=link
, aliasaname
, uiduid
, gidgid
flags=fhex
<names here> owner=owner
, home="home
", fullname="fname
" orcpt="oparam
", statmta=mta
, status=status
rstatus="rstatus
" specificity=spec
, statdate=statdate
First, sendmail prints the address in memory,
ra
, of the C language struct that contains the information
necessary to deliver a mail message.
It then prints the
information in that structure:
addr
The mail address as text, e.g. you@uofa.edu
mnum
Number of the delivery agent to be used (an index into the array of delivery agents)
mname
Symbolic name of that delivery agent (from rule set 0, $#
)
hname
Name of the recipient's host machine (from rule set 0, $@
)
uname
Recipient's mail name (from rule set 0, $:
)
rname
Recipient's login name, if known; otherwise, it is <null>
link
Address in memory of the next C language structure of information about the next recipient in the list of recipients
aname
Address in memory of the next C language structure of information about the alias that led to this address (if there was one)
uid
and gid
The uid and gid assigned to this delivery agent. These values are
derived from the ownership permissions of either a :include:
file or a .forward file (see Section 24.2.2, "Delivery to Files").
fhex
A hexadecimal representation of the possible envelope flags. This is immediately followed by a list of the flags inside the angle brackets. (See Table 37.1 for a description of each flag.)
owner
The owner-
that corresponds to the aname
above, if
there is one
home
Home directory of the recipient (for local mail only)
Name | Hex | Description |
---|---|---|
QDONTSEND | 0x00000001 | Don't send to this address |
QBADADDR | 0x00000002 | This address is verified bad |
QGOODUID | 0x00000004 | The uid and gid fields are good |
QPRIMARY | 0x00000008 | Status was set from argv |
QQUEUEUP | 0x00000010 | Queue for later transmission |
QSENT | 0x00000020 | Message has been successfully delivered |
QNOTREMOTE | 0x00000040 | Not an address for remote forwarding |
QSELFREF | 0x00000080 | Address is part of a loop |
QVERIFIED | 0x00000100 | Address verified, but not expanded |
QBOGUSSHELL | 0x00000400 | User has no valid shell listed |
QUNSAFEADDR | 0x00000800 | Address acquired via unsafe path |
QPINGONSUCCESS | 0x00001000 | Give return on successful delivery |
QPINGONFAILURE | 0x00002000 | Give return on failure |
QPINGONDELAY | 0x00004000 | Give return on message delay |
QHASNOTIFY | 0x00008000 | Propagate notify parameter |
QRELAYED | 0x00010000 | Relayed to non-DSN aware system (DSN) |
QEXPANDED | 0x00020000 | Has undergone list expansion (DSN) |
QDELIVERED | 0x00040000 | Final delivery succeeded (DSN) |
QDELAYED | 0x00080000 | Message was delayed (DSN) |
fname
Full name of the recipient if it is known
oparam
The ORCPT parameter to the SMTP RCPT command if there was one.
mta
The name of the MTA host (such as "other.dc.gov")
that generated the Delivery
Status Notification (DSN) message shown in rstatus
status
The DSN number as text
rstatus
The DSN message from the sending host's MTA.
spec
How specific this address is (unused as of V8.8.4)
statdate
The date and time the status of this address changed