So this is basically three bugs: 1 - Multiple shout-outs generates multiple notifications 2 - Dismissing one dismisses them all, this shows they probably share the same ID or the process for dismissing is independent of the notifications themselves (looks up by post?), not a bad bug really but still counts 3 - It emails for each notification, with no rate-limiting in place or perhaps a digest system that will wait x number of minutes then send a combined email. Potential solution: Have a database table with post ID, user to notify, and either record if a notification has been sent with a boolean or if possible using the notification's ID. Before a notification is sent it should lookup in the table about whether to proceed or not, and ideally silently fail. This should be a background task on the server, so the user isn't stuck waiting whilst they are taken to the next page; and these records should persist across edits to avoid people being able to remove and re-add shoutouts.
Easier solution - simply don't send more than X notifications/emails from any submission or comment, regardless. Where X is (say) 10 or fewer.