Skip to content

Commit 682ddee

Browse files
committed
Reverted earlier application of on_behalf_of() at mail sending call points, and instead did all on_behalf_of processing in condition_message(). Added insertion of Reply-To header fields in this case. Changed all use of the mail-sending 'extra' parameters to use value lists. Updated a bunch of tests accordingly.
- Legacy-Id: 16020
1 parent fc18cd9 commit 682ddee

17 files changed

Lines changed: 108 additions & 83 deletions

File tree

ietf/doc/mails.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import debug # pyflakes:ignore
1111

12-
from ietf.utils.mail import send_mail, send_mail_text, on_behalf_of
12+
from ietf.utils.mail import send_mail, send_mail_text
1313
from ietf.ipr.utils import iprs_from_docs, related_docs
1414
from ietf.doc.models import WriteupDocEvent, LastCallDocEvent, DocAlias, ConsensusDocEvent
1515
from ietf.doc.utils import needed_ballot_positions
@@ -35,7 +35,7 @@ def email_ad_approved_doc(request, doc, text):
3535
to = "iesg@iesg.org"
3636
bcc = "iesg-secretary@ietf.org"
3737
frm = request.user.person.formatted_email()
38-
send_mail(request, to, on_behalf_of(frm),
38+
send_mail(request, to, frm,
3939
"Approved: %s" % doc.filename_with_rev(),
4040
"doc/mail/ad_approval_email.txt",
4141
dict(text=text,
@@ -68,7 +68,7 @@ def email_stream_changed(request, doc, old_stream, new_stream, text=""):
6868
def email_pulled_from_rfc_queue(request, doc, comment, prev_state, next_state):
6969
extra=extra_automation_headers(doc)
7070
addrs = gather_address_lists('doc_pulled_from_rfc_queue',doc=doc)
71-
extra['Cc'] = addrs.as_strings().cc
71+
extra['Cc'] = addrs.cc
7272
send_mail(request, addrs.to , None,
7373
"%s changed state from %s to %s" % (doc.name, prev_state.name, next_state.name),
7474
"doc/mail/pulled_from_rfc_queue_email.txt",
@@ -318,7 +318,7 @@ def email_resurrect_requested(request, doc, by):
318318
e = by.role_email("ad")
319319
frm = e.address
320320

321-
send_mail(request, to, on_behalf_of(e.formatted_email()),
321+
send_mail(request, to, e.formatted_email(),
322322
"I-D Resurrection Request",
323323
"doc/mail/resurrect_request_email.txt",
324324
dict(doc=doc,
@@ -385,10 +385,8 @@ def email_iana(request, doc, to, msg, cc=None):
385385
parsed_msg = email.message_from_string(msg.encode("utf-8"))
386386
parsed_msg.set_charset('UTF-8')
387387

388-
extra = {}
389-
extra["Reply-To"] = "noreply@ietf.org"
390-
extra["X-IETF-Draft-string"] = doc.name
391-
extra["X-IETF-Draft-revision"] = doc.rev
388+
extra = extra_automation_headers(doc)
389+
extra["Reply-To"] = ["noreply@ietf.org", ]
392390

393391
send_mail_text(request, to,
394392
parsed_msg["From"], parsed_msg["Subject"],
@@ -398,8 +396,8 @@ def email_iana(request, doc, to, msg, cc=None):
398396

399397
def extra_automation_headers(doc):
400398
extra = {}
401-
extra["X-IETF-Draft-string"] = doc.name
402-
extra["X-IETF-Draft-revision"] = doc.rev
399+
extra["X-IETF-Draft-string"] = [ doc.name, ]
400+
extra["X-IETF-Draft-revision"] = [ doc.rev, ]
403401

404402
return extra
405403

@@ -536,5 +534,5 @@ def email_charter_internal_review(request, charter):
536534
milestones=charter.group.groupmilestone_set.filter(state="charter"),
537535
),
538536
cc=addrs.cc,
539-
extra={'Reply-To':"iesg@ietf.org"},
537+
extra={'Reply-To': ["iesg@ietf.org", ]},
540538
)

ietf/doc/tests_review.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from ietf.utils.test_utils import TestCase
3333
from ietf.utils.test_data import create_person
3434
from ietf.utils.test_utils import login_testing_unauthorized, unicontent, reload_db_objects
35-
from ietf.utils.mail import outbox, empty_outbox, parseaddr
35+
from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of
3636
from ietf.person.factories import PersonFactory
3737

3838
class ReviewTests(TestCase):
@@ -645,7 +645,8 @@ def test_complete_review_upload_content(self):
645645
msgid = outbox[0]["Message-ID"]
646646
message = Message.objects.get(msgid=msgid)
647647
self.assertEqual(parseaddr(outbox[0]["To"]), parseaddr(message.to))
648-
self.assertEqual(parseaddr(outbox[0]["From"]), parseaddr(message.frm))
648+
self.assertEqual(parseaddr(outbox[0]["From"]), parseaddr(on_behalf_of(message.frm)))
649+
self.assertEqual(parseaddr(outbox[0]["Reply-To"]), parseaddr(message.frm))
649650
self.assertEqual(outbox[0].get_payload(decode=True).decode(str(outbox[0].get_charset())), message.body)
650651

651652
# check the review document page

ietf/doc/views_ballot.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from ietf.name.models import BallotPositionName
3333
from ietf.person.models import Person
3434
from ietf.utils import log
35-
from ietf.utils.mail import send_mail_text, send_mail_preformatted, on_behalf_of
35+
from ietf.utils.mail import send_mail_text, send_mail_preformatted
3636
from ietf.utils.decorators import require_api_key
3737

3838
BALLOT_CHOICES = (("yes", "Yes"),
@@ -285,7 +285,6 @@ def err(code, text):
285285

286286
# send position email
287287
addrs, frm, subject, body = build_position_email(ad, doc, pos)
288-
frm = on_behalf_of(frm)
289288
send_mail_text(request, addrs.to, frm, subject, body, cc=addrs.cc)
290289

291290
return HttpResponse("Done", status=200, content_type='text/plain')
@@ -363,7 +362,7 @@ def send_ballot_comment(request, name, ballot_id):
363362
if extra_cc:
364363
cc.extend(extra_cc)
365364

366-
send_mail_text(request, addrs.to, on_behalf_of(frm), subject, body, cc=u", ".join(cc))
365+
send_mail_text(request, addrs.to, frm, subject, body, cc=u", ".join(cc))
367366

368367
return HttpResponseRedirect(return_to_url)
369368

@@ -621,11 +620,10 @@ def ballot_writeupnotes(request, name):
621620
send_mail_preformatted(request, msg, override=override)
622621

623622
addrs = gather_address_lists('ballot_issued_iana',doc=doc).as_strings()
624-
override={ "To": "IANA <%s>"%settings.IANA_EVAL_EMAIL, "Bcc": None , "Reply-To": None}
623+
override={ "To": "IANA <%s>"%settings.IANA_EVAL_EMAIL, "Bcc": None , "Reply-To": []}
625624
if addrs.cc:
626625
override['CC'] = addrs.cc
627-
send_mail_preformatted(request, msg, extra=extra_automation_headers(doc),
628-
override={ "To": "IANA <%s>"%settings.IANA_EVAL_EMAIL, "CC": None, "Bcc": None , "Reply-To": None})
626+
send_mail_preformatted(request, msg, extra=extra_automation_headers(doc), override=override)
629627

630628
e = DocEvent(doc=doc, rev=doc.rev, by=login)
631629
e.by = login
@@ -866,7 +864,7 @@ def approve_ballot(request, name):
866864
if action == "to_announcement_list":
867865
addrs = gather_address_lists('ballot_approved_ietf_stream_iana').as_strings(compact=False)
868866
send_mail_preformatted(request, announcement, extra=extra_automation_headers(doc),
869-
override={ "To": addrs.to, "CC": addrs.cc, "Bcc": None, "Reply-To": None})
867+
override={ "To": addrs.to, "CC": addrs.cc, "Bcc": None, "Reply-To": []})
870868

871869
msg = infer_message(announcement)
872870
msg.by = login
@@ -911,7 +909,7 @@ def make_last_call(request, name):
911909
if doc.type.slug == 'draft':
912910
addrs = gather_address_lists('last_call_issued_iana',doc=doc).as_strings(compact=False)
913911
send_mail_preformatted(request, announcement, extra=extra_automation_headers(doc),
914-
override={ "To": addrs.to, "CC": addrs.cc, "Bcc": None, "Reply-To": None})
912+
override={ "To": addrs.to, "CC": addrs.cc, "Bcc": None, "Reply-To": []})
915913

916914
msg = infer_message(announcement)
917915
msg.by = login

ietf/doc/views_draft.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
from ietf.name.models import IntendedStdLevelName, DocTagName, StreamName, DocUrlTagName
4343
from ietf.person.fields import SearchableEmailField
4444
from ietf.person.models import Person, Email
45-
from ietf.utils.mail import send_mail, send_mail_message, on_behalf_of
45+
from ietf.utils.mail import send_mail, send_mail_message
4646
from ietf.utils.textupload import get_cleaned_text_file_content
4747
from ietf.mailtrigger.utils import gather_address_lists
4848

@@ -594,10 +594,10 @@ def to_iesg(request,name):
594594

595595
addrs= gather_address_lists('pubreq_iesg',doc=doc)
596596
extra = {}
597-
extra['Cc'] = addrs.as_strings().cc
597+
extra['Cc'] = addrs.cc
598598
send_mail(request=request,
599599
to = addrs.to,
600-
frm = on_behalf_of(by.formatted_email()),
600+
frm = by.formatted_email(),
601601
subject = "Publication has been requested for %s-%s" % (doc.name,doc.rev),
602602
template = "doc/submit_to_iesg_email.txt",
603603
context = dict(doc=doc,by=by,url="%s%s"%(settings.IDTRACKER_BASE_URL,doc.get_absolute_url()),),
@@ -1219,7 +1219,7 @@ class PublicationForm(forms.Form):
12191219
consensus_event = doc.latest_event(ConsensusDocEvent, type="changed_consensus")
12201220

12211221
m = Message()
1222-
m.frm = on_behalf_of(request.user.person.formatted_email())
1222+
m.frm = request.user.person.formatted_email()
12231223
(m.to, m.cc) = gather_address_lists('pubreq_rfced',doc=doc)
12241224
m.by = request.user.person
12251225

ietf/doc/views_review.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from ietf.utils.fields import DatepickerDateField
3838
from ietf.utils.text import strip_prefix, xslugify
3939
from ietf.utils.textupload import get_cleaned_text_file_content
40-
from ietf.utils.mail import send_mail_message, on_behalf_of
40+
from ietf.utils.mail import send_mail_message
4141
from ietf.mailtrigger.utils import gather_address_lists
4242
from ietf.utils.fields import MultiEmailField
4343

@@ -628,7 +628,7 @@ def complete_review(request, name, request_id):
628628
msg = Message.objects.create(
629629
by=request.user.person,
630630
subject=subject,
631-
frm=on_behalf_of(frm),
631+
frm=frm,
632632
to=", ".join(to),
633633
cc=form.cleaned_data["cc"],
634634
body = render_to_string("review/completed_review.txt", {

ietf/doc/views_status_change.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def approve(request, name):
352352

353353
for form in formset.forms:
354354

355-
send_mail_preformatted(request,form.cleaned_data['announcement_text'])
355+
send_mail_preformatted(request, form.cleaned_data['announcement_text'], extra={})
356356

357357
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=login)
358358
c.desc = "The following approval message was sent\n"+form.cleaned_data['announcement_text']

ietf/group/tests_review.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,12 @@ def test_email_open_review_assignments(self):
367367
})
368368
self.assertEqual(r.status_code, 302)
369369
self.assertEqual(len(outbox), 1)
370-
self.assertTrue('toaddr' in outbox[0]["To"])
371-
self.assertTrue('ccaddr' in outbox[0]["Cc"])
372-
self.assertTrue('replytoaddr' in outbox[0]["Reply-To"])
373-
self.assertTrue('fromaddr' in outbox[0]["From"])
370+
self.assertIn('toaddr', outbox[0]["To"])
371+
self.assertIn('ccaddr', outbox[0]["Cc"])
372+
self.assertIn('replytoaddr', outbox[0]["Reply-To"])
373+
self.assertIn('fromaddr', outbox[0]["From"])
374374
self.assertEqual(outbox[0]["subject"], "Test subject")
375-
self.assertTrue("Test body" in outbox[0].get_payload(decode=True).decode("utf-8"))
375+
self.assertIn("Test body", outbox[0].get_payload(decode=True).decode("utf-8"))
376376

377377
def test_change_reviewer_settings(self):
378378
reviewer = ReviewerSettingsFactory(person__user__username='reviewer',expertise='Some expertise').person

ietf/group/views.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109

110110

111111
from ietf.name.models import ReviewRequestStateName
112-
from ietf.utils.mail import send_mail_text, parse_preformatted, on_behalf_of
112+
from ietf.utils.mail import send_mail_text, parse_preformatted
113113

114114
from ietf.ietfauth.utils import user_is_person
115115
from ietf.dbtemplate.models import DBTemplate
@@ -1600,7 +1600,14 @@ def email_open_review_assignments(request, acronym, group_type=None):
16001600
if request.method == "POST" and request.POST.get("action") == "email":
16011601
form = EmailOpenAssignmentsForm(request.POST)
16021602
if form.is_valid():
1603-
send_mail_text(request, form.cleaned_data["to"], on_behalf_of(form.cleaned_data["frm"]), form.cleaned_data["subject"], form.cleaned_data["body"],cc=form.cleaned_data["cc"],extra={"Reply-To":", ".join(form.cleaned_data["reply_to"])})
1603+
send_mail_text(request,
1604+
to=form.cleaned_data["to"],
1605+
frm=form.cleaned_data["frm"],
1606+
subject=form.cleaned_data["subject"],
1607+
txt=form.cleaned_data["body"],
1608+
cc=form.cleaned_data["cc"],
1609+
extra={"Reply-To": form.cleaned_data["reply_to"]}
1610+
)
16041611
return HttpResponseRedirect(back_url)
16051612
else:
16061613
(to,cc) = gather_address_lists('review_assignments_summarized',group=group)

ietf/mailtrigger/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from collections import namedtuple
2+
3+
import debug # pyflakes:ignore
4+
25
from ietf.mailtrigger.models import MailTrigger, Recipient
36
from ietf.submit.models import Submission
47

ietf/meeting/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
create_recording)
6565
from ietf.utils.decorators import require_api_key
6666
from ietf.utils.log import assertion
67-
from ietf.utils.mail import send_mail_message, send_mail_text, on_behalf_of
67+
from ietf.utils.mail import send_mail_message, send_mail_text
6868
from ietf.utils.pipe import pipe
6969
from ietf.utils.pdf import pdf_pages
7070
from ietf.utils.text import xslugify
@@ -2307,7 +2307,7 @@ def request_minutes(request, num=None):
23072307
if form.is_valid():
23082308
send_mail_text(request,
23092309
to=form.cleaned_data.get('to'),
2310-
frm=on_behalf_of(request.user.person.email_address()),
2310+
frm=request.user.person.email_address(),
23112311
subject=form.cleaned_data.get('subject'),
23122312
txt=form.cleaned_data.get('body'),
23132313
cc=form.cleaned_data.get('cc'),

0 commit comments

Comments
 (0)