So Yahoo's silly DMARC policy, which they introduced in April of 2014, bit me today.
I setup a mailing list for someone for a group they volunteered with, sent out a couple of test messages to ensure everything was working, and handed it over.
Everything was working until they mentioned that they didn't get a message from the main organizer of the group. The only reason they knew it was even sent was because I was subscribed to the list myself, and mentioned to them in passing "Oh, so-and-so sent an email" when I first saw the message come through on my phone.
A few hours later, when they were sitting at their computer, they mentioned that they hadn't received the aforementioned email from the organizer. A little digging revealed the mail was in the GMail spam folder. A little further digging revealed that the original poster was using a Yahoo email address.
I'm not going to go into why I think Yahoo's policy is dumb. They have a right to publish their DMARC policies as they see fit. It does however break electronic mailing lists, and apparently Yahoo doesn't care too much about that.
So the rest of this post is about how we dealt with this problem.
My first inclination was to ask the user to use an alternate (GMail) address instead of their Yahoo one. But I rejected this because this was a nontechnical user on a nontechnical list and I didn't want to inconvenience them for their ESP's stupidity.
My next option was to turn on list munging for my list. This would rewrite the From: line of all the messages sent to the list.
So something like this:
From: Joe Blow <jblow@yahoo.com> To: Foo List <foo@example.org>
would turn into something like this:
From: Joe Blow via foo <foo@example.org> To: Foo List <foo@example.org>
I knew this was possible with GNU Mailman, and the setting itself is pretty simple:
from_is_list = 1
But the problem is that that this munges everyone's address, not just those from yahoo.com. It was then I discovered these two gems:
dmarc_quarantine_moderation_action = 1 dmarc_moderation_action = 1
Basically this means that if dmarc_quarantine_moderation_action is turned on, then dmarc_moderation_action is taken on sites that basically have p=reject. In this case, the 1 means to munge. So basically, munging is done only on sites with this DMARC policy.
These features are available in GNU Mailman version 2.18 and greater.
Major thanks to the GNU Mailman devs for implementing this—they did it pretty quickly after the start of this fiasco too, judging by the release dates.