This commit is contained in:
parent
1da9a3f828
commit
0f91161ff3
@ -951,6 +951,8 @@ def add_header(msg: Message, text_header, html_header=None) -> Message:
|
|||||||
for part in msg.get_payload():
|
for part in msg.get_payload():
|
||||||
if isinstance(part, Message):
|
if isinstance(part, Message):
|
||||||
new_parts.append(add_header(part, text_header, html_header))
|
new_parts.append(add_header(part, text_header, html_header))
|
||||||
|
elif isinstance(part, str):
|
||||||
|
new_parts.append(MIMEText(part))
|
||||||
else:
|
else:
|
||||||
new_parts.append(part)
|
new_parts.append(part)
|
||||||
clone_msg = copy(msg)
|
clone_msg = copy(msg)
|
||||||
@ -959,7 +961,14 @@ def add_header(msg: Message, text_header, html_header=None) -> Message:
|
|||||||
|
|
||||||
elif content_type in ("multipart/mixed", "multipart/signed"):
|
elif content_type in ("multipart/mixed", "multipart/signed"):
|
||||||
new_parts = []
|
new_parts = []
|
||||||
parts = list(msg.get_payload())
|
payload = msg.get_payload()
|
||||||
|
if isinstance(payload, str):
|
||||||
|
# The message is badly formatted inject as new
|
||||||
|
new_parts = [MIMEText(text_header, "plain"), MIMEText(payload, "plain")]
|
||||||
|
clone_msg = copy(msg)
|
||||||
|
clone_msg.set_payload(new_parts)
|
||||||
|
return clone_msg
|
||||||
|
parts = list(payload)
|
||||||
LOG.d("only add header for the first part for %s", content_type)
|
LOG.d("only add header for the first part for %s", content_type)
|
||||||
for ix, part in enumerate(parts):
|
for ix, part in enumerate(parts):
|
||||||
if ix == 0:
|
if ix == 0:
|
||||||
|
21
app/tests/example_emls/add_header_multipart.eml
Normal file
21
app/tests/example_emls/add_header_multipart.eml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Sender: somebody@somewhere.net
|
||||||
|
Content-Type: multipart/mixed; boundary="----=_Part_3946_1099248058.1688752298149"
|
||||||
|
|
||||||
|
--0c916c9b5fe3c925d7bafeb988bb6794
|
||||||
|
Content-Type: text/plain; charset="UTF-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
notification test
|
||||||
|
|
||||||
|
--0c916c9b5fe3c925d7bafeb988bb6794
|
||||||
|
Content-Type: text/html; charset="UTF-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
|
||||||
|
=3DUTF-8"><meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge"><meta =
|
||||||
|
name=3D"format-detection" content=3D"telephone=3Dno"><meta name=3D"viewport=
|
||||||
|
" content=3D"width=3Ddevice-width, initial-scale=3D1.0">
|
||||||
|
|
||||||
|
--0c916c9b5fe3c925d7bafeb988bb6794--
|
||||||
|
|
||||||
|
|
27
app/tests/example_emls/email_to_pgp_encrypt.eml
Normal file
27
app/tests/example_emls/email_to_pgp_encrypt.eml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From: {{sender_address}}
|
||||||
|
To: {{recipient_address}}
|
||||||
|
Subject: Test subject
|
||||||
|
Content-Type: multipart/alternative; boundary="MLF8fvg556fdhFDH7=_?:
|
||||||
|
|
||||||
|
--MLF8fvg556fdhFDH7=_?:
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset="utf-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
*************************************************************************
|
||||||
|
|
||||||
|
This five-part limited series, based on the brilliant graphic novel by Me
|
||||||
|
|
||||||
|
--MLF8fvg556fdhFDH7=_?:
|
||||||
|
Content-Type: text/html;
|
||||||
|
charset="utf-8"
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
--MLF8fvg556fdhFDH7=_?:
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset="utf-8"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
*************************************************************************
|
||||||
|
*************************************************************************
|
||||||
|
|
||||||
|
|
33
app/tests/handler/test_encrypt_pgp.py
Normal file
33
app/tests/handler/test_encrypt_pgp.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
from aiosmtpd.smtp import Envelope
|
||||||
|
|
||||||
|
import email_handler
|
||||||
|
from app.config import get_abs_path
|
||||||
|
from app.db import Session
|
||||||
|
from app.pgp_utils import load_public_key
|
||||||
|
from tests.utils import create_new_user, load_eml_file, random_email
|
||||||
|
|
||||||
|
from app.models import Alias
|
||||||
|
|
||||||
|
|
||||||
|
def test_encrypt_with_pgp():
|
||||||
|
user = create_new_user()
|
||||||
|
pgp_public_key = open(get_abs_path("local_data/public-pgp.asc")).read()
|
||||||
|
mailbox = user.default_mailbox
|
||||||
|
mailbox.pgp_public_key = pgp_public_key
|
||||||
|
mailbox.generic_subject = True
|
||||||
|
mailbox.pgp_finger_print = load_public_key(pgp_public_key)
|
||||||
|
alias = Alias.create_new_random(user)
|
||||||
|
Session.flush()
|
||||||
|
sender_address = random_email()
|
||||||
|
msg = load_eml_file(
|
||||||
|
"email_to_pgp_encrypt.eml",
|
||||||
|
{
|
||||||
|
"sender_address": sender_address,
|
||||||
|
"recipient_address": alias.email,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
envelope = Envelope()
|
||||||
|
envelope.mail_from = sender_address
|
||||||
|
envelope.rcpt_tos = [alias.email]
|
||||||
|
result = email_handler.MailHandler()._handle(envelope, msg)
|
||||||
|
assert result is not None
|
@ -810,7 +810,7 @@ def test_add_header_multipart_with_invalid_part():
|
|||||||
if i < 2:
|
if i < 2:
|
||||||
assert part.get_payload().index("INJECT") > -1
|
assert part.get_payload().index("INJECT") > -1
|
||||||
else:
|
else:
|
||||||
assert part == "invalid"
|
assert part.get_payload() == "invalid"
|
||||||
|
|
||||||
|
|
||||||
def test_sl_formataddr():
|
def test_sl_formataddr():
|
||||||
@ -822,3 +822,10 @@ def test_sl_formataddr():
|
|||||||
# test that the same name-address can't be handled by the built-in formataddr
|
# test that the same name-address can't be handled by the built-in formataddr
|
||||||
with pytest.raises(UnicodeEncodeError):
|
with pytest.raises(UnicodeEncodeError):
|
||||||
formataddr(("é", "è@ç.à"))
|
formataddr(("é", "è@ç.à"))
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_header_to_invalid_multipart():
|
||||||
|
msg = load_eml_file("add_header_multipart.eml")
|
||||||
|
msg = add_header(msg, "test", "test")
|
||||||
|
data = msg.as_string()
|
||||||
|
assert data != ""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user