2 ######################################################
6 ######################################################
10 if test -z "${MH_OBJ_DIR}"; then
11 srcdir
=`dirname $0`/..
/..
12 MH_OBJ_DIR
=`cd $srcdir && pwd`; export MH_OBJ_DIR
15 .
"${srcdir}/test/post/test-post-common.sh"
17 #### Make sure that html-to-text conversion is what we expect.
18 require_locale en_US.utf
-8 en_US.utf8
19 LC_ALL
=en_US.UTF
-8; export LC_ALL
21 expected
="$MH_TEST_DIR/test-mhfixmsg$$.expected"
22 expected_err
="$MH_TEST_DIR/test-mhfixmsg$$.expected_err"
23 actual
="$MH_TEST_DIR/test-mhfixmsg$$.actual"
24 actual_err
="$MH_TEST_DIR/test-mhfixmsg$$.actual_err"
26 if grep mhfixmsg
-format-text/html
"${MH_TEST_DIR}/Mail/mhn.defaults" \
28 can_reformat_texthtml
=1
29 if grep 'mhfixmsg-format-text/html.*w3m' "${MH_TEST_DIR}/Mail/mhn.defaults" \
31 #### w3m uses $HOME/.w3m/, and creates it if it doesn't exist. To
32 #### support testing with non-writeable $HOME, and to not leave
33 #### relics from this test if it is writeable but doesn't already
34 #### have a .w3m, and to not depend on whatever is in that if it
35 #### does already exist, overwrite $HOME if using w3m.
36 HOME
="$MHTMPDIR"; export HOME
39 echo "$0: skipping -reformat check because no text browser was found"
40 can_reformat_texthtml
=0
45 # Verified behavior consistent with compiled sendmail.
46 cat >"$expected" <<EOF
47 Usage: mhfixmsg [+folder] [msgs] [switches]
66 run_prog mhfixmsg
-help >"$actual" 2>&1
67 check
"$expected" "$actual"
71 # Verified same behavior as compiled mhfixmsg.
72 case `mhfixmsg -version` in
74 *) printf '%s: mhfixmsg -version generated unexpected output\n' "$0" >&2
75 failed
=`expr ${failed:-0} + 1`;;
79 # check that non-MIME messages aren't modified
81 run_test
'mhfixmsg first -outfile '"$actual" ''
82 check
"`mhpath first`" "$actual" 'keep first'
85 # check that non-MIME messages with no bodies aren't modified
87 cat >`mhpath new` <<EOF
88 From: Test <test@example.com>
89 To: Some User <user@example.com>
90 Date: Fri, 29 Sep 2006 00:00:00
92 Subject: message with no body
95 run_test
'mhfixmsg last -outfile '"$actual" ''
96 check
"`mhpath last`" "$actual"
100 cat >"$MH_TEST_DIR"/Mail
/inbox
/11 <<EOF
103 Subject: =?ISO-8859-15?Q?Re=3A_H=E5lla_linuxsystem_uppdaterade?=
104 User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
106 Content-Type: MULTIPART/MIXED;
107 BOUNDARY="----=_NextPart_000_0000_00000000.00000000"
108 Content-Transfer-Encoding: QUOTED-PRINTABLE
110 This message is in MIME format. The first part should be readable
112 while the remaining parts are likely unreadable without MIME-aware
115 ------=_NextPart_000_0000_00000000.00000000
116 Content-Type: TEXT/PLAIN; CHARSET=ISO-8859-15
117 Content-Transfer-Encoding: 8BIT
119 Some text in swedish.
121 Varf=C3=B6r inte anv=C3=A4nda...
123 ------=_NextPart_000_0000_00000000.00000000--
125 And some text after the last part.
128 cp -p "$MH_TEST_DIR"/Mail
/inbox
/11 "$MH_TEST_DIR"/Mail
/inbox
/12
130 run_test
'mhfixmsg last -nofixcte' ''
131 check
"$MH_TEST_DIR"/Mail
/inbox
/11 "$MH_TEST_DIR"/Mail
/inbox
/12 'keep first'
134 # check -fixcte (enabled by default): fixup of erroneous C-T-E in multipart
136 cat >"$expected" <<EOF
139 Subject: =?ISO-8859-15?Q?Re=3A_H=E5lla_linuxsystem_uppdaterade?=
140 User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
142 Content-Type: MULTIPART/MIXED;
143 BOUNDARY="----=_NextPart_000_0000_00000000.00000000"
144 Nmh-REPLACED-INVALID-Content-Transfer-Encoding: QUOTED-PRINTABLE
145 Content-Transfer-Encoding: 8bit
147 This message is in MIME format. The first part should be readable
149 while the remaining parts are likely unreadable without MIME-aware
152 ------=_NextPart_000_0000_00000000.00000000
153 Content-Type: TEXT/PLAIN; CHARSET=ISO-8859-15
154 Content-Transfer-Encoding: 8BIT
156 Some text in swedish.
158 Varf=C3=B6r inte anv=C3=A4nda...
160 ------=_NextPart_000_0000_00000000.00000000--
162 And some text after the last part.
165 run_test
'mhfixmsg last -outfile '"$actual"' -verbose' \
166 "mhfixmsg: 11, replace Content-Transfer-Encoding of \
167 QUOTED-PRINTABLE with 8 bit"
168 check
"$expected" "$actual" 'keep first'
171 # check with no options: checks backup
172 cp "$MH_TEST_DIR"/Mail
/inbox
/11 "$MH_TEST_DIR"/Mail
/inbox
/11.original
173 folder last
>/dev
/null
174 run_test
'mhfixmsg' ''
175 check
"$expected" "$MH_TEST_DIR"/Mail
/inbox
/11 'keep first'
176 cp "$MH_TEST_DIR"/Mail
/inbox
/11.original
"$MH_TEST_DIR"/Mail
/inbox
/11
177 check
"$MH_TEST_DIR"/Mail
/inbox
/,11 "$MH_TEST_DIR"/Mail
/inbox
/11.original
180 # check backup with -file
181 cp "$MH_TEST_DIR"/Mail
/inbox
/11 "$MH_TEST_DIR"/Mail
/inbox
/11.original
182 folder last
>/dev
/null
183 run_test
'mhfixmsg -file '"$MH_TEST_DIR"/Mail
/inbox
/11 ''
184 check
"$MH_TEST_DIR"/Mail
/inbox
/11 "$expected" 'keep first'
185 check
"$MH_TEST_DIR"/Mail
/inbox
/,11 "$MH_TEST_DIR"/Mail
/inbox
/11.original
188 # check -reformat (enabled by default): addition of text/plain part
189 # to solitary text/html part
191 prepare_space
>"$expected" <<EOF
193 From: sender@example.com
194 To: bonquiqui@example.com
196 Date: Sat, 26 Jan 2013 17:37:53 -0500
197 Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
199 ------=_nmh-multipart
200 Content-Type: text/plain; charset="Windows-1252"
201 Content-Transfer-Encoding: 8bit
203 Need to go! Need ... to ... go!
205 ------=_nmh-multipart
206 Content-Type: text/html; charset="Windows-1252"
207 Content-Transfer-Encoding: 8bit
211 <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
212 <meta name="Generator" content="Microsoft Exchange Server">
213 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
217 <div>Need to go! Need ... to ... go!</div>
221 ------=_nmh-multipart--
224 cat >"$MH_TEST_DIR"/Mail
/inbox
/12 <<EOF
226 From: sender@example.com
227 To: bonquiqui@example.com
229 Date: Sat, 26 Jan 2013 17:37:53 -0500
230 Content-Type: text/html; charset="Windows-1252"
231 Content-Transfer-Encoding: quoted-printable
235 <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
237 <meta name=3D"Generator" content=3D"Microsoft Exchange Server">
238 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; pad=
239 ding-left: 4pt; border-left: #800000 2px solid; } --></style>
243 <div>Need to go! Need ... to ... go!</div>
248 if [ $can_reformat_texthtml -eq 1 ]; then
249 printf '%s\n' "mhfixmsg: 12, insert text/plain part
250 mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \
253 #### lynx inserts multiple blank lines, so squeeze them.
254 run_prog mhfixmsg last
-outfile - -verbose 2>"$actual.err" | \
255 squeeze_lines
>"$actual"
256 check
"$expected" "$actual" 'ignore space'
257 check
"$expected.err" "$actual.err"
263 # check implicit -file with absolute pathname
264 run_test
"mhfixmsg `mhpath last` -outfile /dev/null" ''
267 # check handling of boundary string that appears in message body
269 prepare_space
>"$expected" <<EOF
271 From: sender@example.com
272 To: bonquiqui@example.com
274 Date: Sat, 26 Jan 2013 17:37:53 -0500
275 Content-Type: multipart/alternative; boundary="----=_nmh-multipart-3"
277 ------=_nmh-multipart-3
278 Content-Type: text/plain; charset="Windows-1252"
279 Content-Transfer-Encoding: 8bit
281 ------=_nmh-multipart
282 ------=_nmh-multipart-1
283 ------=_nmh-multipart-2
285 ------=_nmh-multipart-3
286 Content-Type: text/html; charset="Windows-1252"
287 Content-Transfer-Encoding: 8bit
291 <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
292 <meta name="Generator" content="Microsoft Exchange Server">
293 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
296 ------=_nmh-multipart<br>
297 ------=_nmh-multipart-1<br>
298 ------=_nmh-multipart-2<br>
302 ------=_nmh-multipart-3--
305 cat >"$MH_TEST_DIR"/Mail
/inbox
/12 <<EOF
307 From: sender@example.com
308 To: bonquiqui@example.com
310 Date: Sat, 26 Jan 2013 17:37:53 -0500
311 Content-Type: text/html; charset="Windows-1252"
312 Content-Transfer-Encoding: quoted-printable
316 <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
318 <meta name=3D"Generator" content=3D"Microsoft Exchange Server">
319 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; pad=
320 ding-left: 4pt; border-left: #800000 2px solid; } --></style>
323 ------=3D_nmh-multipart<br>
324 ------=3D_nmh-multipart-1<br>
325 ------=3D_nmh-multipart-2<br>
330 if [ $can_reformat_texthtml -eq 1 ]; then
331 printf '%s\n' "mhfixmsg: 12, insert text/plain part
332 mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \
335 #### lynx inserts multiple blank lines, so squeeze them.
336 run_prog mhfixmsg last
-outfile - -verbose 2>"$actual.err" | \
337 squeeze_lines
>"$actual"
338 check
"$expected" "$actual" 'ignore space'
339 check
"$expected.err" "$actual.err"
346 prepare_space
>"$expected" <<EOF
348 From: sender@example.com
349 To: bonquiqui@example.com
351 Date: Sat, 26 Jan 2013 17:37:53 -0500
352 Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
354 ------=_nmh-multipart
355 Content-Type: text/plain; charset="Windows-1252"
356 Content-Transfer-Encoding: 8bit
358 Need to go! Need ... to ... go!
360 ------=_nmh-multipart
361 Content-Type: text/html; charset="Windows-1252"
362 Content-Transfer-Encoding: quoted-printable
366 <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-=
368 <meta name=3D"Generator" content=3D"Microsoft Exchange Server">
369 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; pa=
370 dding-left: 4pt; border-left: #800000 2px solid; } --></style>
374 <div>Need to go! Need ... to ... go!</div>
378 ------=_nmh-multipart--
381 cat >"$MH_TEST_DIR"/Mail
/inbox
/12 <<EOF
383 From: sender@example.com
384 To: bonquiqui@example.com
386 Date: Sat, 26 Jan 2013 17:37:53 -0500
387 Content-Type: text/html; charset="Windows-1252"
388 Content-Transfer-Encoding: quoted-printable
392 <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
394 <meta name=3D"Generator" content=3D"Microsoft Exchange Server">
395 <!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; pad=
396 ding-left: 4pt; border-left: #800000 2px solid; } --></style>
400 <div>Need to go! Need ... to ... go!</div>
405 if [ $can_reformat_texthtml -eq 1 ]; then
406 printf '%s\n' 'mhfixmsg: 12, insert text/plain part' >"$expected.err"
408 #### lynx inserts multiple blank lines, so squeeze them.
409 run_prog mhfixmsg last
-nodecode -outfile - -verbose 2>"$actual.err" | \
410 squeeze_lines
>"$actual"
411 check
"$expected" "$actual" 'ignore space'
412 check
"$expected.err" "$actual.err"
418 # check -decode (enabled by default)
419 cat >"$expected" <<EOF
420 To: recipient@example.com
421 From: sender@example.com
422 Subject: mhfixmsg decode test
424 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
426 ------- =_aaaaaaaaaa0
427 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
428 Content-Disposition: attachment; filename="test4.txt"
429 Content-Transfer-Encoding: 8bit
431 This is a text/plain part.
433 ------- =_aaaaaaaaaa0--
436 cat >`mhpath new` <<EOF
437 To: recipient@example.com
438 From: sender@example.com
439 Subject: mhfixmsg decode test
441 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
443 ------- =_aaaaaaaaaa0
444 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
445 Content-Disposition: attachment; filename="test4.txt"
446 Content-Transfer-Encoding: base64
448 VGhpcyBpcyBhIHRleHQvcGxhaW4gcGFydC4K
450 ------- =_aaaaaaaaaa0--
453 run_prog mhfixmsg last
-outfile "$actual"
454 check
"$expected" "$actual"
457 # check -decode with more complicated content structure
459 To: recipient@example.com
460 From: sender@example.com
461 Subject: mhfixmsg decode test 2
463 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
465 This is additional content before the first subpart of the multipart.
467 ------- =_aaaaaaaaaa0
468 Content-Type: multipart/related;
469 type="multipart/alternative";
470 boundary="subpart__1.1"
473 Content-Type: text/plain; charset="iso-8859-1"
474 Content-Disposition: attachment; filename="test1.txt"
476 This is the first text/plain part, in a subpart.
480 This is additional content after the last subpart of the multipart.
482 ------- =_aaaaaaaaaa0
483 Content-Type: text/plain; charset="iso-8859-1"
484 Content-Disposition: attachment; filename="test2.txt"
485 Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
486 Content-Transfer-Encoding: 8bit
488 This is the second text/plain part.
490 ------- =_aaaaaaaaaa0
491 Content-Type: text/plain; charset="iso-8859-1"
492 Content-Disposition: attachment; filename="test3.txt"
494 This is the third text/plain part.
496 ------- =_aaaaaaaaaa0
497 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
498 Content-Disposition: attachment; filename="test4.txt"
499 Content-Transfer-Encoding: 8bit
501 This is the fourth text/plain part.
503 ------- =_aaaaaaaaaa0--
505 This is additional content after the last subpart of the multipart.
508 cat >`mhpath new` <<EOF
509 To: recipient@example.com
510 From: sender@example.com
511 Subject: mhfixmsg decode test 2
513 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
515 This is additional content before the first subpart of the multipart.
517 ------- =_aaaaaaaaaa0
518 Content-Type: multipart/related;
519 type="multipart/alternative";
520 boundary="subpart__1.1"
523 Content-Type: text/plain; charset="iso-8859-1"
524 Content-Disposition: attachment; filename="test1.txt"
526 This is the first text/plain part, in a subpart.
530 This is additional content after the last subpart of the multipart.
532 ------- =_aaaaaaaaaa0
533 Content-Type: text/plain; charset="iso-8859-1"
534 Content-Disposition: attachment; filename="test2.txt"
535 Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
536 Content-Transfer-Encoding: quoted-printable
538 This is the second text/plain part.
540 ------- =_aaaaaaaaaa0
541 Content-Type: text/plain; charset="iso-8859-1"
542 Content-Disposition: attachment; filename="test3.txt"
544 This is the third text/plain part.
546 ------- =_aaaaaaaaaa0
547 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
548 Content-Disposition: attachment; filename="test4.txt"
549 Content-Transfer-Encoding: base64
551 VGhpcyBpcyB0aGUgZm91cnRoIHRleHQvcGxhaW4gcGFydC4K
553 ------- =_aaaaaaaaaa0--
555 This is additional content after the last subpart of the multipart.
557 run_prog mhfixmsg last
-outfile "$actual"
558 check
"$expected" "$actual"
561 # check attempted -decode of binary text
562 #### Generated the encoded text below with:
563 #### $ printf '\x0\xbd\xb2=\xbc\n' | base64
564 cat >`mhpath new` <<EOF
565 To: recipient@example.com
566 From: sender@example.com
567 Subject: mhfixmsg attempted binary decode test
569 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
571 ------- =_aaaaaaaaaa0
572 Content-Type: text/plain; charset="iso-8859-1"; name="nul+square.txt"
573 Content-Transfer-Encoding: base64
577 ------- =_aaaaaaaaaa0--
580 cp -p `mhpath last` "$expected"
581 run_prog mhfixmsg last
582 check
`mhpath last` "$expected" 'keep first'
585 # check -decode of binary text
586 printf "%s\x0d\xbd\xb2=\xbc%s" "To: recipient@example.com
587 From: sender@example.com
588 Subject: mhfixmsg binary decode test
590 Content-Type: multipart/mixed; boundary=\"----- =_aaaaaaaaaa0\"
592 ------- =_aaaaaaaaaa0
593 Content-Type: text/plain; charset=\"iso-8859-1\"; name=\"nul+square.txt\"
594 Content-Transfer-Encoding: binary
598 ------- =_aaaaaaaaaa0--
600 ## output_content() in mhoutsbr.c can't handle binary content.
601 ## mhfixmsg last -decodetext binary -outfile "$actual"
602 ## check "$expected" "$actual"
607 # check that -reformat succeeds when decode of binary text fails
608 prepare_space
>"$expected" <<'EOF'
610 Date: Thu, 11 Apr 2013 02:47:08 -0700
612 From: <sender@example.com>
613 Subject: body requires binary encoding
614 Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
616 ------=_nmh-multipart
617 Content-Type: text/plain; charset="ISO-8859-1"
618 Content-Transfer-Encoding: 8bit
623 Vehicle License Fee $1.84
626 ------=_nmh-multipart
627 Content-Type: text/html; charset="ISO-8859-1"
628 Content-Transfer-Encoding: quoted-printable
633 cat >`mhpath new` <<'EOF'
635 Content-Type: text/html; charset="ISO-8859-1"
636 Content-Transfer-Encoding: quoted-printable
637 Date: Thu, 11 Apr 2013 02:47:08 -0700
639 From: <sender@example.com>
640 Subject: body requires binary encoding
643 <table width=3D"325" border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
644 <tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
645 =3D"2"><strong>Mile</strong></font></td><td height=3D"3"> </td><td ali=
646 gn=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" =
647 size=3D"2">$0.00</font></td></tr><tr><td><font face=3D"Arial, Helvetica, sa=
648 ns-serif" color=3D"#333333" size=3D"2"><strong>Time</strong></font></td><td=
649 height=3D"3"> </td><td align=3D"right"><font face=3D"Arial, Helvetica=
650 , sans-serif" color=3D"#333333" size=3D"2">$78.71</font></td></tr><tr><td><=
651 font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D"2"><st=
652 rong>State Tax</strong></font></td><td height=3D"3"> </td><td align=3D=
653 "right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
654 =3D"2">$5.90</font></td></tr><tr><td><font face=3D"Arial, Helvetica, sans-s=
655 erif" color=3D"#333333" size=3D"2"><strong>Vehicle License Fee</strong></fo=
656 nt></td><td height=3D"3"> </td><td align=3D"right"><font face=3D"Arial=
657 , Helvetica, sans-serif" color=3D"#333333" size=3D"2">$1.84</font></td></tr=
658 ><tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
659 =3D"2"><strong>State Txn Tax</strong></font></td><td height=3D"3"> </t=
660 d><td align=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"=
661 #333333" size=3D"2">$6.00</font></td></tr>
667 if [ $can_reformat_texthtml -eq 1 ]; then
668 #### lynx inserts multiple blank lines, so squeeze them.
669 #### Truncate to avoid comparing the html portion because it can
670 #### get reformatted.
671 run_prog mhfixmsg last
-outfile - | squeeze_lines
| head -22 >"$actual"
672 check
"$expected" "$actual" 'ignore space'
674 cp -p "$MH_TEST_DIR/Mail/inbox/15" "$MH_TEST_DIR/Mail/inbox/15.backup"
680 # Also checks preservation of attributes after one (charset) that is
682 cat >"$expected" <<EOF
683 To: recipient@example.com
684 From: sender@example.com
685 Subject: mhfixmsg textcharset test
687 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
689 ------- =_aaaaaaaaaa0
690 Content-Type: text/plain; charset="utf-8"; name="square.txt"
691 Content-Disposition: attachment; filename="square.txt"
692 Content-Transfer-Encoding: 8bit
696 ------- =_aaaaaaaaaa0--
699 #### Generated the encoded text below with:
700 #### $ printf '\xbd\xb2=\xbc\n' | base64
701 cat >`mhpath new` <<EOF
702 To: recipient@example.com
703 From: sender@example.com
704 Subject: mhfixmsg textcharset test
706 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
708 ------- =_aaaaaaaaaa0
709 Content-Type: text/plain; charset="iso-8859-1"; name="square.txt"
710 Content-Disposition: attachment; filename="square.txt"
711 Content-Transfer-Encoding: base64
715 ------- =_aaaaaaaaaa0--
718 if test "$ICONV_ENABLED" -eq 1; then
719 run_prog mhfixmsg last
-textcharset utf
-8 -outfile "$actual" 2>&1
720 check
"$expected" "$actual"
722 echo "$0: skipping -textcharset check because nmh was built without iconv"
727 # check -nofixboundary
728 cat >"$expected" <<EOF
731 cat >`mhpath new` <<EOF
732 Date: Fri, 13 May 2011 08:21:12 -0500
733 Content-Type: multipart/alternative;
734 boundary="----=_NextPart_000_1781A17_01CC1147.81E9467A"
735 Content-Transfer-Encoding: 8bit
737 From: <sender@example.com>
738 To: <recipient@example.com>
739 Subject: mhfixmsg bad boundary test
741 This is a multi-part message in MIME format.
743 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4
744 Content-Type: text/plain
746 The boundaries of this part don't match the header boundary.
748 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4--
751 cp -p `mhpath last` `mhpath new`
753 run_test
'mhfixmsg last -nofixboundary' ''
754 check
"$MH_TEST_DIR"/Mail
/inbox
/17 "$MH_TEST_DIR"/Mail
/inbox
/18 'keep first'
757 # check that message is not output when fed through stdin
758 run_prog mhfixmsg
-file - -verbose <`mhpath last` >"$actual" 2>"$actual.err"
759 check
"$expected" "$actual"
760 if grep "mhfixmsg: $MH_TEST_DIR/Mail/.*, fix multipart boundary" \
761 "$actual.err" >/dev
/null
; then
764 echo "$0: test failed, output is in $actual.err."
765 failed
=`expr ${failed:-0} + 1`
769 # check fixup of erroneous boundary in multipart (-fixboundary,
770 # enabled by default)
772 cat >"$expected" <<EOF
773 Date: Fri, 13 May 2011 08:21:12 -0500
774 Content-Type: multipart/alternative;
775 boundary="----=_NextPart_000_1781A1A_01CC1147.81EBA8D4"
776 Content-Transfer-Encoding: 8bit
778 From: <sender@example.com>
779 To: <recipient@example.com>
780 Subject: mhfixmsg bad boundary test
782 This is a multi-part message in MIME format.
784 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4
785 Content-Type: text/plain
787 The boundaries of this part don't match the header boundary.
789 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4--
792 run_test
'mhfixmsg last -outfile '"$actual"' -verbose' \
793 "mhfixmsg: 17, fix multipart boundary"
794 check
"$expected" "$actual"
797 # check that text/plain part is added to lone text/html in multipart/related
798 prepare_space
>"$expected" <<EOF
800 Date: Tue, 26 Feb 2013 18:07:20 -0600
801 Subject: multipart/related, not /alternative
802 Content-Type: multipart/related;
803 boundary="----=_Part_90310_101292502.1"
805 ------=_Part_90310_101292502.1
806 Content-Type: multipart/alternative; boundary="----=_nmh-multipart1"
808 ------=_nmh-multipart1
809 Content-Type: text/plain; charset="us-ascii"
810 Content-Transfer-Encoding: 7bit
812 This is the real content.
814 ------=_nmh-multipart1
815 Content-Type: text/html; charset="us-ascii"
816 Content-Transfer-Encoding: 7bit
819 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
820 <title>HTML Content</title>
823 This is the real content.
827 ------=_nmh-multipart1--
829 ------=_Part_90310_101292502.1
830 Content-Type: text/plain; charset="us-ascii"
831 Content-Transfer-Encoding: 7bit
833 Your email client does not support HTML messages
835 ------=_Part_90310_101292502.1--
838 cat >`mhpath new` <<EOF
840 Date: Tue, 26 Feb 2013 18:07:20 -0600
841 Subject: multipart/related, not /alternative
842 Content-Type: multipart/related;
843 boundary="----=_Part_90310_101292502.1"
845 ------=_Part_90310_101292502.1
846 Content-Type: text/html; charset="us-ascii"
847 Content-Transfer-Encoding: 7bit
850 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
851 <title>HTML Content</title>
854 This is the real content.
857 ------=_Part_90310_101292502.1
858 Content-Type: text/plain; charset="us-ascii"
859 Content-Transfer-Encoding: 7bit
861 Your email client does not support HTML messages
862 ------=_Part_90310_101292502.1--
865 if [ $can_reformat_texthtml -eq 1 ]; then
866 #### lynx inserts multiple blank lines, so squeeze them.
867 run_prog mhfixmsg last
-outfile - | squeeze_lines
>"$actual"
868 check
"$expected" "$actual" 'ignore space'
874 # check handling of rfc822 message type
875 cat >"$expected" <<EOF
876 From: Test <test@example.com>
877 To: Some User <user@example.com>
878 Date: Fri, 29 Sep 2006 00:00:00
879 Message-Id: @test.nmh
880 Subject: message with message/rfc822 attachment
882 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
884 and some garbage before the attachment
886 ------- =_aaaaaaaaaa0
887 Content-Type: message/rfc822; name="1552"; charset="us-ascii"
888 Content-Description: 1552
889 Content-Disposition: attachment; filename="1552"
891 From: Test <test@example.com>
892 To: <another_user@example.com>
893 Date: Thu, 28 Sep 2006 00:00:00
894 Message-Id: @test.nmh
895 Subject: message/rfc822 attachment
897 This is an RFC-822 message.
899 ------- =_aaaaaaaaaa0--
901 and some garbage at the end
904 cat >`mhpath new` <<EOF
905 From: Test <test@example.com>
906 To: Some User <user@example.com>
907 Date: Fri, 29 Sep 2006 00:00:00
908 Message-Id: @test.nmh
909 Subject: message with message/rfc822 attachment
911 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaa0"
913 and some garbage before the attachment
915 ------- =_aaaaaaaaaa0
916 Content-Type: message/rfc822; name="1552"; charset="us-ascii"
917 Content-Description: 1552
918 Content-Disposition: attachment; filename="1552"
920 From: Test <test@example.com>
921 To: <another_user@example.com>
922 Date: Thu, 28 Sep 2006 00:00:00
923 Message-Id: @test.nmh
924 Subject: message/rfc822 attachment
926 This is an RFC-822 message.
928 ------- =_aaaaaaaaaa0--
930 and some garbage at the end
933 run_test
'mhfixmsg last -outfile '"$actual" ''
934 check
"$expected" "$actual"
937 # check stripping of CRs from ASCII text context
938 cat >"$expected" <<EOF
940 From: sender@example.com
941 To: recipient@example.com
942 Subject: message with CR's
943 Date: Mon, 29 Apr 2013 11:51:45 -0400
945 There are two CR-LF pairs at the end of this sentence.
949 cat >`mhpath new` <<'EOF'
951 From: sender@example.com
952 To: recipient@example.com
953 Subject: message with CR's
954 Date: Mon, 29 Apr 2013 11:51:45 -0400
956 There are two CR-LF pairs at the end of this sentence.
960 run_prog mhfixmsg last
-outfile "$actual"
961 check
"$expected" "$actual"
964 # check -replacetextplain
965 prepare_space
>"$expected" <<EOF
966 To: recipient@example.com
967 From: sender@example.com
968 Subject: mhfixmsg replacement of bad text/plain part test
970 Content-Type: multipart/alternative; boundary="----=_Part_876302"
973 Content-Type: text/plain; charset="UTF-8"
974 Content-Transfer-Encoding: 8bit
976 Yes, the text/plain part really was empty.
979 Content-Type: text/html; charset="UTF-8"
980 Content-Transfer-Encoding: 8bit
981 Content-Disposition: inline
984 <title>eticket</title>
987 Yes, the text/plain part really was empty.
991 ------=_Part_876302--
994 cat >`mhpath new` <<'EOF'
995 To: recipient@example.com
996 From: sender@example.com
997 Subject: mhfixmsg replacement of bad text/plain part test
999 Content-Type: multipart/alternative; boundary="----=_Part_876302"
1002 Content-Type: text/plain; charset="iso-8859-15"
1003 Content-Transfer-Encoding: 7bit
1004 Content-Disposition: inline
1009 Content-Type: text/html; charset="UTF-8"
1010 Content-Transfer-Encoding: 8bit
1011 Content-Disposition: inline
1014 <title>eticket</title>
1017 Yes, the text/plain part really was empty.
1021 ------=_Part_876302--
1024 if [ $can_reformat_texthtml -eq 1 ]; then
1025 #### lynx inserts multiple blank lines, so squeeze them.
1026 run_prog mhfixmsg last
-replacetextplain -outfile - | \
1027 squeeze_lines
> "$actual"
1028 check
"$expected" "$actual" 'ignore space'
1034 # check -noreplacetextplain
1035 cat >"$expected" <<EOF
1036 To: recipient@example.com
1037 From: sender@example.com
1038 Subject: mhfixmsg replacement of bad text/plain part test
1040 Content-Type: multipart/alternative; boundary="----=_Part_876302"
1043 Content-Type: text/plain; charset="iso-8859-15"
1044 Content-Transfer-Encoding: 7bit
1045 Content-Disposition: inline
1050 Content-Type: text/html; charset="UTF-8"
1051 Content-Transfer-Encoding: 8bit
1052 Content-Disposition: inline
1055 <title>eticket</title>
1058 Yes, the text/plain part really was empty.
1062 ------=_Part_876302--
1065 run_prog mhfixmsg last
-replacetextplain -noreplacetextplain -outfile "$actual"
1066 check
"$expected" "$actual"
1070 cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF'
1073 chmod a
+x
"${MH_TEST_DIR}/Mail/rmmproc"
1074 echo "rmmproc: ${MH_TEST_DIR}/Mail/rmmproc" >>"$MH"
1075 cp "${MH_TEST_DIR}/Mail/inbox/15" "${MH_TEST_DIR}/Mail/inbox/15.original"
1077 run_test
'mhfixmsg 15' ''
1078 check
"${MH_TEST_DIR}/Mail/inbox/15.backup" \
1079 "${MH_TEST_DIR}/Mail/inbox/15.original"
1083 cp "${MH_TEST_DIR}/Mail/inbox/19" "${MH_TEST_DIR}/Mail/inbox/20"
1085 run_test
'mhfixmsg 19 -normmproc'
1086 check
"${MH_TEST_DIR}/Mail/inbox/20" \
1087 "${MH_TEST_DIR}/Mail/inbox/,19" 'keep first'
1091 run_test
'mhfixmsg 20 -rmmproc true'
1092 if test -f '${MH_TEST_DIR}/Mail/inbox/20.backup'; then
1093 echo check of mhfixmsg
-rmmproc FAILED
, should not have created backup
file
1094 failed
=`expr ${failed:-0} + 1`
1098 # make sure there are no tmp files left over
1099 find "$MH_TEST_DIR/Mail" \
( -name 'mhfix*' -o -name ',mhfix*' \
) -print \
1101 cat >"$expected" <<EOF
1104 check
"$expected" "$actual"