Topic
Trigger
Subject
Recipients
Notes
V send_mail search
V ./community/forms.py
*
User subscribes to community list
Confirm list subscription: %s' % self.clist
provided email address
*
User unsubscribes from community list
'Confirm list subscription cancelation: %s' % self.clist
provided email address
V ./community/models.py
*
qualifying event on list
'%s notification: Changes on %s' % (l.long_name(), self.event.doc.name)
subscribed addresses
V ./doc/expire.py
*
draft is about to expire
u"Expiration impending: %s" % doc.file_tag()
Authors, chairs (if wg item)
*
draft has expired
u"I-D was expired %s" % doc.file_tag()
AD
V ./doc/mails.py
V email_state_changed
Document’s state changes
"ID Tracker State Update Notice: %s" % doc.file_tag()
doc.notify
* When ballots are deferred or undeferred
* When a last call request is sent
* When a ballot is approved
* When a last call is issued
* When state is edited directly from the document view
* When the state is edited directly from the secretariat telechat view
* When new IANA state is received
V email_stream_changed
Document stream changes
u"Stream changed to <b>%s</b> from %s" % (new_stream, old_stream)
doc.notify, old and new stream managers
* When stream is manually changed
* When a draft is adopted by a group (and the stream changes)
* email_pulled_from_rfc_queue
Document is pulled form rfc queue
"%s changed state from %s to %s" % (doc.name, prev_state.name, next_state.name)
IANA, RFC Editor
* email_authors
?
(passed as argument)
doc.author_list
Nothing calls this
V email_ad
"%s updated by %s" % (doc.file_tag(), changed_by.plain_name())
ad.role_email("ad").formatted_email() but only if the ad wasn’t the user responsible for the action
A subject is passed in, but is ignored
* When last call is requested
* When a ballot is approved
* When last call is issued
* When a comment is added to a draft
* When state is edited directly from the document view
* When the intended status of a document is changed
* When anything is changed when the older edit_info form is used (currently, only when starting IESG processing)
* When document state is manually edited by the secretariat from the telechat view
* When new IANA state is received
* send_last_call_request
Last call is requested
"Last Call: %s" % doc.file_tag()
iesg-secretary @ ietf.org
* email_resurrect_requested
Resurrection requested
"I-D Resurrection Request"
internet-drafts @ ietf.org
* email_resurrection_completed
Resurrection completed
"I-D Resurrection Completed - %s" % doc.file_tag()
the requester’s role email (either secretariat role or ad role)
* email_ballot_deferred
ballot deferred
"IESG Deferred Ballot notification: %s" % doc.file_tag()
iesg @ ietf.org
* email_ballot_undeferred
ballot undeferred
"IESG Undeferred Ballot notification: %s" % doc.file_tag()
iesg @ ietf.org
V email_iana
To passed in as an argument, subject parsed from passed in message
* When conflict review is started
Conflict Review requested for {{reviewed_doc.name}}
settings.IANA_EVAL_EMAIL (currently drafts-eval @ icon.org)
* When conflict review is finished
Evaluation: {{doc.title}}
settings.IANA_EVAL_EMAIL
* email_last_call_expired
last call expires
"Last Call Expired: %s" % doc.file_tag()
doc.notify, iesg @ ietf.org
V email_stream_state_changed
u"%s changed for %s" % (state_type.label, doc.name)
chairs and delegates of group, authors
* When a document is adopted by a group
* When stream state (such the documents WG state) is manually edited
* email_stream_tags_changed
when stream state is manually edited
u"Tags changed for %s" % doc.name
chairs and delegates of group, authors, shepherd
V ./doc/utils.py
V email_update_telechat
"Telechat update notice: %s" % doc.file_tag()
iesg @ ietf.org, iesg-secretary @ ietf.org, doc.notify
* When a ballot is deferred or undeferred
* when the secretariat initiates a conflict review (if the secretariat puts the document on a telechat)
* When the document’s telechat date is manually changed
* When a telechat date is set using the older edit_info form (currently, only when starting IESG processing)
* when a status change is initiated (if it’s put on a telechat)
* When the secretariat reschedules a document using the telechat view
V ./doc/utils_charter.py
V email_state_changed
"State changed: %s-%s" % (doc.canonical_name(), doc.rev)
doc.notify
* when charter state is manually edited
* when a charter title is changed
V ./doc/views_ballot.py
* send_ballot_comment
ballot position is updated, save and send email is selected
e.g.: Foo Bar’s discuss on doc.name-doc.rev (with comment)
iesg @ ietf.org, cc: taken from form. Form initializes the cc to be empty, but offers everything in doc.notify as a checkbox
* ballot_writeup_notes
ballot writeup is edited
Evaluation: {{ doc.file_tag }} to {{ doc|std_level_prompt }}
One message to iesg @ ietf.org, separate message (same content, but with automation headers) to settings.IANA_EVAL_EMAIL
V approve_ballot
secretariat approves ballot
* IETF stream document
{{ action_type }} Action: '{{ doc.title|clean_whitespace }}' to {{ doc|std_level_prompt }} ({{ doc.filename_with_rev }})
ietf-announce @ ietf.org, cc: settings.DOC_APPROVAL_EMAIL_CC (currently rfc-editor @ rfc-editor.org). If group, then cc: group chairs (using tools alias) and group mailing list. Then a separate message with same contents are sent and automation heads are sent to settings.IANA_APPROVE_EMAIL
* Conflict review (old style)
Results of IETF-conflict review for {{ doc.file_tag }}
group chair, stream manager, if IRTF stream, then irsg @ irtf.org. cc: iesg @ ietf.org, iana @ iana.org , ietf-announce @ ietf.org.
This is NOT USED in modern practice. It’s probably time to weed it from the code.
* make last call
secretariat acts on last call request
Last Call: {{ doc.file_tag }} ({{ doc.title|clean_whitespace }}) to {{ doc|std_level_prompt }}
ietf-announce @ ietf.org. If group, then cc group list. If doc is of type draft, then send a separate message to drafts-lastcall @ icann.org with automation headers.
V ./doc/views_charter.py
* announcement_text
secretariat sends review announcement
WG Review: {{ group.name }} ({{ group.acronym }})
ietf-announce @ ietf.org, cc: group list
Secretariat has ability to edit To and CC before sending
* ballot_writeup_notes
ballot writeup is changed
Evaluation: {{ doc.name }}
iesg @ ietf.org
* approve
secretariat approves charter ballot
WG Action: {{ action_type }} {{ group.name }} ({{ group.acronym }})
ietf-announce @ ietf.org, cc: group list
Secretariat has ability to edit To and CC before sending
V ./doc/views_conflict_review.py
* send_conflict_review_started_email
stream manager asks for a conflict review
Conflict Review requested for {{reviewed_doc.name}}
iesg-secretary @ ietf.org
* send_conflict_eval_email
ballot is issued
Evaluation: {{doc.title}}
iesg @ ietf.org
* approve
secretariat approves conflict-review ballot
Results of IETF-conflict review for {{conflictdoc.canonical_name}}-{{conflictdoc.rev}}
doc.notify (which is initialized to contain the stream manager), cc: iesg @ ietf.org, iana @ iana.org, ietf-announce @ ietf.org
This is what is in modern use
V ./doc/views_draft.py
* replaces
draft replaces information is changed
"%s updated by %s" % (doc.name, login)
authors, group chairs (using role address), ads (using tools.ietf.org alias), and shepherd of all affected docs (those replacing and those being replaced).
* to_iesg
draft submitted to the iesg
"Publication has been requested for %s-%s" % (doc.name,doc.rev)
doc.ad.email_address(), cc: group chairs (using tools alias), iesg-secretary @ ietf.org, doc.notify
* request_publication
stream manager requests publication
"%s: '%s' to %s (%s-%s.txt)" % (action, doc.title, std_level_prompt(doc), doc.name, doc.rev)
rfc-editor @ rfc-editor.org, then a separate copy with automation headers to settings.IANA_APPROVE_EMAIL
V ./doc/views_status_change.py
* send_status_change_eval_email
ballot is issued
Evaluation: {{doc.title}}
iesg @ ietf.org
* approve
secretariat approves ballot
{{action}}: {{relateddoc.target.document.title}} to {{newstatus}}
ietf-announce @ ietf.org cc: rfc-editor @ rfc-editor.org, doc.notify
V ./group/mails.py
V email_iesg_secretary_re_charter
Regarding %s %s: %s" % (group.type.name, group.acronym, subject), where subject is passed in as an argument
iesg-secretary @ ietf.org
*
charter’s state manually changes
subject = “Charter state changed to %s” % charter_state.name
*
charter’s title changes
subject = “Charter title changed to%S” % new_title
*
charter is approved
subject = “Charter state changed to %s” % new_charter_state.name
* conclude
AD closes group
subject = “Request closing of group”
* email_iesg_secretary_personnel_change
group is edited, and personnel differences are detected
u"Personnel change for %s working group" % (group.acronym)
iesg-secretary @ ietf.org
* email_milestones_changed
u"Milestones changed for %s %s" % (group.acronym, group.type.name)
group ad, group chairs, if rg, then irtf chair. Then a separate message is sent to the group list, eliding any lines that match “Added .* for review, due”
* email_milestone_review_reminder
cron runs send-milestone-reminders
u"Reminder: Milestone%s needing review in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
group ad, if rg, then irtf chair. cc: group chairs
* email_milestones_due
cron runs send-milestone-reminders
u"Reminder: Milestone%s are soon due in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
group chairs
* email_milestones_overdue
cron runs send-milestone-reminders
u"Reminder: Milestone%s overdue in %s %s" % ("s" if len(milestones) > 1 else "", group.acronym, group.type.name)
group chairs
V ./ietfauth/forms.py
* RegistrationForm.send_email
'Confirm registration at %s' % domain
provided email address
* RecoverPasswordForm.send_email
'Password reset at %s' % domain
provided email address
* PersonForm.send_email
'Confirm email address for %s' % person.name
provided email addresses (note the plural)
V ./ipr/views.py
* email
secretariat initiates email to a discloser
'Regarding {}'.format(ipr.title)
ipr.submitter_email
* new
system receives a new disclosure
'New IPR Submission Notification'
settings.IPR_EMAIL_TO (currently ietf-ipr @ ietf.org)
V notify
*
some disclosure is posted that updates this one
IPR update notification
separate copy to the submitters of this disclosure and the submitters of all the disclosures this one updates
*
a disclosure is posted
Posting of IPR {% if ipr.updates %}Updated {% endif %}Disclosure
separate copies to the submitter, the authors of all related documents (cc ipr-announce @ ietf.org, the list if a wg doc, else the sponsoring ad else the general area ad) and if a generic disclosure, the general area ad
V ./liaisons/mails.py
* send_liaison_by_email
a liaison statement is added or approved
u'New Liaison Statement, "%s"' % (liaison.title)
to and cc are populated from fields provided on the form (defaults are provided based on the target groups. statements @ ietf.org is bcc’ed.
* notify_pending_by_email
a statement needing approval is added
u'New Liaison Statement, "%s" needs your approval' % (liaison.title)
statements @ ietf.org
known to be broken - the current “to” is a workaround and the secretariat ensures the right people are notified. The liaison project underway will address this.
* send_sdo_reminder
management command is run to poke the SDO liaison managers to update personnel lists
'Request for update of list of authorized individuals'
Role.objects.filter(name="liaiman", group=sdo).first().email.address
* possibly_send_deadline_reminder
management command is run check liaison deadlines
'[Liaison deadline %s] %s' % (PREVIOUS_DAYS[days_to_go], liaison.title) or '[Liaison OUT OF DATE] %s' % liaison.title
to the liaison to_contact, cc the liaison.cc, technical and response contact, bcc statements @ ietf.org
V ./message/utils.py
* send_scheduled_messages_from_send_queue
time arrives to send a queued message (what drives the clock on this?)
whatever went into the queue
whatever went into the queue
not clear if this is used? Only secr code seems to put stuff in this queue, and it’s not clear that function is called.
V ./nomcom/forms.py
* NominateForm.save
'Nomination Receipt'
nominator.address
* FeedbackForm.save
‘NomCom comment confirmation’
commenter.address
V ./nomcom/utils.py
* send_accept_reminder_to_nominee
'Reminder: please accept (or decline) your nomination.'
nominee.email.address
* send_questionnaire_reminder_to_nominee
'Reminder: please complete the Nomcom questionnaires for your nomination.'
nominee.email.address
V get_or_create_nominee
when a nomination arrives
*
if a new person is created
'New person is created'
settings.NOMCOM_ADMIN_EMAIL (currently ietf-secretariat-reply @ ietf.org ) and nomcom.group.get_chair().email.address
NOMCOM_ADMIN_EMAIL is set to DEFAULT_FROM_EMAIL?
*
if a new nomination is created
'IETF Nomination Information'
nominated.email.address
*
if nomcom is configured to send questionnaire automatically
'%s Questionnaire' % position
nominated.email.address
*
if a new nomination is created
‘Nomination Information’
nomcom.group.get_chair().email.address
V ./person/models.py
* Person.save
if there is another person with this same name
Possible duplicate Person objects for {{name}}
iesg-secretary @ ietf.org
* Alias.save
if there is another alias with this same name
Possible duplicate Person objects for {{name}}
iesg-secretary @ ietf.org
V ./secr/announcement/views.py
* confirm
shows a message created elsewhere giving the secretary an opportunity to review (but not edit) it and choose to send or cancel
from the message
from the message
Only used by the announce tool - values are whatever the secretary puts in the message.
V ./secr/meetings/views.py
* send_notificaitons
Secretariat presses button to send notices about scheduled sessions
'%s - Requested session has been scheduled for IETF %s' % (group.acronym, meeting.number) (or a similar string for groups that requested multiple sessions)
for each scheduled session request: to the requester (using the chair role of the group), cc the group list
V ./secr/sreq/views.py
V send_notification
when a session request is received (for 1 or two sessions)
'%s - New Meeting Session Request for IETF %s' % (group.acronym, meeting.number) or '%s - Update to a Meeting Session Request for IETF %s' % (group.acronym, meeting.number)
session-request @ ietf.org, cc the group list
*
when a session request is received for 3 or more sessions
'%s - Request for meeting session approval for IETF %s' % (group.acronym, meeting.number)
group’s ad, cc group chairs, session-request @ ietf.org
* cancel
'%s - Cancelling a meeting request for IETF %s' % (group.acronym, meeting.number)
session-request @ ietf.org, cc ads (using tools alias), chairs, logged in user
* no_session
'%s - Not having a session at IETF %s' % (group.acronym, meeting.number)
session-request @ ietf.org, cc ads (using tools alias), chairs, logged in user
V ./submit/mail.py
* send_submission_confirmation
'Confirm submission of I-D %s' % submission.name
if previous version exists, then authors of the previous version, else, the submitter and all authors listed on the submission.
* send_full_url
'Full URL for managing submission of draft %s' % submission.name
(same as above)
* send_approval_request_to_group
'New draft waiting for approval: %s' % submission.name
group chairs
* send_manual_post_request
u'Manual Post Requested for %s' % submission.name
internet-drafts @ ietf.org, cc submitter, authors in submission, group chairs
* announce_to_lists
'I-D Action: %s-%s.txt' % (submission.name, submission.rev)
i-d-announce @ ietf.org, cc group list address
* announce_new_version
'New Version Notification - %s-%s.txt' % (submission.name, submission.rev)
doc.notify, ad, stream manager if not ietf stream, rfc-editor if doc is in state ‘ann’ or ‘rfcqueue’, any ads with an active discuss
* announce_to_authors
'New Version Notification for %s-%s.txt' % (submission.name, submission.rev)
all authors listed in submission, and if previous version of draft exists all authors from previous version.
* ./sync/mails.py
"Datatracker Sync Discrepancies Report"
iesg-secretary @ ietf.org
Nothing seems to be calling this?
* ./sync/rfceditor.py
in update_drafts_from_queue
'%s in RFC Editor queue' % d.name,
iesg-secretary @ ietf.org