- Author
- Contact
Michael JasonSmith <mpj17@onlinegroups.net>
- Date
2014-11-13
- Organization
- Copyright
This document is licensed under a Creative Commons Attribution-Share Alike 4.0 International License by OnlineGroups.Net.
Email addresses are unreliable. Because of this SMTP servers have a way of communicating back to the sender when an email message cannot be delivered. These messages are known as bounces. This product (gs.group.member.bounce
) provides the system that allows GroupServer to respond to these bounces.
In this document I discuss how bouncing works, and how this product will register a bounce. I also document the pages and notifications that this product provides.
An email message has two addresses in the envelope: a To
address and a From
address. The addresses in the envelope are different from the myriad of the To
and From
addresses in the header of the email messages themselves (but the envelope addresses will usually be one of the addresses in the message-header). The envelope addresses are set when communicating with the SMTP server1:
┌Envelope──────────┐
│ To:… │
│ From:… │
│┌Message─────────┐│
││┌Header────────┐││
│││ To:… │││
│││ CC:… │││
│││ BCC:… │││
│││ From:… │││
│││ Reply-To:…│││
│││ Sender:… │││
││└──────────────┘││
││┌Body──────────┐││
││└──────────────┘││
│└────────────────┘│
└──────────────────┘
The VERP system, which this product supports, allows an SMTP server to report a bounce. If the server cannot deliver a message it will send the message back. The To
address in the envelope of the returned message is made from the original To
and From
addresses:
listId+userMailbox=user.domain@this.server
listID
:The identifier of the list that sent the original email message.
userMailbox
:The mail-box (left-hand side of the
@
) that is bouncing.user.domain
:The domain of the mail-server that generated the bounce-message.
this.server
:The domain of the server that sent the original email message.
From these four elements the original To
and From
addresses can be re-constructed:
- User Address
userMailbox@user.domain
- Group Address:
listId@this.server
The smtp2gs
script2 detects when a VERP message arrives, extracts the two addresses, and passes them to a form provided by this product to register a bounce.
This product provides a form to register a bounce: /gs-group-member-bounce.html
. The form has three entries:
- User Address,
- Group Address, and
- Token3.
When submitted, the form registers a bounce by making an entry in the bounce
table. If the system has registered more than 5 bounces in the last 60 days4 then the email address is unverified, so no more email will be sent to it. The form will send a notification to the member if he or she has more than one email address.
- A
bounce
notification will be sent if the system has simply registered a bounce. - A
disabled
notification will be sent if the email address has become unverified.
This product provides two pages:
bounce.html
in the group context lists the bounces that occur in the group.bounce.html
in the profile context lists the bounces associated with a person.
The latter has not been linked, because currently (2014-07-31) the Profile page is a mess, and it needs to be refactored.
Three notifications are provided by this product.
gs-group-member-bounce-bouncing.html
:A group member is informed that his or her email address is bouncing if he or she has another address, and the group member has not been informed of a bounce today.
gs-group-member-bounce-disabled.html
:If an address continues to be an issue then it will be disabled, with the Disabled notification sent.
gs-group-member-bounce-disabled-admin.html
:Finally, if the address is disabled then the group administrators are told of it, unless the person in question is a group administrator, in which case he or she is skipped
- Code repository: https://github.com/groupserver/gs.group.member.bounce
- Questions and comments to http://groupserver.org/groups/development
- Report bugs at https://redmine.iopen.net/projects/groupserver
See
gs.email
for an example↩See <http://github.com/groupserver/gs.group.messages.add.smtp2gs>↩
An email address is not disabled immediately on a bounce because transient errors are common. The current hard-coded rate of 5 bounces in 60 days has been informed by the wisdom of bitter experience.↩