GroupServer Notifications¶
Authors: | Alice Murphy; Michael JasonSmith |
---|---|
Contact: | Michael JasonSmith <mpj17@onlinegroups.net> |
Organization: | GroupServer.org |
Date: | 2015-04-27 Creative Commons Attribution-Share Alike 4.0 International License by OnlineGroups.net. |
Table of contents
Notifications are small messages that are sent to the user outside the group-email context. They include messages such as the invitation to join a group, and the group welcome email. In this document we describe the various notifications sent by GroupServer. We summarise who they are sent to, and the code-path that is followed to send the notification.
Currently the notifications are being transitioned to their third version. These file-system-side notifications are are more flexible than the old notification templates. The notifications in different sub-systems will be converted to file-system side notifications when each module is reviewed in the normal process of software maintenance and refactoring.
File-System-Side Notifications¶
As we rebuild each subsystem, we move its notifications to the
file system, from the ZMI. The file-system-side notifications
work like Web pages. The notification system renders two pages —
an HTML page and a plain-text version of the same message — and
places them in an email message. All of the new fine-system-side
notifications use gs.profile.notify.sender.MessageSender
to send the message.
Cannot Post¶
Sent to a person with a profile when they attempt to post to a group,
but disallowed. The content of the message comes from the viewlets that
make up the gs.group.type.*
eggs. For people people without a
profile see unknown email address.
Sent to: | The a person with a profile that cannot post to the group. |
---|---|
URL: | Group Page /cannot-post.html |
via: | Products.XWFMailingListManager.XWFMailingList.checkMail gs.group.member.canpost.notifier.Notifier gs.group.member.canpost.notifier.CannotPostMessageSender gs.profile.notify.notifyuser.NotifyUser |
Invitation¶
An invitation is a message from an administrator asking someone to join the group. It is also used to present the administrator with a preview of the invitation.
Sent to: | Someone who has been invited to join a group by the administrator. |
---|---|
URL: | Group page |
via: | Clicking Invite gs.group.member.invite.base.invite.InviteEditProfileForm gs.group.member.invite.base.processor.InviteProcessor gs.group.member.invite.base.inviter.Inviter gs.group.member.invite.base.notify.InvitationNotifier gs.profile.notify.sender.MessageSender Invite site member:
gs.group.member.invite.invitesitemembers.GSInviteSiteMembersForm gs.group.member.invite.json.api.InviteUserAPI gs.group.member.invite.base.processor.InviteProcessor ...
Invite in bulk:
gs.group.member.invite.csv.ui.CSVUploadUI gs.group.member.invite.json.api.InviteUserAPI gs.group.member.invite.base.processor.InviteProcessor ...
Resend:
gs.group.member.invite.resend.reinvite.ResendInvitationForm gs.group.member.invite.base.processor.InviteProcessor ...
|
Group Welcome¶
The Group Welcome notification is sent to a new member when he or she joins a group. However, there are many ways of becoming a member, and some still use the old code, rather than this shiny method.
Site administrators receive the New Member notification.
Sent to: | A new member of a group. |
---|---|
URL: | Group page |
via: | A logged in member clicks gs.group.join.join.JoinForm gs.group.join.notify.NotifyNewMember gs.profile.notify.sender.MessageSender A new invited member accepts an invitation to join a group
gs.profile.invite.initalresponse An existing invited member accepts an invitation to join a group.
gs.profile.invite.invitationsrespond A new member joins a group during registration
gs.profile.signup.base.changeprofile.ChangeProfileForm or
gs.profile.signup.base.verifywait.VerifyWaitForm |
Group Started¶
Information about the group that has just been started
Sent to: | Every site administrator. |
---|---|
URL: | Group page |
via: | A site administrator clicks gs.group.start.startgroup.StartGroupForm gs.group.start.notify.StartNotifier gs.profile.notify.sender.MessageSender |
New Member¶
Sent to the group administrators when a new member joins the group. It is the flip-side of the group welcome notification.
Sent to: | The group administrators, or the site administrators if there are no group administrators. |
---|---|
URL: | Group page |
via: | A logged in member clicks gs.group.join.join.JoinForm gs.group.join.notify.NotifyAdmin gs.profile.notify.sender.MessageSender A new invited member accepts an invitation to join a group
gs.profile.invite.initalresponse An existing invited member accepts an invitation to join a
group
gs.profile.invite.invitationsrespond An administrator accepts the request to join the group. #3469
gs.group.member.request.request.respond.Respond A new member joins a group during registration
gs.profile.signup.base.changeprofile.ChangeProfileForm or
gs.profile.signup.base.verifywait.VerifyWaitForm |
Request Membership¶
This message is sent when someone requests to become a member of a Private group. It is the opposite of a invitation. It should not be confused with Request Contact.
Sent to: | The administrator of the group. |
---|---|
URL: | Group page /request_message.html |
via: | The request membership form
| gs.group.member.request.request.RequestForm
| gs.profile.notify.sender.MessageSender |
Request Contact¶
This notification is sent when a member reaches out to another. It allows the email address of everyone to be kept secret until they chose to disclose it. It is unusual because the From and Reply-to addresses are different.
Sent to: | The person being contacted. |
---|---|
URL: | Profile page /request_contact.html |
via: | The request contact form
| gs.profile.contact.request.RequestContact
| gs.profile.contact.notify.RequestNotifier
| gs.profile.contact.notify.AlternateReplyMessageSender
| gs.profile.notify.sender.MessageSender |
Reset password¶
A link to reset a password, sent to an email address that is submitted via the Reset Password page, when the email address is recognised as belonging to a user.
Sent to: | The person that requested the password reset. |
---|---|
URL: | gs-profile-password-reset-message.html in the context of a user. |
via: | gs,profile.password.request.RequestPasswordResetForm gs,profile.password.notifier.ResetNotifier gs.profile.notify.sender.MessageSender |
Topic digest¶
The topic digest contains a summary of the topics that were
discussed recently in the group. A “cron-job” is used to
regularly send out the digests, using the senddigest
command. The digest system consists of two notifications: the
daily digest, and the weekly digest. In addition there are
two commands: the digest on command, and the digest off
command.
The daily digest¶
The daily digest of topics topic digest is sent every day when there are posts. The digest
Sent to: | All group members who have elected to receive posts in digest form. |
---|---|
URL: | Group Page gs-group-messages-topic-digest-daily.html |
via: | gs.group.messages.topic.digest.send.script.main gs.group.messages.topic.digest.send.script.send_digest Site page
gs-group-messages-topic-digest-send.html gs.group.messages.topic.digest.base.sendDigests.SendDigests [
gs.group.messages.topic.digest.daily.notifier.DailyDigestNotifier ]gs.group.messages.topic.digest.base.notifier.DigestNotifier.notify |
The weekly digest¶
The weekly digest is sent once a week, on the weekly-anniversary of the last post, if there have been no posts that week.
Sent to: | All group members who have elected to receive posts in digest form. |
---|---|
URL: | Group Page gs-group-messages-topic-digest-weekly.html |
via: | gs.group.messages.senddigest.script.main gs.group.messages.senddigest.script.send_digest Site page
gs-group-messages-topic-digest-send.html gs.group.messages.topic.digest.base.sendDigests.SendDigests [
gs.group.messages.topic.digest.weekly.notifier.WeeklyDigestNotifier ]gs.group.messages.topic.digest.base.notifier.DigestNotifier.notify gs.email.send_email |
Digest on command¶
There is an email-command to turn the digest on. It is triggered
when a group member sends an email to the group with the subject
digest on
(case insensitive).
Sent to: | The person that asked for the digest to be turned on |
---|---|
URL: | gs-group-member-email-settings-digest-on.html in the
context of a group. |
via: | gs.group.member.email.settings.listcommand.DigestCommand gs.group.member.email.settings.notifier.DigestOnNotifier gs.profile.notify.sender.MessageSender |
Digest off command¶
There is an email-command to turn the digest on. It is triggered
when a group member sends an email to the group with the subject
digest on
(case insensitive).
Sent to: | The person that asked for the digest to be turned on |
---|---|
URL: | gs-group-member-email-settings-digest-off.html in the
context of a group. |
via: | gs.group.member.email.settings.listcommand.DigestCommand gs.group.member.email.settings.notifier.DigestOffNotifier gs.profile.notify.sender.MessageSender |
Unknown Email Address¶
A post is received by the mailing list from an unregistered email address. It is the equivalent of the cannot post notification for anonymous people.
Sent to: | The unrecognised email address, which sent the original message. |
---|---|
URL: | Group Page /unknown-email.html |
via: | Products.XWFMailingListManager.XWFMailingList.processMail Products.XWFMailingListManager.XWFMailingList.mail_reply gs.group.member.canpost.unknownemail.Notifier Products.XWFMailingListManager.XWFMailingList.requestMail Products.XWFMailingListManager.XWFMailingList.mail_reply gs.group.member.canpost.unknownemail.Notifier Products.XWFMailingListManager.XWFMailingList.processModeration Products.XWFMailingListManager.XWFMailingList.mail_reply gs.group.member.canpost.unknownemail.Notifier |
Verify Email Address¶
Email addresses must be verified. The verification message is sent from
everywhere that email addresses can be added. It turns out that there are
many places that an email address can be added. The method
gs.profile.email.verify.emailverificationuser.EmailVerificationUser.send_verification
sends the verification message for all higher-level code.
Sent to: | The person who has the new address. |
---|---|
URL: | Profile page |
via: | Anywhere that lets the user add an email address Registering as a new user (or requesting membership as a new user)
gs.profile.signup.base.request_registration.RequestRegistrationForm gs.profile.email.verify.emailverificationuser.EmailVerificationUser gs.profile.email.verify.notify.Notifier gs.profile.notify.sender.MessageSender Adding a new email address, or sending another verification message
during registration
gs.profile.signup.base.verifywait.VerifyWaitForm Adding a new email address
gs.profile.email.settings.settings.ChangeEmailSettingsForm |
Bounce¶
When GroupServer gets an XVERP return it logs a bounce. If the group member has another email address then the user is told of the bounce on the extra address.
Sent to: | The person who has the bouncing address |
---|---|
URL: | Group page |
via: | The Handle bounce page gs.group.member.bounce.handlebounce.HandleBounce gs.group.member.bounce.notifier.UserBounceNotifier gs.profile.notify.sender.MessageSender |
Disabled¶
When an address continually bounces then the address is disabled.
Disabled (user)¶
The user is told of that an address is disabled if he or she has an extra address.
Sent to: | The person who has the bouncing address |
---|---|
URL: | Group page |
via: | The Handle bounce page gs.group.member.bounce.handlebounce.HandleBounce gs.group.member.bounce.notifier.UserDisabledNotifier gs.profile.notify.sender.MessageSender |
Disabled (administrator)¶
The administrator is told when a member has his or her email address disabled because of bouncing.
Sent to: | The administrators of the group that sent the post that bounced back. |
---|---|
URL: | Group page |
via: | The Handle bounce page gs.group.member.bounce.handlebounce.HandleBounce gs.group.member.bounce.notifier.AdminDisabledNotifier gs.profile.notify.sender.MessageSender |
Leave¶
Like joining, the member and the administrators are told that
someone has left a group. A person can leave in two ways: using
the Web or sending an email with the subject unsubscribe
(case insensitive) to the group.
Leave (past member)¶
Sent to: | The person who has just left a group |
---|---|
URL: | Group page |
via: | The Leave page gs.group.member.leave.base.leave.LeaveForm gs.group.member.leave.base.notifier.LeaveNotifier gs.profile.notify.sender.MessageSender |
via: | The Unsubscribe command gs.group.member.leave.command.LeaveCommand gs.group.member.leave.base.notifier.LeaveNotifier gs.profile.notify.sender.MessageSender |
Leave (administrator)¶
Sent to: | The administrators of a group from which a person has just left. |
---|---|
URL: | Group page |
via: | The Leave page gs.group.member.leave.base.leave.LeaveForm gs.group.member.leave.base.notifier.LeftNotifier gs.profile.notify.sender.MessageSender |
via: | The Unsubscribe command gs.group.member.leave.command.LeaveCommand gs.group.member.leave.base.notifier.LeftNotifier gs.profile.notify.sender.MessageSender |
Not a member¶
If someone tries to leave, but the email address in the From
header does not match then a special Not a Member email is sent.
Sent to: | The person who has asked to leave a group |
---|---|
URL: | Groups |
via: | The Unsubscribe command gs.group.member.leave.command.LeaveCommand gs.group.member.leave.command.notifiernonmember.NotMemberNotifier gs.profile.notify.sender.MessageSender |
Profile status¶
The monthly profile-status notification is sent out monthly to everyone.
Sent to: | Every person that is in at least one group in the GroupServer install. |
---|---|
URL: | Site page /gs-profile-status.html |
via: | gs.profile.status.send.script.main gs.group.messages.topic.digest.send.script.send_status Site page
/gs-profile-status.html gs.profile.status.base.hook.SendNotification gs.profile.status.base.notifier.StatusNotifier gs.profile.notify.sender.MessageSender |
Notification Templates¶
These are the old notifications. They are DTML templates: this is the
folder in which Products.CustomUserFolder.Customuser.send_notification
looks to find the notifications passed to it by ID.
Moderation¶
Moderation is a world unto its own, and is badly need of a rewrite [1].
mail_moderated_user
¶
A message to the group is received from a moderated member.
- Sent to
- The moderated member.
- via
Products.XWFMailingListManager.XWFMailingList.processMail
Products.XWFMailingListManager.XWFMailingList.processModeration
Products.CustomUserFolder.CustomUser.send_notification
mail_moderator
¶
A message to the group is received from a moderated member.
- Sent to
- The moderators.
- via
Products.XWFMailingListManager.XWFMailingList.processMail
Products.XWFMailingListManager.XWFMailingList.processModeration
Products.CustomUserFolder.CustomUser.send_notification
[1] | Ticket 249: Rebuild Moderation summarises the problems with moderation, and how to fix it <https://projects.iopen.net/groupserver/ticket/249> |