2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-23 02:17:44 +00:00

postfix-3.10-20240917

This commit is contained in:
Wietse Z Venema 2024-09-17 00:00:00 -05:00 committed by Viktor Dukhovni
parent e6eb5ba2b6
commit 7655cf261d
37 changed files with 228 additions and 534 deletions

View File

@ -28199,4 +28199,24 @@ Apologies for any names omitted.
with guidance to enforce that the From: header address with guidance to enforce that the From: header address
matches the envelope sender (MAIL FROM) address. File: matches the envelope sender (MAIL FROM) address. File:
proto/postconf.proto. proto/postconf.proto.
20240909
Bitrot: some platforms prefer the pkgconf command over pkg-config,
which in turn has superseded icu-config. File: makedefs.
20230910
Cleanup: the enable_threaded_bounces feature was re-implemented.
This simplifies the code and improves the handling of
multiline Message-Id: headers (no software should generate
those, but...). Files: bounce/bounce_notify_util.c,
cleanup/cleanup.h, cleanup/cleanup_extracted.c,
cleanup/cleanup_message.c, cleanup/cleanup_state.c,
global/mail_proto.h, multiple bounce testfiles.
20240917
Minor feature: "postcat -f" option to prepend the filename
to each output line. This simplifies test data development.
File: postcat/postcat.c.

View File

@ -6,6 +6,12 @@ Wish list:
Disable -DSNAPSHOT and -DNONPROD in makedefs. Disable -DSNAPSHOT and -DNONPROD in makedefs.
Add tests for Message-ID extraction in the cleanup daemon.
The postdrop code should be more explicit about what
attrributes it will pass through. rec_attr_map() is not
supposed to be an approver.
Many master.cf services don't expect wakeup calls, resulting Many master.cf services don't expect wakeup calls, resulting
in weird warnings. Maybe the master daemon could signal the in weird warnings. Maybe the master daemon could signal the
wakeup intent through a child process command-line option, wakeup intent through a child process command-line option,
@ -16,6 +22,13 @@ Wish list:
using FIFOs anymore, and trigger servers could use a proper using FIFOs anymore, and trigger servers could use a proper
(attribute, value) protocol. (attribute, value) protocol.
The Sendmail feature _FFR_MDS_NEGOTIATE allows negotiating
a larger milter command data size limit. To be investigated:
what parts of the protocol are included in this limit when
sending a message header (header name, protocol formatting,
etc.) and how this will interact with the Postfix built-in
header_size_limit (default: 102400).
SEND_ATTR_FUNC should send the name of the object being sent, SEND_ATTR_FUNC should send the name of the object being sent,
so that SCAN_ATTR_FUNC can check it. so that SCAN_ATTR_FUNC can check it.

View File

@ -66,33 +66,34 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>-DNO_EAI</b> <b>-DNO_EAI</b>
Do not build with EAI (SMTPUTF8) support. By default, EAI Do not build with EAI (SMTPUTF8) support. By default, EAI
support is compiled in when the "pkg-config" command is support is compiled in when the "pkgconf" or "pkg-config"
found, or the deprecated "icu-config" command. command are found, or the deprecated "icu-config" com-
mand.
<b>-DNO_INLINE</b> <b>-DNO_INLINE</b>
Do not require support for C99 "inline" functions. Do not require support for C99 "inline" functions.
Instead, implement argument typechecks for Instead, implement argument typechecks for
non-(printf/scanf)-like functions with ternary operators non-(printf/scanf)-like functions with ternary operators
and unreachable code. and unreachable code.
<b>-DNO_IPV6</b> <b>-DNO_IPV6</b>
Do not build with IPv6 support. By default, IPv6 support Do not build with IPv6 support. By default, IPv6 support
is compiled in on platforms that are known to have IPv6 is compiled in on platforms that are known to have IPv6
support. support.
Note: this directive is for debugging and testing only. Note: this directive is for debugging and testing only.
It is not guaranteed to work on all platforms. If you It is not guaranteed to work on all platforms. If you
don't want IPv6 support, set "<a href="postconf.5.html#inet_protocols">inet_protocols</a> = ipv4" in don't want IPv6 support, set "<a href="postconf.5.html#inet_protocols">inet_protocols</a> = ipv4" in
<a href="postconf.5.html">main.cf</a>. <a href="postconf.5.html">main.cf</a>.
<b>-DNO_IP_CYRUS_SASL_AUTH</b> <b>-DNO_IP_CYRUS_SASL_AUTH</b>
Don't pass remote SMTP client and Postfix SMTP server IP Don't pass remote SMTP client and Postfix SMTP server IP
address and port information to the Cyrus SASL library. address and port information to the Cyrus SASL library.
This is compatible with Postfix &lt; 3.2. This is compatible with Postfix &lt; 3.2.
<b>-DNO_KQUEUE</b> <b>-DNO_KQUEUE</b>
Do not build with FreeBSD/NetBSD/OpenBSD/MacOSX KQUEUE Do not build with FreeBSD/NetBSD/OpenBSD/MacOSX KQUEUE
support. By default, KQUEUE support is compiled in on support. By default, KQUEUE support is compiled in on
platforms that are known to support it. platforms that are known to support it.
<b>-DNO_NIS</b> <b>-DNO_NIS</b>
@ -112,45 +113,45 @@ MAKEDEFS(1) MAKEDEFS(1)
Disable support for POSIX getpwnam_r/getpwuid_r. Disable support for POSIX getpwnam_r/getpwuid_r.
<b>-DNO_RES_NCALLS</b> <b>-DNO_RES_NCALLS</b>
Do not build with the threadsafe resolver(5) API Do not build with the threadsafe resolver(5) API
(res_ninit() etc.). (res_ninit() etc.).
<b>-DNO_SIGSETJMP</b> <b>-DNO_SIGSETJMP</b>
Use setjmp()/longjmp() instead of sigsetjmp()/sig- Use setjmp()/longjmp() instead of sigsetjmp()/sig-
longjmp(). By default, Postfix uses sigsetjmp()/sig- longjmp(). By default, Postfix uses sigsetjmp()/sig-
longjmp() when they appear to work. longjmp() when they appear to work.
<b>-DNO_SNPRINTF</b> <b>-DNO_SNPRINTF</b>
Use sprintf() instead of snprintf(). By default, Postfix Use sprintf() instead of snprintf(). By default, Postfix
uses snprintf() except on ancient systems. uses snprintf() except on ancient systems.
<b>DEBUG=</b><i>debug</i><b>_</b><i>level</i> <b>DEBUG=</b><i>debug</i><b>_</b><i>level</i>
Specifies a non-default debugging level. The default is <b>-g</b>. Specifies a non-default debugging level. The default is <b>-g</b>.
Specify <b>DEBUG=</b> to turn off debugging. Specify <b>DEBUG=</b> to turn off debugging.
<b>OPT=</b><i>optimization</i><b>_</b><i>level</i> <b>OPT=</b><i>optimization</i><b>_</b><i>level</i>
Specifies a non-default optimization level. The default is <b>-O</b>. Specifies a non-default optimization level. The default is <b>-O</b>.
Specify <b>OPT=</b> to turn off optimization. Specify <b>OPT=</b> to turn off optimization.
<b>POSTFIX_INSTALL_OPTS=</b><i>-option...</i> <b>POSTFIX_INSTALL_OPTS=</b><i>-option...</i>
Specifies options for the postfix-install command, separated by Specifies options for the postfix-install command, separated by
whitespace. Currently, the only supported option is whitespace. Currently, the only supported option is
<b>-keep-build-mtime</b>. <b>-keep-build-mtime</b>.
<b>SHLIB_CFLAGS=</b><i>flags</i> <b>SHLIB_CFLAGS=</b><i>flags</i>
Override the compiler flags (typically, "-fPIC") for Postfix Override the compiler flags (typically, "-fPIC") for Postfix
dynamically-linked libraries and database plugins. dynamically-linked libraries and database plugins.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
<b>SHLIB_RPATH=</b><i>rpath</i> <b>SHLIB_RPATH=</b><i>rpath</i>
Override the runpath (typically, "'-Wl,-rpath,${SHLIB_DIR}'") Override the runpath (typically, "'-Wl,-rpath,${SHLIB_DIR}'")
for Postfix dynamically-linked libraries. for Postfix dynamically-linked libraries.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
<b>SHLIB_SUFFIX=</b><i>suffix</i> <b>SHLIB_SUFFIX=</b><i>suffix</i>
Override the filename suffix (typically, ".so") for Postfix Override the filename suffix (typically, ".so") for Postfix
dynamically-linked libraries and database plugins. dynamically-linked libraries and database plugins.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
@ -158,7 +159,7 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>shared=yes</b> <b>shared=yes</b>
<b>shared=no</b> <b>shared=no</b>
Enable (disable) Postfix builds with dynamically-linked Enable (disable) Postfix builds with dynamically-linked
libraries typically named $<a href="postconf.5.html#shlib_directory">shlib_directory</a>/libpostfix-*.so.*. libraries typically named $<a href="postconf.5.html#shlib_directory">shlib_directory</a>/libpostfix-*.so.*.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
@ -166,39 +167,39 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>dynamicmaps=yes</b> <b>dynamicmaps=yes</b>
<b>dynamicmaps=no</b> <b>dynamicmaps=no</b>
Enable (disable) Postfix builds with the configuration file Enable (disable) Postfix builds with the configuration file
$<a href="postconf.5.html#meta_directory">meta_directory</a>/dynamicmaps.cf and dynamically-loadable database $<a href="postconf.5.html#meta_directory">meta_directory</a>/dynamicmaps.cf and dynamically-loadable database
plugins typically named postfix-*.so.*. The setting "dynam- plugins typically named postfix-*.so.*. The setting "dynam-
icmaps=yes" implicitly enables Postfix dynamically-linked icmaps=yes" implicitly enables Postfix dynamically-linked
libraries. libraries.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
<b>pie=yes</b> <b>pie=yes</b>
<b>pie=no</b> Enable (disable) Postfix builds with position-independent exe- <b>pie=no</b> Enable (disable) Postfix builds with position-independent exe-
cutables, on platforms where this is supported. cutables, on platforms where this is supported.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
<i>installation</i><b>_</b><i>parameter</i><b>=</b><i>value</i>... <i>installation</i><b>_</b><i>parameter</i><b>=</b><i>value</i>...
Override the compiled-in default value of the specified instal- Override the compiled-in default value of the specified instal-
lation parameter(s). The following parameters are supported in lation parameter(s). The following parameters are supported in
this context: this context:
<a href="postconf.5.html#command_directory">command_directory</a> <a href="postconf.5.html#config_directory">config_directory</a> <a href="postconf.5.html#daemon_directory">daemon_directory</a> <a href="postconf.5.html#data_directory">data_direc</a>- <a href="postconf.5.html#command_directory">command_directory</a> <a href="postconf.5.html#config_directory">config_directory</a> <a href="postconf.5.html#daemon_directory">daemon_directory</a> <a href="postconf.5.html#data_directory">data_direc</a>-
<a href="postconf.5.html#data_directory">tory</a> <a href="postconf.5.html#default_database_type">default_database_type</a> <a href="postconf.5.html#html_directory">html_directory</a> <a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a> <a href="postconf.5.html#data_directory">tory</a> <a href="postconf.5.html#default_database_type">default_database_type</a> <a href="postconf.5.html#html_directory">html_directory</a> <a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a>
<a href="postconf.5.html#mailq_path">mailq_path</a> <a href="postconf.5.html#manpage_directory">manpage_directory</a> <a href="postconf.5.html#meta_directory">meta_directory</a> <a href="postconf.5.html#newaliases_path">newaliases_path</a> <a href="postconf.5.html#mailq_path">mailq_path</a> <a href="postconf.5.html#manpage_directory">manpage_directory</a> <a href="postconf.5.html#meta_directory">meta_directory</a> <a href="postconf.5.html#newaliases_path">newaliases_path</a>
<a href="postconf.5.html#queue_directory">queue_directory</a> <a href="postconf.5.html#readme_directory">readme_directory</a> <a href="postconf.5.html#sendmail_path">sendmail_path</a> <a href="postconf.5.html#shlib_directory">shlib_directory</a> <a href="postconf.5.html#queue_directory">queue_directory</a> <a href="postconf.5.html#readme_directory">readme_directory</a> <a href="postconf.5.html#sendmail_path">sendmail_path</a> <a href="postconf.5.html#shlib_directory">shlib_directory</a>
<a href="postconf.5.html#openssl_path">openssl_path</a> <a href="postconf.5.html#openssl_path">openssl_path</a>
See the <a href="postconf.5.html">postconf(5)</a> manpage for a description of these parame- See the <a href="postconf.5.html">postconf(5)</a> manpage for a description of these parame-
ters. ters.
This feature was introduced with Postfix 3.0. This feature was introduced with Postfix 3.0.
<b>WARN=</b><i>warning</i><b>_</b><i>flags</i> <b>WARN=</b><i>warning</i><b>_</b><i>flags</i>
Specifies non-default gcc compiler warning options for use when Specifies non-default gcc compiler warning options for use when
"make" is invoked in a source subdirectory only. "make" is invoked in a source subdirectory only.
<b>LICENSE</b> <b>LICENSE</b>

View File

@ -11,7 +11,7 @@ POSTCAT(1) POSTCAT(1)
postcat - show Postfix queue file contents postcat - show Postfix queue file contents
<b>SYNOPSIS</b> <b>SYNOPSIS</b>
<b>postcat</b> [<b>-bdehnoqv</b>] [<b>-c</b> <i>config</i><b>_</b><i>dir</i>] [<i>files</i>...] <b>postcat</b> [<b>-bdefhnoqv</b>] [<b>-c</b> <i>config</i><b>_</b><i>dir</i>] [<i>files</i>...]
<b>DESCRIPTION</b> <b>DESCRIPTION</b>
The <a href="postcat.1.html"><b>postcat</b>(1)</a> command prints the contents of the named <i>files</i> in The <a href="postcat.1.html"><b>postcat</b>(1)</a> command prints the contents of the named <i>files</i> in
@ -41,6 +41,8 @@ POSTCAT(1) POSTCAT(1)
This feature is available in Postfix 2.7 and later. This feature is available in Postfix 2.7 and later.
<b>-f</b> Prepend the file name to each output line.
<b>-h</b> Show message header content. The <b>-h</b> option produces output from <b>-h</b> Show message header content. The <b>-h</b> option produces output from
the beginning of the message up to, but not including, the first the beginning of the message up to, but not including, the first
non-header line. non-header line.

View File

@ -61,7 +61,8 @@
# are known to support it. # are known to support it.
# .IP \fB-DNO_EAI\fR # .IP \fB-DNO_EAI\fR
# Do not build with EAI (SMTPUTF8) support. By default, EAI # Do not build with EAI (SMTPUTF8) support. By default, EAI
# support is compiled in when the "pkg-config" command is # support is compiled in when the "pkgconf" or "pkg-config"
# command are
# found, or the deprecated "icu-config" command. # found, or the deprecated "icu-config" command.
# .IP \fB-DNO_INLINE\fR # .IP \fB-DNO_INLINE\fR
# Do not require support for C99 "inline" functions. Instead, # Do not require support for C99 "inline" functions. Instead,
@ -878,8 +879,10 @@ esac
case "$CCARGS" in case "$CCARGS" in
*-DNO_EAI*) CCARGS="$CCARGS "'-DDEF_SMTPUTF8_ENABLE=\"no\"';; *-DNO_EAI*) CCARGS="$CCARGS "'-DDEF_SMTPUTF8_ENABLE=\"no\"';;
*) icu_cppflags=`((pkg-config --cflags icu-uc icu-i18n) || *) icu_cppflags=`((pkg-config --cflags icu-uc icu-i18n) ||
(pkgconf --cflags icu-uc icu-i18n) ||
(icu-config --cppflags)) 2>/dev/null` && { (icu-config --cppflags)) 2>/dev/null` && {
icu_ldflags=`((pkg-config --libs icu-uc icu-i18n) || icu_ldflags=`((pkg-config --libs icu-uc icu-i18n) ||
(pkgconf --libs icu-uc icu-i18n) ||
(icu-config --ldflags)) 2>/dev/null` && { (icu-config --ldflags)) 2>/dev/null` && {
trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15 trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15
cat >makedefs.test.c <<'EOF' cat >makedefs.test.c <<'EOF'

View File

@ -64,7 +64,8 @@ By default, EPOLL support is compiled in on platforms that
are known to support it. are known to support it.
.IP \fB\-DNO_EAI\fR .IP \fB\-DNO_EAI\fR
Do not build with EAI (SMTPUTF8) support. By default, EAI Do not build with EAI (SMTPUTF8) support. By default, EAI
support is compiled in when the "pkg\-config" command is support is compiled in when the "pkgconf" or "pkg\-config"
command are
found, or the deprecated "icu\-config" command. found, or the deprecated "icu\-config" command.
.IP \fB\-DNO_INLINE\fR .IP \fB\-DNO_INLINE\fR
Do not require support for C99 "inline" functions. Instead, Do not require support for C99 "inline" functions. Instead,

View File

@ -8,7 +8,7 @@ show Postfix queue file contents
.SH "SYNOPSIS" .SH "SYNOPSIS"
.na .na
.nf .nf
\fBpostcat\fR [\fB\-bdehnoqv\fR] [\fB\-c \fIconfig_dir\fR] [\fIfiles\fR...] \fBpostcat\fR [\fB\-bdefhnoqv\fR] [\fB\-c \fIconfig_dir\fR] [\fIfiles\fR...]
.SH DESCRIPTION .SH DESCRIPTION
.ad .ad
.fi .fi
@ -39,6 +39,8 @@ Print the decimal type of each record.
Show message envelope content. Show message envelope content.
.sp .sp
This feature is available in Postfix 2.7 and later. This feature is available in Postfix 2.7 and later.
.IP \fB\-f\fR
Prepend the file name to each output line.
.IP \fB\-h\fR .IP \fB\-h\fR
Show message header content. The \fB\-h\fR option produces Show message header content. The \fB\-h\fR option produces
output from the beginning of the message up to, but not output from the beginning of the message up to, but not

View File

@ -128,3 +128,5 @@ proto proto mysql_table proto pgsql_table proto ldap_table
an unknown or unimplemented command File smtpd smtpd c an unknown or unimplemented command File smtpd smtpd c
inside more consistent Files proto master pipe pipe c inside more consistent Files proto master pipe pipe c
unimplemented commands in the SMTP server File smtpd smtpd c unimplemented commands in the SMTP server File smtpd smtpd c
cleanup cleanup h cleanup cleanup_extracted c
File postcat postcat c

View File

@ -1841,3 +1841,4 @@ foqvx
ILP ILP
xxfi xxfi
optionsv optionsv
bdefhnoqv

View File

@ -81,3 +81,4 @@ cgi
mozilla mozilla
Dilyan Dilyan
Palauzov Palauzov
pkgconf

View File

@ -39,12 +39,7 @@ Makefile: Makefile.in
test: $(TESTPROG) test: $(TESTPROG)
tests: update template_test obs_template_test 2template_test \ tests: update template_test obs_template_test 2template_test \
with-msgid-with-long-line_test \ with-message-id_test no-message-id_test
with-msgid-with-eoh-event_test \
with-msgid-no-eoh-event_test \
no-msgid-with-eoh-event_test \
no-msgid-no-eoh-event_test \
with-msgid-with-filter_test
root_tests: root_tests:
@ -72,9 +67,9 @@ template_test: $(PROG) template_test.ref
echo myhostname=example.com >>main.cf echo myhostname=example.com >>main.cf
echo header_from_format=standard >>main.cf echo header_from_format=standard >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates >template_test.tmp MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates >template_test.tmp
diff template_test.ref template_test.tmp diff template_test.ref template_test.tmp
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates \ MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates \
-o bounce_template_file=template_test.ref > template_test.tmp -o bounce_template_file=template_test.ref > template_test.tmp
diff template_test.ref template_test.tmp diff template_test.ref template_test.tmp
rm -f template_test.tmp main.cf rm -f template_test.tmp main.cf
@ -84,7 +79,7 @@ obs_template_test: $(PROG) obs_template_test.ref
echo myhostname=example.com >>main.cf echo myhostname=example.com >>main.cf
echo header_from_format=obsolete >>main.cf echo header_from_format=obsolete >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates >template_test.tmp MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates >template_test.tmp
diff obs_template_test.ref template_test.tmp diff obs_template_test.ref template_test.tmp
rm -f template_test.tmp main.cf rm -f template_test.tmp main.cf
@ -92,29 +87,31 @@ obs_template_test: $(PROG) obs_template_test.ref
echo queue_directory=. >main.cf echo queue_directory=. >main.cf
echo myhostname=example.com >>main.cf echo myhostname=example.com >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates \ MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates \
-o bounce_template_file=2template_test.in > template_test.tmp -o bounce_template_file=2template_test.in > template_test.tmp
diff template_test.ref template_test.tmp diff template_test.ref template_test.tmp
rm -f template_test.tmp main.cf rm -f template_test.tmp main.cf
with-msgid-with-long-line_test: bounce_notify_util_tester \ # This tests only the handling of an extracted message ID. The
msgfile-with-msgid-with-long-line logfile-with-msgid-with-long-line \ # tests for extracting a message ID belong with the cleanup code.
with-msgid-with-long-line-no-thread.ref \ with-message-id_test: bounce_notify_util_tester \
with-msgid-with-long-line-with-thread.ref msgfile-with-message-id logfile-with-message-id \
with-message-id-no-thread.ref \
with-message-id-with-thread.ref
rm -rf queue main.cf rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-long-line queue/bounce/msgid cp logfile-with-message-id queue/bounce/msgid
cp msgfile-with-msgid-with-long-line queue/active/msgid cp msgfile-with-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \ $(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \ -c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \ sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-long-line-no-thread.tmp > with-message-id-no-thread.tmp
diff with-msgid-with-long-line-no-thread.ref with-msgid-with-long-line-no-thread.tmp diff with-message-id-no-thread.ref with-message-id-no-thread.tmp
rm -f with-msgid-with-long-line-no-thread.tmp rm -f with-message-id-no-thread.tmp
: :
rm -rf queue main.cf rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf echo 'enable_threaded_bounces = yes' >main.cf
@ -122,34 +119,34 @@ with-msgid-with-long-line_test: bounce_notify_util_tester \
echo 'myhostname = mail.example' >>main.cf echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-long-line queue/bounce/msgid cp logfile-with-message-id queue/bounce/msgid
cp msgfile-with-msgid-with-long-line queue/active/msgid cp msgfile-with-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \ $(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \ -c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \ sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-long-line-with-thread.tmp > with-message-id-with-thread.tmp
diff with-msgid-with-long-line-with-thread.ref with-msgid-with-long-line-with-thread.tmp diff with-message-id-with-thread.ref with-message-id-with-thread.tmp
rm -f with-msgid-with-long-line-with-thread.tmp rm -f with-message-id-with-thread.tmp
rm -rf queue main.cf rm -rf queue main.cf
with-msgid-with-eoh-event_test: bounce_notify_util_tester \ no-message-id_test: bounce_notify_util_tester \
msgfile-with-msgid-with-eoh-event logfile-with-msgid-with-eoh-event \ msgfile-no-message-id logfile-no-message-id \
with-msgid-with-eoh-event-no-thread.ref \ no-message-id-no-thread.ref \
with-msgid-with-eoh-event-with-thread.ref no-message-id-with-thread.ref
rm -rf queue main.cf rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-eoh-event queue/bounce/msgid cp logfile-no-message-id queue/bounce/msgid
cp msgfile-with-msgid-with-eoh-event queue/active/msgid cp msgfile-no-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \ $(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \ -c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \ sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-eoh-event-no-thread.tmp > no-message-id-no-thread.tmp
diff with-msgid-with-eoh-event-no-thread.ref with-msgid-with-eoh-event-no-thread.tmp diff no-message-id-no-thread.ref no-message-id-no-thread.tmp
rm -f with-msgid-with-eoh-event-no-thread.tmp rm -f no-message-id-no-thread.tmp
: :
rm -rf queue main.cf rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf echo 'enable_threaded_bounces = yes' >main.cf
@ -157,154 +154,14 @@ with-msgid-with-eoh-event_test: bounce_notify_util_tester \
echo 'myhostname = mail.example' >>main.cf echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-eoh-event queue/bounce/msgid cp logfile-no-message-id queue/bounce/msgid
cp msgfile-with-msgid-with-eoh-event queue/active/msgid cp msgfile-no-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \ $(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \ -c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \ sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-eoh-event-with-thread.tmp > no-message-id-with-thread.tmp
diff with-msgid-with-eoh-event-with-thread.ref with-msgid-with-eoh-event-with-thread.tmp diff no-message-id-with-thread.ref no-message-id-with-thread.tmp
rm -f with-msgid-with-eoh-event-with-thread.tmp rm -f no-message-id-with-thread.tmp
rm -rf queue main.cf
with-msgid-no-eoh-event_test: bounce_notify_util_tester \
msgfile-with-msgid-no-eoh-event logfile-with-msgid-no-eoh-event \
with-msgid-no-eoh-event-no-thread.ref \
with-msgid-no-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-no-eoh-event-no-thread.tmp
diff with-msgid-no-eoh-event-no-thread.ref with-msgid-no-eoh-event-no-thread.tmp
rm -f with-msgid-no-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-no-eoh-event-with-thread.tmp
diff with-msgid-no-eoh-event-with-thread.ref with-msgid-no-eoh-event-with-thread.tmp
rm -f with-msgid-no-eoh-event-with-thread.tmp
rm -rf queue main.cf
no-msgid-with-eoh-event_test: bounce_notify_util_tester \
msgfile-no-msgid-with-eoh-event logfile-no-msgid-with-eoh-event \
no-msgid-with-eoh-event-no-thread.ref \
no-msgid-with-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-with-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-with-eoh-event-no-thread.tmp
diff no-msgid-with-eoh-event-no-thread.ref no-msgid-with-eoh-event-no-thread.tmp
rm -f no-msgid-with-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-with-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-with-eoh-event-with-thread.tmp
diff no-msgid-with-eoh-event-with-thread.ref no-msgid-with-eoh-event-with-thread.tmp
rm -f no-msgid-with-eoh-event-with-thread.tmp
rm -rf queue main.cf
no-msgid-no-eoh-event_test: bounce_notify_util_tester \
msgfile-no-msgid-no-eoh-event logfile-no-msgid-no-eoh-event \
no-msgid-no-eoh-event-no-thread.ref \
no-msgid-no-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-no-eoh-event-no-thread.tmp
diff no-msgid-no-eoh-event-no-thread.ref no-msgid-no-eoh-event-no-thread.tmp
rm -f no-msgid-no-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-no-eoh-event-with-thread.tmp
diff no-msgid-no-eoh-event-with-thread.ref no-msgid-no-eoh-event-with-thread.tmp
rm -f no-msgid-no-eoh-event-with-thread.tmp
rm -rf queue main.cf
with-msgid-with-filter_test: bounce_notify_util_tester \
msgfile-with-msgid-with-filter logfile-with-msgid-with-filter \
with-msgid-with-filter-no-thread.ref \
with-msgid-with-filter-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-filter queue/bounce/msgid
cp msgfile-with-msgid-with-filter queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-filter-no-thread.tmp
diff with-msgid-with-filter-no-thread.ref with-msgid-with-filter-no-thread.tmp
rm -f with-msgid-with-filter-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-filter queue/bounce/msgid
cp msgfile-with-msgid-with-filter queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-filter-with-thread.tmp
diff with-msgid-with-filter-with-thread.ref with-msgid-with-filter-with-thread.tmp
rm -f with-msgid-with-filter-with-thread.tmp
rm -rf queue main.cf rm -rf queue main.cf
depend: $(MAKES) depend: $(MAKES)

View File

@ -230,10 +230,7 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
{ {
BOUNCE_INFO *bounce_info; BOUNCE_INFO *bounce_info;
int rec_type; int rec_type;
int prev_type;
int all_headers_seen = 0;
int skip_message_segment = 0; int skip_message_segment = 0;
int in_envelope = 1;
/* /*
* Bundle up a bunch of parameters and initialize information that will * Bundle up a bunch of parameters and initialize information that will
@ -322,9 +319,8 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
DELIVER_LOCK_MODE) < 0) DELIVER_LOCK_MODE) < 0)
msg_fatal("cannot get shared lock on %s: %m", msg_fatal("cannot get shared lock on %s: %m",
VSTREAM_PATH(bounce_info->orig_fp)); VSTREAM_PATH(bounce_info->orig_fp));
for (prev_type = 0; while ((rec_type =
(rec_type = rec_get(bounce_info->orig_fp, bounce_info->buf, 0)) > 0; rec_get(bounce_info->orig_fp, bounce_info->buf, 0)) > 0) {
prev_type = rec_type) {
/* /*
* Postfix version dependent: data offset in SIZE record. * Postfix version dependent: data offset in SIZE record.
@ -368,76 +364,28 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
msg_warn("%s: no sender before message content record", msg_warn("%s: no sender before message content record",
bounce_info->queue_id); bounce_info->queue_id);
bounce_info->orig_offs = vstream_ftell(bounce_info->orig_fp); bounce_info->orig_offs = vstream_ftell(bounce_info->orig_fp);
if (var_threaded_bounce == 0) skip_message_segment = 1;
skip_message_segment = 1;
else
in_envelope = 0;
} }
/* /*
* Extract Message-ID for threaded bounces. * Extract Message-ID from extracted segment, for use in threaded
* bounces.
*/ */
else if (in_envelope == 0 else if (rec_type == REC_TYPE_ATTR && var_threaded_bounce) {
&& (rec_type == REC_TYPE_NORM || rec_type == REC_TYPE_CONT)) { char *cp = STR(bounce_info->buf);
const HEADER_OPTS *hdr; ssize_t len = sizeof(MAIL_ATTR_MESSAGE_ID);
char *cp; char *err;
/* if (strncmp(cp, MAIL_ATTR_MESSAGE_ID "=", len) == 0) {
* Skip records that we cannot use. Degrade if we could not cp += len;
* skip over the message content. if ((err = extpar(&cp, "<>", EXTPAR_FLAG_NONE)) != 0) {
*/ msg_warn("%s: malformed Message-ID attribute: %s",
if (var_threaded_bounce == 0 || all_headers_seen bounce_info->queue_id, err);
|| prev_type == REC_TYPE_CONT) { myfree(err);
/* void */ ; } else {
} vstring_sprintf(bounce_info->orig_msgid, "<%s>", cp);
/*
* Extract message-id header value.
*/
else if (is_header(STR(bounce_info->buf))) {
if ((hdr = header_opts_find(
vstring_str(bounce_info->buf))) != 0
&& hdr->type == HDR_MESSAGE_ID) {
vstring_truncate(bounce_info->buf,
trimblanks(STR(bounce_info->buf),
LEN(bounce_info->buf))
- STR(bounce_info->buf));
cp = STR(bounce_info->buf) + strlen(hdr->name) + 1;
while (ISSPACE(*cp))
cp++;
if (*cp == '<' && vstring_end(bounce_info->buf)[-1] == '>')
vstring_strcpy(bounce_info->orig_msgid, cp);
else
msg_warn("%s: ignoring malformed Message-ID",
bounce_info->queue_id);
} }
} }
/*
* Skip remainder of multiline header.
*/
else if (ISSPACE(*STR(bounce_info->buf))) {
/* void */ ;
}
/*
* Start of body.
*/
else {
all_headers_seen = 1;
skip_message_segment = 1;
}
}
/*
* In case we ever want to process records from the extracted
* segment, and in case there was no "start of body" event.
*/
else if (rec_type == REC_TYPE_XTRA) {
if (VSTRING_LEN(bounce_info->orig_msgid) == 0)
if (var_threaded_bounce)
all_headers_seen = 1;
in_envelope = 1;
} }
/* /*
@ -446,7 +394,7 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
if (bounce_info->orig_offs > 0 if (bounce_info->orig_offs > 0
&& bounce_info->arrival_time > 0 && bounce_info->arrival_time > 0
&& VSTRING_LEN(bounce_info->sender) > 0 && VSTRING_LEN(bounce_info->sender) > 0
&& (var_threaded_bounce == 0 || all_headers_seen && (var_threaded_bounce == 0
|| VSTRING_LEN(bounce_info->orig_msgid) > 0)) { || VSTRING_LEN(bounce_info->orig_msgid) > 0)) {
break; break;
} }

View File

@ -1,7 +1,7 @@
recipient = rcpt-address recipient = rcpt-address
original_recipient = rcpt-orig_addr original_recipient = rcpt-orig_addr
offset = 272 offset = 281
notify_flags = rcpt-dsn_notify notify_flags = rcpt-dsn_notify
status = dsn-status status = dsn-status
action = dsn-action action = dsn-action

View File

@ -0,0 +1,13 @@
recipient = rcpt-address
original_recipient = rcpt-orig_addr
offset = 280
notify_flags = rcpt-dsn_notify
status = dsn-status
action = dsn-action
diag_type = dsn-dtype
diag_text = dsn-dtext
mta_type = dsn-mtype
mta_mname = dsn-mname
reason = dsn-reason

Binary file not shown.

Binary file not shown.

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sat, 05 Dec 2020 13:31:48 -0500 (EST) Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr Original-Recipient: rfc822; rcpt-orig_addr
@ -38,11 +38,12 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822 Content-Type: message/rfc822
Return-Path: <sender@sender.example> Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0) Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4CpJ7m6tprz4w4Y; Sat, 5 Dec 2020 18:31:48 +0000 (UTC) id 4X3vqF3bwhz5Yqq; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: <sender@sender.example> From: sender@sender.example
To: <recipient@recipient.example> To: recipient@recipient.example
Message-Id: <12345@mta-name.example> Subject: no-message-id
Subject: with-msgid-no-eoh-event
asdasdd
--msgid.unix-time/mail.example-- --msgid.unix-time/mail.example--

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST) Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr Original-Recipient: rfc822; rcpt-orig_addr
@ -38,12 +38,12 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822 Content-Type: message/rfc822
Return-Path: <sender@sender.example> Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0) Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4CkXPY0myNz4w4g; Sun, 29 Nov 2020 15:30:41 +0000 (UTC) id 4X3vqF3bwhz5Yqq; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: <sender@sender.example> From: sender@sender.example
To: <recipient@recipient.example> To: recipient@recipient.example
Message-Id: <12345@mta-name.example> Subject: no-message-id
Subject: with-msgid-no-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC) asdasdd
--msgid.unix-time/mail.example-- --msgid.unix-time/mail.example--

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST) Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr Original-Recipient: rfc822; rcpt-orig_addr
@ -38,14 +38,14 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822 Content-Type: message/rfc822
Return-Path: <sender@sender.example> Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0) Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4CkXPY10M8z4w4l; Sun, 29 Nov 2020 15:30:41 +0000 (UTC) id 4X3vqF3RdBz5Yqn; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: <sender@sender.example> From: sender@sender.example
To: <recipient@recipient.example> To: recipient@recipient.example
Message-Id: <12345@mta-name.example> Subject: existing-message-id
Subject: with-msgid-with-eoh-event Message-Id: <existing>
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC) Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
body text asdasdd
--msgid.unix-time/mail.example-- --msgid.unix-time/mail.example--

View File

@ -1,8 +1,8 @@
From: Mail Delivery System <MAILER-DAEMON> From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender Subject: Undelivered Mail Returned to Sender
To: test-recipient To: test-recipient
References: <12345@mta-name.example> References: <existing>
In-Reply-To: <12345@mta-name.example> In-Reply-To: <existing>
Auto-Submitted: auto-replied Auto-Submitted: auto-replied
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status; Content-Type: multipart/report; report-type=delivery-status;
@ -26,7 +26,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sat, 05 Dec 2020 13:31:48 -0500 (EST) Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr Original-Recipient: rfc822; rcpt-orig_addr
@ -40,11 +40,14 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822 Content-Type: message/rfc822
Return-Path: <sender@sender.example> Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0) Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4CpJ7m6tprz4w4Y; Sat, 5 Dec 2020 18:31:48 +0000 (UTC) id 4X3vqF3RdBz5Yqn; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: <sender@sender.example> From: sender@sender.example
To: <recipient@recipient.example> To: recipient@recipient.example
Message-Id: <12345@mta-name.example> Subject: existing-message-id
Subject: with-msgid-no-eoh-event Message-Id: <existing>
Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
asdasdd
--msgid.unix-time/mail.example-- --msgid.unix-time/mail.example--

View File

@ -1,51 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY0myNz4w4g; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-no-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -1,53 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY10M8z4w4l; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
body text
--msgid.unix-time/mail.example--

View File

@ -1,50 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY194lz4w4n; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Whatever: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-long-line
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -1,52 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY194lz4w4n; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Whatever: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-long-line
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -94,6 +94,7 @@ typedef struct CLEANUP_STATE {
char *hdr_rewrite_context; /* header rewrite context */ char *hdr_rewrite_context; /* header rewrite context */
char *filter; /* from header/body patterns */ char *filter; /* from header/body patterns */
char *redirect; /* from header/body patterns */ char *redirect; /* from header/body patterns */
char *message_id; /* from Message-ID header */
char *dsn_envid; /* DSN envelope ID */ char *dsn_envid; /* DSN envelope ID */
int dsn_ret; /* DSN full/hdrs */ int dsn_ret; /* DSN full/hdrs */
int dsn_notify; /* DSN never/delay/fail/success */ int dsn_notify; /* DSN never/delay/fail/success */

View File

@ -184,6 +184,10 @@ void cleanup_extracted_process(CLEANUP_STATE *state, int type,
cleanup_out_string(state, REC_TYPE_FILT, state->filter); cleanup_out_string(state, REC_TYPE_FILT, state->filter);
if (state->redirect != 0) if (state->redirect != 0)
cleanup_out_string(state, REC_TYPE_RDR, state->redirect); cleanup_out_string(state, REC_TYPE_RDR, state->redirect);
if (state->message_id != 0) {
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%s",
MAIL_ATTR_MESSAGE_ID, state->message_id);
}
if ((encoding = nvtable_find(state->attr, MAIL_ATTR_ENCODING)) != 0) if ((encoding = nvtable_find(state->attr, MAIL_ATTR_ENCODING)) != 0)
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%s", cleanup_out_format(state, REC_TYPE_ATTR, "%s=%s",
MAIL_ATTR_ENCODING, encoding); MAIL_ATTR_ENCODING, encoding);
@ -307,8 +311,8 @@ void cleanup_extracted_finish(CLEANUP_STATE *state)
cleanup_addr_bcc(state, var_always_bcc); cleanup_addr_bcc(state, var_always_bcc);
/* /*
* Flush non-Milter header/body_checks BCC recipients. Clear hbc_rcpt * Flush non-Milter header/body_checks BCC recipients. Clear hbc_rcpt so
* so that it can be used for other purposes. * that it can be used for other purposes.
*/ */
if (state->hbc_rcpt) { if (state->hbc_rcpt) {
if (CLEANUP_OUT_OK(state) && state->recip != 0) { if (CLEANUP_OUT_OK(state) && state->recip != 0) {

View File

@ -626,8 +626,14 @@ static void cleanup_header_callback(void *context, int header_class,
*/ */
else { else {
state->headers_seen |= (1 << hdr_opts->type); state->headers_seen |= (1 << hdr_opts->type);
if (hdr_opts->type == HDR_MESSAGE_ID) if (hdr_opts->type == HDR_MESSAGE_ID) {
ssize_t len;
msg_info("%s: message-id=%s", state->queue_id, hdrval); msg_info("%s: message-id=%s", state->queue_id, hdrval);
if (state->message_id == 0 && (len = balpar(hdrval, "<>")) > 0)
/* This Message ID may end up in threaded bounces. */
state->message_id = printable(mystrndup(hdrval, len), ' ');
}
if (hdr_opts->type == HDR_RESENT_MESSAGE_ID) if (hdr_opts->type == HDR_RESENT_MESSAGE_ID)
msg_info("%s: resent-message-id=%s", state->queue_id, hdrval); msg_info("%s: resent-message-id=%s", state->queue_id, hdrval);
if (hdr_opts->type == HDR_RECEIVED) { if (hdr_opts->type == HDR_RECEIVED) {
@ -730,6 +736,10 @@ static void cleanup_header_done_callback(void *context)
vstring_str(state->temp1)); vstring_str(state->temp1));
state->headers_seen |= (1 << (state->resent[0] ? state->headers_seen |= (1 << (state->resent[0] ?
HDR_RESENT_MESSAGE_ID : HDR_MESSAGE_ID)); HDR_RESENT_MESSAGE_ID : HDR_MESSAGE_ID));
if (state->resent[0] == 0 && state->message_id == 0)
state->message_id = concatenate("<", vstring_str(state->temp1),
">", (char *) 0);
} }
if ((state->headers_seen & (1 << HDR_MESSAGE_ID)) == 0) if ((state->headers_seen & (1 << HDR_MESSAGE_ID)) == 0)
msg_info("%s: message-id=<>", state->queue_id); msg_info("%s: message-id=<>", state->queue_id);

View File

@ -117,6 +117,7 @@ CLEANUP_STATE *cleanup_state_alloc(VSTREAM *src)
state->hdr_rewrite_context = MAIL_ATTR_RWR_LOCAL; state->hdr_rewrite_context = MAIL_ATTR_RWR_LOCAL;
state->filter = 0; state->filter = 0;
state->redirect = 0; state->redirect = 0;
state->message_id = 0;
state->dsn_envid = 0; state->dsn_envid = 0;
state->dsn_ret = 0; state->dsn_ret = 0;
state->dsn_notify = 0; state->dsn_notify = 0;
@ -179,6 +180,8 @@ void cleanup_state_free(CLEANUP_STATE *state)
myfree(state->filter); myfree(state->filter);
if (state->redirect) if (state->redirect)
myfree(state->redirect); myfree(state->redirect);
if (state->message_id)
myfree(state->message_id);
if (state->dsn_envid) if (state->dsn_envid)
myfree(state->dsn_envid); myfree(state->dsn_envid);
if (state->dsn_orcpt) if (state->dsn_orcpt)

View File

@ -260,6 +260,8 @@ extern char *mail_pathname(const char *, const char *);
#define MAIL_ATTR_ORG_NONE "unknown" /* origin unknown */ #define MAIL_ATTR_ORG_NONE "unknown" /* origin unknown */
#define MAIL_ATTR_ORG_LOCAL "local" /* local submission */ #define MAIL_ATTR_ORG_LOCAL "local" /* local submission */
#define MAIL_ATTR_MESSAGE_ID "message_id" /* Used for threaded bounce */
/* /*
* XCLIENT/XFORWARD in SMTP. * XCLIENT/XFORWARD in SMTP.
*/ */

View File

@ -20,7 +20,7 @@
* Patches change both the patchlevel and the release date. Snapshots have no * Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only. * patchlevel; they change the release date only.
*/ */
#define MAIL_RELEASE_DATE "20240902" #define MAIL_RELEASE_DATE "20240917"
#define MAIL_VERSION_NUMBER "3.10" #define MAIL_VERSION_NUMBER "3.10"
#ifdef SNAPSHOT #ifdef SNAPSHOT

View File

@ -4,7 +4,7 @@
/* SUMMARY /* SUMMARY
/* show Postfix queue file contents /* show Postfix queue file contents
/* SYNOPSIS /* SYNOPSIS
/* \fBpostcat\fR [\fB-bdehnoqv\fR] [\fB-c \fIconfig_dir\fR] [\fIfiles\fR...] /* \fBpostcat\fR [\fB-bdefhnoqv\fR] [\fB-c \fIconfig_dir\fR] [\fIfiles\fR...]
/* DESCRIPTION /* DESCRIPTION
/* The \fBpostcat\fR(1) command prints the contents of the /* The \fBpostcat\fR(1) command prints the contents of the
/* named \fIfiles\fR in human-readable form. The files are /* named \fIfiles\fR in human-readable form. The files are
@ -33,6 +33,8 @@
/* Show message envelope content. /* Show message envelope content.
/* .sp /* .sp
/* This feature is available in Postfix 2.7 and later. /* This feature is available in Postfix 2.7 and later.
/* .IP \fB-f\fR
/* Prepend the file name to each output line.
/* .IP \fB-h\fR /* .IP \fB-h\fR
/* Show message header content. The \fB-h\fR option produces /* Show message header content. The \fB-h\fR option produces
/* output from the beginning of the message up to, but not /* output from the beginning of the message up to, but not
@ -147,6 +149,7 @@
#define PC_FLAG_PRINT_RTYPE_DEC (1<<5) /* print decimal record type */ #define PC_FLAG_PRINT_RTYPE_DEC (1<<5) /* print decimal record type */
#define PC_FLAG_PRINT_RTYPE_SYM (1<<6) /* print symbolic record type */ #define PC_FLAG_PRINT_RTYPE_SYM (1<<6) /* print symbolic record type */
#define PC_FLAG_RAW (1<<7) /* don't follow pointers */ #define PC_FLAG_RAW (1<<7) /* don't follow pointers */
#define PC_FLAG_PRINT_PATHNAME (1<<8) /* print pathname */
#define PC_MASK_PRINT_TEXT (PC_FLAG_PRINT_HEADER | PC_FLAG_PRINT_BODY) #define PC_MASK_PRINT_TEXT (PC_FLAG_PRINT_HEADER | PC_FLAG_PRINT_BODY)
#define PC_MASK_PRINT_ALL (PC_FLAG_PRINT_ENV | PC_MASK_PRINT_TEXT) #define PC_MASK_PRINT_ALL (PC_FLAG_PRINT_ENV | PC_MASK_PRINT_TEXT)
@ -244,6 +247,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
* changed. * changed.
*/ */
#define PRINT_MARKER(flags, fp, offset, type, text) do { \ #define PRINT_MARKER(flags, fp, offset, type, text) do { \
if ((flags) & PC_FLAG_PRINT_PATHNAME) \
vstream_printf("%s: ", VSTREAM_PATH(fp)); \
if ((flags) & PC_FLAG_PRINT_OFFSET) \ if ((flags) & PC_FLAG_PRINT_OFFSET) \
vstream_printf("%9lu ", (unsigned long) (offset)); \ vstream_printf("%9lu ", (unsigned long) (offset)); \
if (flags & PC_FLAG_PRINT_RTYPE_DEC) \ if (flags & PC_FLAG_PRINT_RTYPE_DEC) \
@ -253,6 +258,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
} while (0) } while (0)
#define PRINT_RECORD(flags, offset, type, value) do { \ #define PRINT_RECORD(flags, offset, type, value) do { \
if ((flags) & PC_FLAG_PRINT_PATHNAME) \
vstream_printf("%s: ", VSTREAM_PATH(fp)); \
if ((flags) & PC_FLAG_PRINT_OFFSET) \ if ((flags) & PC_FLAG_PRINT_OFFSET) \
vstream_printf("%9lu ", (unsigned long) (offset)); \ vstream_printf("%9lu ", (unsigned long) (offset)); \
if (flags & PC_FLAG_PRINT_RTYPE_DEC) \ if (flags & PC_FLAG_PRINT_RTYPE_DEC) \
@ -363,6 +370,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
*/ */
if (do_print == 0) if (do_print == 0)
continue; continue;
if (flags & PC_FLAG_PRINT_PATHNAME)
vstream_printf("%s: ", VSTREAM_PATH(fp));
if (flags & PC_FLAG_PRINT_OFFSET) if (flags & PC_FLAG_PRINT_OFFSET)
vstream_printf("%9lu ", (unsigned long) offset); vstream_printf("%9lu ", (unsigned long) offset);
if (flags & PC_FLAG_PRINT_RTYPE_DEC) if (flags & PC_FLAG_PRINT_RTYPE_DEC)
@ -491,7 +500,7 @@ int main(int argc, char **argv)
/* /*
* Parse JCL. * Parse JCL.
*/ */
while ((ch = GETOPT(argc, argv, "bc:dehoqrs:v")) > 0) { while ((ch = GETOPT(argc, argv, "bc:defhoqrs:v")) > 0) {
switch (ch) { switch (ch) {
case 'b': case 'b':
flags |= PC_FLAG_PRINT_BODY; flags |= PC_FLAG_PRINT_BODY;
@ -503,6 +512,9 @@ int main(int argc, char **argv)
case 'd': case 'd':
flags |= PC_FLAG_PRINT_RTYPE_DEC; flags |= PC_FLAG_PRINT_RTYPE_DEC;
break; break;
case 'f':
flags |= PC_FLAG_PRINT_PATHNAME;
break;
case 'e': case 'e':
flags |= PC_FLAG_PRINT_ENV; flags |= PC_FLAG_PRINT_ENV;
break; break;