[Mimedefang] Yahoo! DMARC and smfi_chngfrom was Yahoo DMARC

Kevin A. McGrail KMcGrail at PCCC.com
Tue Apr 15 12:04:35 EDT 2014


On 4/15/2014 9:52 AM, David F. Skoll wrote:
> On Tue, 15 Apr 2014 09:35:19 -0400
> "Kevin A. McGrail" <KMcGrail at PCCC.com> wrote:
>
>> - All the various recipients that acknowledge p=reject reject the
>> mail as forged
> That's the part I don't understand.  Mail from my list will not have
> a yahoo.com envelope sender.  And if I remove the DKIM header, what basis
> could third parties possibly have for considering the email to be forged?
Ignoring the why, I can tell you we have had issues with emails from 
Yahoo! users on the mailing list causing bounces back from yahoo.com, 
email.msn.com, msn.com, hotmail.com, sbcglobal.net, live.com, att.net, 
pacbell.net, comcast.net and likely more.
> Anyway, for now, I'm simply going to ban yahoo.com users from posting
> to our mailing lists until I sort this out.
Makes sense to me.

For those who care, attached is my latest version of the code in MD that 
I used to rewrite Yahoo! emails to mailing lists for MIMEDefang in 
filter_end.

We use it to identify mailing lists, exempt administrivia messages and 
modify messages from yahoo! users to a generic do-not-reply address 
which we then manually moderate.  It also notifies the Yahoo! sender and 
recommends the use a different email company (Gmail in our case), etc.

regards,
KAM

-------------- next part --------------
# Patch to rewrite Yahoo! emails to mailing lists for MIMEDefang in filter_end

    #YAHOO DMARC RESOLUTION
    foreach $recip (@Recipients) {
      # BLOCK IF FROM YAHOO BECAUSE THEY SET DMARC TOO STRICTLY
      # http://www.pcworld.com/article/2141120/yahoo-email-antispoofing-policy-breaks-mailing-lists.html
      
      # If Sender is Yahoo and recipient is a mailing list - NOTE Only Yahoo.com rejects as of 4/14 so not hitting |rocketmail\.com|ymail\.com|yahoo\.com\.au|yahoo\.ca|yahoo\.co\.uk
      # exclude the admnistrivia addresses like admin confirm, join, leave, etc.
      if ($Sender =~ /\@yahoo\.com>?$/i 

          and

         ($recip =~ m/\@mailman\./i or 

		#... more logic for identifying your mailing lists goes in the section ...

          and

         ($recip !~ /\-(admin|bounces|confirm|join|leave|owner|request|subscribe|unsubscribe)\@/i)

         ) {
        my ($container, $parser, $original, $report2, $yahoo_reject_notice, $sender);
    
        # NOTIFY SENDER AND REWRITE THE SENDER TO A DO-NOT-REPLY ADDRESS
        md_syslog('warning', "Modifying Yahoo! message to mailing list due to DMARC - $recip - $Sender - $Subject");
        $yahoo_reject_notice = "Your email to $recip was modified due to a change Yahoo! implemented which causes your email on mailing lists to be flagged incorrectly as a forgery.  

In order to permit your email through to the mailing list, we have rewritten the From address to a do-not-reply address.  Depending on the list configuration, you may not receive replies and will need to monitor the list.  Additionally, this may delay your email as it will require manual intervention by the list moderator to approve.

We apologize for the inconvenience but the cause of the issue rests squarely and solely on Yahoo!  We recommend you consider a free Google account available at http://www.gmail.com/.  For more technical information, please see: http://www.pcworld.com/article/2141120/yahoo-email-antispoofing-policy-breaks-mailing-lists.html             
    
Sincerely,
    
Kevin A. McGrail
President, PCCC";


        # SAVE NOTIFY SETTINGS
        my ($save_NotifyNoPreamble, $save_NotifySenderSubject, $save_DaemonAddress);
        $save_NotifySenderSubject = $NotifySenderSubject;
        $save_NotifySenderSubject = $NotifySenderSubject;
        $save_DaemonAddress = $DaemonAddress;

        #CUSTOMIZE NOTIFICATION PARAMS
        $sender = 'do-not-reply at pccc.com';
        $DaemonAddress = 'do-not-reply at pccc.com';
        $NotifyNoPreamble = 1;
        $NotifySenderSubject = "Important Mailing List Notification re:[$Subject]";

        #SEND NOTIFICATION
        action_notify_sender("$yahoo_reject_notice\n");

        #TEMPORARILY REMOVE MAILING LIST
        #delete_recipient($recip); - NO LONGER NEEDED WITH REWRITE OF FROM

        #Possible Improvement is to do a DKIM/SPF/etc. check on the email before rewriting to minimize forgeries getting farther in the process.

        #CHANGE SENDER ON ENVELOPE
        change_sender($sender);
 
        #CHANGE SENDER ON FROM
        if (&check_header(header=>'From')) {
          action_delete_all_headers('From');
          action_delete_all_headers('Reply-To');
	  action_add_header("From",'"Yahoo! Modified Email" <$sender>');
          action_add_header("Reply-To", "<$Sender>");
        }

        # RESTORE NOTIFY SETTINGS 
        $NotifySenderSubject = $save_NotifySenderSubject;
        $NotifySenderSubject = $save_NotifySenderSubject;
        $DaemonAddress = $save_DaemonAddress;
      }
    }
    #END YAHOO DEMARC


# check the HEADERS file and return any instances of a specific parameter header (case insensitive on header name)
sub check_header {
  my (%params) = @_;
  my ($filehandle, $preslurp, $contents, $output);

  $params{'header'} || return undef;

  $filehandle = new IO::File('< ./HEADERS') or return undef;
  
  while (<$filehandle>) {
    if ($_ =~ /^$params{'header'}:/i) {
      $output .= $_;
    }
  }

  close ($filehandle);

  return $output;

}


More information about the MIMEDefang mailing list