Fixed "PG::NotNullViolation: ERROR: null value in column "content_type" violates not-null constraint" for mails with non text/* alternative content.

This commit is contained in:
Martin Edenhofer 2016-07-19 15:19:22 +02:00
parent 2cb49f11bf
commit 7e8581909e
8 changed files with 941 additions and 4 deletions

View file

@ -236,6 +236,7 @@ class Channel::EmailParser
else
filename = '-no name-'
data[:body] = 'no visible content'
data[:content_type] = 'text/plain'
# add body as attachment
headers_store = {

53
test/fixtures/mail38.box vendored Normal file
View file

@ -0,0 +1,53 @@
Return-Path: <me@example.com>
X-Original-To: me@example.net
Delivered-To: martin@arber.example.com
Received: from [10.8.0.6] (kanzel.example.com [5.9.62.170])
by arber.example.com (Postfix) with ESMTPSA id B277D601E0
for <me@example.net>; Tue, 19 Jul 2016 13:55:37 +0200 (CEST)
From: Martin Edenhofer <me@example.com>
X-Pgp-Agent: GPGMail
Content-Type: multipart/signed; boundary="Apple-Mail=_145CC1F4-7271-407C-B5D2-D9E0653251C7"; protocol="application/pgp-signature"; micalg=pgp-sha512
Subject: =?utf-8?Q?test_1234_=C3=A4=C3=B6=C3=BC_sig_test_without_attachme?=
=?utf-8?Q?nt_?=
Date: Tue, 19 Jul 2016 13:57:07 +0200
Message-Id: <5CDFC2DC-B880-4329-B98C-200B6ED3476B@example.com>
To: Martin Edenhofer <me@example.net>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
--Apple-Mail=_145CC1F4-7271-407C-B5D2-D9E0653251C7
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
test 1234 =C3=A4=C3=B6=C3=BC sig test without attachment
--Apple-Mail=_145CC1F4-7271-407C-B5D2-D9E0653251C7
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=signature.asc
Content-Type: application/pgp-signature;
name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org
iQIcBAEBCgAGBQJXjhWXAAoJEDZIwfYs2Fy5FvYQAKkG0qRe6iEBusrNuu7FNGMw
bXhefZ6D4SDUgMGHywYmm3ssPY+a3SYiRRaN0m4FavVVtQ7JTcKm7I2e60czWUX7
jcgQEVmQZCyH2rQ4sWiMDyS8CMSzj1uDOiHIHGXD6CmHLzrSog2H275BGzd00V3F
FNmr1esSiMuf69t+WQthsi5FJEeeLvuJqDqGAHXJvsxCMRZJMxFLWJI+Ovqts1q5
fKO91RKXtIuXoEQJVmqOkiGdD7idsvC9Ul5Iv7PFHuk+0Jg/UjcuZRhnieGgcs1d
aK/DFmwIAd4IT4acYoljovvqG9rvDDG9q0j83MzmazjmIn7U3hwjR5v5u/fXRcgD
CR5jgvkL1gT2AJF0J8vul0RebySNKcCRSSVSLSBdM0t4FIqWGQ/Iyzq2fpVeOLnw
LIJZ9c7cywMqZ0jK6DZ+F7UxrDIvckkPVe6YnND3/pC1X8Fehj0tWWb/hkIKRvHg
JReLLldwxDYzYLzhdwsE/w8wRKCnqUWDWuA1zlG1uWcHqo2RXn/YCKPcAMiMImoK
ZvxKpVA0QB+wuUx6TVr2I5La1rgyqkwo2TokfWuUVB7Kn/ugwSxloudQCtxTaTKZ
JrBf2SCw3+UDFFvURcnLzNmyNmnQI/5OIVliJERrw5I7b/auR7Royk9k7+DPEl+c
Teozs8ZFAE985ycipXRQ
=HLIq
-----END PGP SIGNATURE-----
--Apple-Mail=_145CC1F4-7271-407C-B5D2-D9E0653251C7--

456
test/fixtures/mail39.box vendored Normal file
View file

@ -0,0 +1,456 @@
Return-Path: <me@example.com>
X-Original-To: me@example.net
Delivered-To: martin@arber.example.com
Received: from [10.8.0.6] (kanzel.example.com [5.9.62.170])
by arber.example.com (Postfix) with ESMTPSA id 8B76B601E0
for <me@example.net>; Tue, 19 Jul 2016 13:57:55 +0200 (CEST)
From: Martin Edenhofer <me@example.com>
X-Pgp-Agent: GPGMail
Content-Type: multipart/signed; boundary="Apple-Mail=_B216F37C-FE24-4FDD-8959-B57CF74916A7"; protocol="application/pgp-signature"; micalg=pgp-sha512
Subject: =?utf-8?Q?test_1234_=C3=A4=C3=B6=C3=BC_sig_test_with_attachment_?=
Date: Tue, 19 Jul 2016 13:59:29 +0200
Message-Id: <F6CA86E2-7DFE-4164-AA17-595D20B2817A@example.com>
To: Martin Edenhofer <me@example.net>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
--Apple-Mail=_B216F37C-FE24-4FDD-8959-B57CF74916A7
Content-Type: multipart/alternative;
boundary="Apple-Mail=_655BA1FC-8E44-44BD-ADF9-739CC259E9B1"
--Apple-Mail=_655BA1FC-8E44-44BD-ADF9-739CC259E9B1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
test 1234 =C3=A4=C3=B6=C3=BC sig test with attachment
--Apple-Mail=_655BA1FC-8E44-44BD-ADF9-739CC259E9B1
Content-Type: multipart/related;
type="text/html";
boundary="Apple-Mail=_DFC5FA49-2AFD-407E-AD0A-031D624D49CA"
--Apple-Mail=_DFC5FA49-2AFD-407E-AD0A-031D624D49CA
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D"">test 1234 =C3=A4=C3=B6=C3=BC sig test with attachment<div =
class=3D""><img height=3D"213" width=3D"320" apple-width=3D"yes" =
apple-height=3D"yes" apple-inline=3D"yes" =
id=3D"092AA64F-E1AE-42A4-B5B6-34B426A52B21" =
src=3D"cid:2ECB31C9-0E1D-4EBF-BD02-8D8B24208A3E@openvpn" =
class=3D""></div></body></html>=
--Apple-Mail=_DFC5FA49-2AFD-407E-AD0A-031D624D49CA
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename=HKT_Super_Seven_GTS.jpeg
Content-Type: image/jpeg;
name="HKT_Super_Seven_GTS.jpeg"
Content-Id: <2ECB31C9-0E1D-4EBF-BD02-8D8B24208A3E@openvpn>
/9j/4AAQSkZJRgABAQAASABIAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUA
AAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgA1QFAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAA
AAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQy
gZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS
09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYH
CAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1Lw
FWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5
eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj
5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgK
CgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQ
EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAFP/aAAwDAQACEQMR
AD8A/QtclQX6nmkUgMG29KVnA2KQcn2qVxGduBjaK+jnq2eWiMhmIx0zjAqzpXlmS8kxjMjjnrnN
VGl2rwNu3HbsDVnQrlbn7X5akgyuwyMZ56880qFubUVTY0bmXftABO3qeg6VVDFSARxjOasTpNIo
jUFeevtUf2SVSW38njk13JnO4k0dxG8RCgbhgY71LCyktxg/1qgFlDvvwegyKsQ7lBD/ADc1cJO5
EkjUVN0bYIHI/KlWGPayuePWqibjGTGSfm5x0pQsuD5vAHI9K6eZdjOxcjhUBCOB0qVVyHQYwKoJ
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
--Apple-Mail=_DFC5FA49-2AFD-407E-AD0A-031D624D49CA--
--Apple-Mail=_655BA1FC-8E44-44BD-ADF9-739CC259E9B1--
--Apple-Mail=_B216F37C-FE24-4FDD-8959-B57CF74916A7
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=signature.asc
Content-Type: application/pgp-signature;
name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org
iQIcBAEBCgAGBQJXjhYhAAoJEDZIwfYs2Fy5FDQQAJV1DONaDgL8jET4N9qB9LaM
zDi0ScL0j2yY10zzKBJO7jys1IIesmXtdL/9LF8ZcJW55YRzlC39erbcPTN3efXV
8uSzmnNxtoCw6xwrlvD6RIfCb34lL002taNEHxFRT+a9LeHxgOKjISmI7Ng55A1q
fPqRQlUG9IkXa1wq2cq6C/LGsF5BRqTMtLPWhxLBCxpvn9iMsy58d+0qJ+axRQcj
YB9dpNO7DIj2wGte/voxx80xXSAbFqrGvpu5lJ3HSgJL6IS3NaaCsXy0p69oJv0h
KNrlam0s2Z7C/QlROp09NrojBOaBtB9nKNphL9ltUmDIJWWcAnNZMSTpaMvbFCjV
hMKvvKQXmO9Ch3m3ZZSyZMY4C3wDMJr6mFG9HGERKdsSO0AP26dNgeP0gd3AQn2H
p0dgJD6sXWH9IbzJezY2Iob7tkoY205reZA8sr4KOyzWwTWZ+ZjZAxf4UO1hicgE
ghmE3o9jmnIBkjYBvMPRqJZc2vguPEMCRYsogHHYwC1EAhPtzKUdwufy/cl7dLKs
weZuhwya1pkZWegyFLfKmKhOziHC0igZfC4hP6OfMOcAZVVbazAaZy1dtBLmsBk4
MzN3V+YG9jy9ro1YzekeutXcIOg1kxEGr1YANfCfys3xo36W2Lgamr0+On+NJmTK
Vtg85M7FpRe+oDZtNwad
=KdLE
-----END PGP SIGNATURE-----
--Apple-Mail=_B216F37C-FE24-4FDD-8959-B57CF74916A7--

94
test/fixtures/mail40.box vendored Normal file
View file

@ -0,0 +1,94 @@
Return-Path: <me@example.com>
X-Original-To: me@example.net
Delivered-To: martin@arber.example.com
Received: from [10.8.0.6] (kanzel.example.com [5.9.62.170])
by arber.example.com (Postfix) with ESMTPSA id 01775601E0
for <me@example.net>; Tue, 19 Jul 2016 14:19:41 +0200 (CEST)
From: Martin Edenhofer <me@example.com>
Content-Type: multipart/signed; boundary="Apple-Mail=_E916CC44-C2DB-45AB-81ED-E15C11E13FC7"; protocol="application/pkcs7-signature"; micalg=sha1
Subject: =?utf-8?Q?smime_signed_123_=C3=B6=C3=A4=C3=BC=C3=9F?=
Message-Id: <6CBC5EF1-1D45-4964-8C4A-652CC1C5736A@example.com>
Date: Tue, 19 Jul 2016 14:21:09 +0200
To: Martin Edenhofer <me@example.net>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
--Apple-Mail=_E916CC44-C2DB-45AB-81ED-E15C11E13FC7
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
smime signed 123 =C3=B6=C3=A4=C3=BC=C3=9F=
--Apple-Mail=_E916CC44-C2DB-45AB-81ED-E15C11E13FC7
Content-Disposition: attachment;
filename=smime.p7s
Content-Type: application/pkcs7-signature;
name=smime.p7s
Content-Transfer-Encoding: base64
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJ5jCCBK8w
ggOXoAMCAQICEQDgI8sVEoNTia1hbnpUZ2shMA0GCSqGSIb3DQEBCwUAMG8xCzAJBgNVBAYTAlNF
MRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5l
dHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3QwHhcNMTQxMjIyMDAwMDAw
WhcNMjAwNTMwMTA0ODM4WjCBmzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hl
c3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxQTA/BgNV
BAMTOENPTU9ETyBTSEEtMjU2IENsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgU2VjdXJlIEVtYWls
IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAibEN2npTGU5wUh28VqYGJre4SeCW
51Gr8fBaE0kVo7SMG2C8elFCp3mMpCLfF2FOkdV2IwoU00oCf7YdCYBupQQ92bq7Fv6hh6kuQ1JD
FnyvMlDIpk9a6QjYz5MlnHuI6DBk5qT4VoD9KiQUMxeZrETlaYujRgZLwjPU6UCfBrCxrJNAubUI
kzqcKlOjENs9IGE8VQOO2U52JQIhKfqjfHF2T+7hX4Hp+1SA28N7NVK3hN4iPSwwLTF/Wb1SN7Az
aS1D6/rWpfGXd2dRjNnuJ+u8pQc4doykqTj/34z1A6xJvsr3c5k6DzKrnJU6Ez0ORjpXdGFQvsZA
P8vk4p+iIQIDAQABo4IBFzCCARMwHwYDVR0jBBgwFoAUrb2YejS0Jvf6xCZU7wO94CTLVBowHQYD
VR0OBBYEFJJha4LhoqCqT+xn8cKj97SAAMHsMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAG
AQH/AgEAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAw
RAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL0FkZFRydXN0RXh0ZXJu
YWxDQVJvb3QuY3JsMDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNl
cnRydXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAGypurFXBOquIxdjtzVXzqmthK8AJECOZD8Vm
am+x9bS1d14PAmEA330F/hKzpICAAPz7HVtqcgIKQbwFusFY1SbC6tVNhPv+gpjPWBvjImOcUvi7
BTarfVil3qs7Y+Xa1XPv7OD7e+Kj//BCI5zKto1NPuRLGAOyqC3U2LtCS5BphRDbpjc06HvgARCl
nMo6x59PiDRuimXQGoq7qdzKyjbR9PzCZCk1r9axp3ER0gNDsY8+muyeMlP0dpLKhjQHuSzK5hxK
2JkNwYbikJL7WkJqIyEQ6WXH9dW7fuqMhSACYurROgcsWcWZM/I4ieW26RZ6H3kU9koQGib6fIr7
mzCCBS8wggQXoAMCAQICEBeEnMB4lGs32wINyLRDpskwDQYJKoZIhvcNAQELBQAwgZsxCzAJBgNV
BAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAY
BgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMUEwPwYDVQQDEzhDT01PRE8gU0hBLTI1NiBDbGllbnQg
QXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQTAeFw0xNjA3MTkwMDAwMDBaFw0xNzA3
MTkyMzU5NTlaMB0xGzAZBgkqhkiG9w0BCQEWDG1lQHpudW55LmNvbTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBALHfJOoV34vwoc847F98yWiUOb99Bk2PKXk6WAJZelkR/f7Jc9nk5tyw
C5UGh+timSNavEE8DsWTY2k/uPCoGMCceGGqv15Ez3iETufh7IWkdteuWLAZVASISwqEE+Zj3vyY
Nlp6VaAUBSfR987nJA2ZTDdIxT/nLdw69OEyaK83cGM6+GbzxjfMn2x3CVvBfiqSe063lKZIInf5
CvJX2xRb8vD8RtPMlZxfE578XkgrdHOzgc3tpkQsRceLUpGztXMiJ62oUdFpqrlSIh2c1iCe+tjV
YOFPaQpFRORXXA4WDfrJ36VOyAL12vxSGCjhO5U9jXKUG3IZZvrJYw00KicCAwEAAaOCAeowggHm
MB8GA1UdIwQYMBaAFJJha4LhoqCqT+xn8cKj97SAAMHsMB0GA1UdDgQWBBRk906PS8j0Dlc0EMYh
qByWxwE+ETAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAgBgNVHSUEGTAXBggrBgEFBQcD
BAYLKwYBBAGyMQEDBQIwEQYJYIZIAYb4QgEBBAQDAgUgMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQEC
AQEBMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BTMF0GA1UdHwRW
MFQwUqBQoE6GTGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET1NIQTI1NkNsaWVudEF1dGhl
bnRpY2F0aW9uYW5kU2VjdXJlRW1haWxDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMFgGCCsGAQUF
BzAChkxodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9TSEEyNTZDbGllbnRBdXRoZW50aWNh
dGlvbmFuZFNlY3VyZUVtYWlsQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9j
YS5jb20wFwYDVR0RBBAwDoEMbWVAem51bnkuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBtqcD5NhMG
HAqCM0lk2nH9+Ytiz5JmnWP+gdAXnxRlBeOO+lFULVwUcROWHQpWLer+pVw/DHMxoa1DFO4i7cEu
TTebqYrdFua2pEiQ0JyYheqU9YH18D+2FpZD9rZV/PgcMWvnQbQyRqQtv051kphO3frX1yipYk4t
06GH+BJUw++q39b3nkwLFLCUhAytNgFMB55Q+KLOck/7oFslc57uDnnLxzfwq1eP1PHod5wuVB4l
x+JrkYku+MnPRpg/niKvI/IIJc71VyLuyagxamu7I7JhpLhbWQRLml0XUNK5fmmuGDs+4e4EKc73
XKHCs1W7KFJNuBZM2hdh7DGTfyUtMYIDwzCCA78CAQEwgbAwgZsxCzAJBgNVBAYTAkdCMRswGQYD
VQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9E
TyBDQSBMaW1pdGVkMUEwPwYDVQQDEzhDT01PRE8gU0hBLTI1NiBDbGllbnQgQXV0aGVudGljYXRp
b24gYW5kIFNlY3VyZSBFbWFpbCBDQQIQF4ScwHiUazfbAg3ItEOmyTAJBgUrDgMCGgUAoIIB5zAY
BgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNjA3MTkxMjIxMTBaMCMG
CSqGSIb3DQEJBDEWBBQ3ddz65DCR3Iq6nEVntKjQ8/n2fzCBwQYJKwYBBAGCNxAEMYGzMIGwMIGb
MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxm
b3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDFBMD8GA1UEAxM4Q09NT0RPIFNIQS0yNTYg
Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEBeEnMB4lGs32wINyLRD
pskwgcMGCyqGSIb3DQEJEAILMYGzoIGwMIGbMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRl
ciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRl
ZDFBMD8GA1UEAxM4Q09NT0RPIFNIQS0yNTYgQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1
cmUgRW1haWwgQ0ECEBeEnMB4lGs32wINyLRDpskwDQYJKoZIhvcNAQEBBQAEggEApreMz2926AMS
2Bor9kTUa9klTUBfRY0JFL/2NCB70VbX9Ta/+eFd/iZCuqimPNK4udntw9QbdQEAL925czUknze5
qKBDuJuH1PPGPF7yeFN2PKhs2hXFT96znVQjBQFbL8MgwNxm2SJkoqiCG1IkldGxTYiZUCjoGSg+
OQ5UWiFDntcEc8gnOey3V3qHwUowKOflMfblQLnb9DFypixYQEXWvnoa56wdT4pIy3BVVUlzUPSB
xDd6VIX1f9/2aVV56Hnaqhu4KJ1iRy9o+QVlOBrX/eUKaxxkTvaMBaXF8cI8o+us+laeo5odoJf4
drE+TCetPOuHGM531CA+vIDcqAAAAAAAAA==
--Apple-Mail=_E916CC44-C2DB-45AB-81ED-E15C11E13FC7--

127
test/fixtures/mail41.box vendored Normal file
View file

@ -0,0 +1,127 @@
Return-Path: <me@example.com>
X-Original-To: me@example.com
Delivered-To: martin@arber.example.com
Received: from [10.8.0.6] (kanzel.example.com [5.9.62.170])
by arber.example.com (Postfix) with ESMTPSA id BCE0B601E0
for <me@example.com>; Tue, 19 Jul 2016 14:30:13 +0200 (CEST)
From: Martin Edenhofer <me@example.com>
Content-Type: application/pkcs7-mime; name=smime.p7m; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Subject: smime sign & crypt
Message-Id: <46E5CCBD-A82E-4B69-AF7B-6D31BF5310A3@example.com>
Date: Tue, 19 Jul 2016 14:31:34 +0200
To: Martin Edenhofer <me@example.com>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Content-Disposition: attachment; filename=smime.p7m
X-Mailer: Apple Mail (2.3124)
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
L53CZRwAAAAAAAAAAAAA

75
test/fixtures/mail42.box vendored Normal file
View file

@ -0,0 +1,75 @@
Return-Path: <me@example.com>
X-Original-To: me@example.com
Delivered-To: martin@arber.example.com
Received: from [10.8.0.6] (kanzel.example.com [5.9.62.170])
by arber.example.com (Postfix) with ESMTPSA id 9EF8E60224
for <me@example.com>; Tue, 19 Jul 2016 15:02:37 +0200 (CEST)
Content-Type: multipart/encrypted; boundary="Apple-Mail=_DE081B18-44B3-4A09-BD5E-DF49265A26F4"; protocol="application/pgp-encrypted";
Subject: pgp sign & crypt
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Pgp-Agent: GPGMail
From: Martin Edenhofer <me@example.com>
Date: Tue, 19 Jul 2016 15:04:12 +0200
Content-Transfer-Encoding: 7bit
Message-Id: <7EF82667-B041-4188-9456-F9459CE65F4F@example.com>
Content-Description: OpenPGP encrypted message
To: Martin Edenhofer <me@example.com>
X-Mailer: Apple Mail (2.3124)
This is an OpenPGP/MIME encrypted message (RFC 2440 and 3156)
--Apple-Mail=_DE081B18-44B3-4A09-BD5E-DF49265A26F4
Content-Transfer-Encoding: 7bit
Content-Type: application/pgp-encrypted
Content-Description: PGP/MIME Versions Identification
Version: 1
--Apple-Mail=_DE081B18-44B3-4A09-BD5E-DF49265A26F4
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename=encrypted.asc
Content-Type: application/octet-stream;
name=encrypted.asc
Content-Description: OpenPGP encrypted message
-----BEGIN PGP MESSAGE-----
Comment: GPGTools - https://gpgtools.org
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
UwLmmw==
=natA
-----END PGP MESSAGE-----
--Apple-Mail=_DE081B18-44B3-4A09-BD5E-DF49265A26F4--

View file

@ -559,6 +559,109 @@ end
body: "Tag Max / Ingo!\n",
},
},
{
data: IO.binread('test/fixtures/mail38.box'),
body_md5: 'dcd25707eed638ea568644b206a8596e',
params: {
from: 'Martin Edenhofer <me@example.com>',
from_email: 'me@example.com',
from_display_name: 'Martin Edenhofer',
subject: 'test 1234 äöü sig test without attachment ',
to: 'Martin Edenhofer <me@example.net>',
cc: nil,
body: "test 1234 äöü sig test without attachment\n\n",
},
attachments: [
{
md5: '85223228046c010ce4298947018fa33f',
filename: 'signature.asc',
},
],
},
{
data: IO.binread('test/fixtures/mail39.box'),
body_md5: 'b583c4705270fa73a28796b978e1e9ab',
params: {
from: 'Martin Edenhofer <me@example.com>',
from_email: 'me@example.com',
from_display_name: 'Martin Edenhofer',
subject: 'test 1234 äöü sig test with attachment ',
to: 'Martin Edenhofer <me@example.net>',
cc: nil,
body: 'test 1234 äöü sig test with attachment',
},
attachments: [
{
md5: 'c0b9a38d7c02516db9f016dc8063d1e8',
filename: 'signature.asc',
},
{
md5: 'de909e05b3dd8b8ea50e8db422d0971e',
filename: 'HKT_Super_Seven_GTS.jpeg',
},
{
md5: '72c2f9aecd24606b6490ff06ea9361ec',
filename: 'message.html',
},
],
},
{
data: IO.binread('test/fixtures/mail40.box'),
body_md5: '5db91cb79f889f80bbf8b47ad98efac9',
params: {
from: 'Martin Edenhofer <me@example.com>',
from_email: 'me@example.com',
from_display_name: 'Martin Edenhofer',
subject: 'smime signed 123 öäüß',
to: 'Martin Edenhofer <me@example.net>',
cc: nil,
body: 'smime signed 123 öäüß',
},
attachments: [
{
md5: '6a0434efa5a2eebf4efe46b04f7b3a9c',
filename: 'smime.p7s',
},
],
},
{
data: IO.binread('test/fixtures/mail41.box'),
body_md5: '5872ddcdfdf6bfe40f36cd0408fca667',
params: {
from: 'Martin Edenhofer <me@example.com>',
from_email: 'me@example.com',
from_display_name: 'Martin Edenhofer',
subject: 'smime sign & crypt',
to: 'Martin Edenhofer <me@example.com>',
cc: nil,
body: 'no visible content',
},
attachments: [
{
md5: 'fc68cdcbf343c72e456fbf9477501a72',
filename: 'smime.p7m',
},
],
},
{
data: IO.binread('test/fixtures/mail42.box'),
body_md5: '5872ddcdfdf6bfe40f36cd0408fca667',
params: {
from: 'Martin Edenhofer <me@example.com>',
from_email: 'me@example.com',
from_display_name: 'Martin Edenhofer',
subject: 'pgp sign & crypt',
to: 'Martin Edenhofer <me@example.com>',
cc: nil,
body: 'no visible content',
},
attachments: [
{
md5: '8d23752cf0211ab3eba43bc3a530e8ab',
filename: 'encrypted.asc',
},
],
},
]
count = 0
@ -580,9 +683,9 @@ end
#puts 'md5'
#puts '++' + data[:body].to_s + '++'
#puts '++' + file[:params][key.to_sym].to_s + '++'
assert_equal( Digest::MD5.hexdigest( file[:params][key.to_sym].to_s ), Digest::MD5.hexdigest( data[:body].to_s ) )
assert_equal(Digest::MD5.hexdigest(file[:params][key.to_sym].to_s), Digest::MD5.hexdigest(data[:body].to_s))
else
assert_equal( file[:params][key.to_sym], data[key.to_sym], "check #{key}" )
assert_equal(file[:params][key.to_sym], data[key.to_sym], "check #{key}")
end
}
@ -599,11 +702,11 @@ end
#puts 'Attachment:' + attachment_parser.inspect + '-' + file_md5
if attachment[:md5] == file_md5
found = true
assert_equal( attachment[:filename], attachment_parser[:filename] )
assert_equal(attachment[:filename], attachment_parser[:filename])
end
}
if !found
assert( false, "Attachment not found! MD5: #{attachment[:md5]} - #{attachment[:filename].to_s}" )
assert(false, "Attachment not found! MD5: #{attachment[:md5]} - #{attachment[:filename]}")
end
}
assert_equal( attachment_count_config, attachment_count_email )

View file

@ -1969,6 +1969,34 @@ Some Text',
],
}
},
{
data: IO.binread('test/fixtures/mail41.box'),
success: true,
result: {
0 => {
priority: '2 normal',
title: 'smime sign & crypt',
},
1 => {
sender: 'Customer',
type: 'email',
},
},
},
{
data: IO.binread('test/fixtures/mail42.box'),
success: true,
result: {
0 => {
priority: '2 normal',
title: 'pgp sign & crypt',
},
1 => {
sender: 'Customer',
type: 'email',
},
},
},
]
process(files)
end