add display_name to outgoing email.

In an effort to improve the formatting on outgoing emails from the
renewal script, add the display_name to the To: field.

I'm not completely happy with what the MIME encoding is doing here.
Specifically, it chops the line on the < of <email@example.org> so you
get this:

"A very long name that leads to wrapping of the MIME encoded line" <
 email@example.org>

As I read https://www.ietf.org/rfc/rfc2822.txt, it violates this SHOULD:

  Note: Though structured field bodies are defined in such a way that
    folding can take place between many of the lexical tokens (and even
    within some of the lexical tokens), folding SHOULD be limited to
    placing the CRLF at higher-level syntactic breaks.  For instance, if
    a field body is defined as comma-separated values, it is recommended
    that folding occur after the comma separating the structured items
    in preference to other places where the field could be folded, even
    if it is allowed elsewhere.

Brett and I decided to leave it for now and go with it.
This commit is contained in:
Bradley M. Kuhn 2016-12-02 12:56:53 -08:00
parent 0b05ac3c5c
commit 522df6bbfa

View file

@ -2,6 +2,8 @@
use strict; use strict;
use warnings; use warnings;
use Encode;
use utf8;
use autodie qw(open close); use autodie qw(open close);
@ -116,11 +118,22 @@ foreach my $supporterId (@supporterIds) {
} }
close MESSAGE; close MESSAGE;
my $emailTo = join(' ', @emails); my $emailTo = join(' ', @emails);
my $displayName = $sp->getDisplayName($supporterId);
my $fullEmailLine = "";
foreach my $email (@emails) {
$fullEmailLine .= ", " if ($fullEmailLine ne "");
my $line = "";
if (defined $displayName) {
$line .= "\"$displayName\" ";
}
$line .= "<$email>";
$fullEmailLine .= Encode::encode("MIME-Header", $line);
}
open(SENDMAIL, "|/usr/lib/sendmail -f \"$FROM_ADDRESS\" -oi -oem -- $emailTo $FROM_ADDRESS") or open(SENDMAIL, "|/usr/lib/sendmail -f \"$FROM_ADDRESS\" -oi -oem -- $emailTo $FROM_ADDRESS") or
die "unable to run sendmail: $!"; die "unable to run sendmail: $!";
print STDERR "Sending to $supporterId at $emailTo who expires on $expiresOn\n"; print STDERR "Sending to $supporterId at $emailTo who expires on $expiresOn\n";
print SENDMAIL "To: ", join(', ', @emails), "\n"; print SENDMAIL "To: $fullEmailLine\n";
print SENDMAIL @message; print SENDMAIL @message;
close SENDMAIL; close SENDMAIL;