Publish::Gmailを1記事/1通にするパッチ

まだ作り掛けでおおっぴらにするのも恥ずかしいが、間違っている箇所を指摘してもらえることを期待して。テンプレートにはまだ対していない。


Plagger/Plugin/Publish/Gmail.pm

sub notify {
my($self, $context, $args) = @_;
for my $entry ($args->{feed}->entries) {
my $feed_title = $args->{feed}->title;
$feed_title =~ tr/,//d;
my $author = $args->{feed}->author;
my $subject = $entry->title || '(no-title)';
my $entry_link = $entry->link || $args->{feed}->link;
my $body = $entry->body;
$body = encode("utf-8", $body);
#print $body;
$body =~ s/\t//g; # Tabを削除
$body =~ s/<br\ ?\/?>//gi; # <br />を削除
$body =~ s/\n{3,}/\n\n/g; # 2個以上の改行は削除
$body =~ s/\n/<br \/>/g; # 改行を<br />に変換
$body =~ s/<br \/></</g; # 文区切りの<br />以外は削除

my $cfg = $self->conf;
$context->log(warn => "Sending $subject to $cfg->{mailto}");

my $now = Plagger::Date->now(timezone => $context->conf->{timezone});
my $msg;
if($cfg->{charset}){
if($cfg->{filter}){
open(TMP, "> /tmp/$$.tmp");
print TMP $body;
close(TMP);

$body = `cat /tmp/$$.tmp | $cfg->{filter}`;
unlink("/tmp/$$.tmp");
}
$body = "link: ".$entry_link."\n\n".$body;
$body = "title: ".encode("utf-8",$entry->title)."\n".$body;
from_to($body, 'utf-8', $cfg->{charset});
$msg = MIME::Lite->new(
Date => $now->format('Mail'),
From => encode('MIME-Header', qq($feed_title <$cfg->{mailfrom}>)),
To => $cfg->{mailto},
Subject => encode('MIME-Header', $subject),
Data => $body,
);
$msg->attr('content-type.charset' => $cfg->{charset});
} else {
$body = "<div class=\"url\"><strong>link: </strong><a href=\"".$entry_link."\">".$entry_link."</a></div><br />".$body;
$body = "<div class=\"title\"><strong>title: </strong>".encode("utf-8",$entry->title)."<br />".$body;
$msg = MIME::Lite->new(
Date => $now->format('Mail'),
From => encode('MIME-Header', qq($feed_title <$cfg->{mailfrom}>)),
To => $cfg->{mailto},
Subject => encode('MIME-Header', $subject),
Type => 'multipart/related',
);
$msg->attach(
Type => 'text/html; charset=utf-8',
Data => $body,
);
$msg->add("X-Tag" => $entry->tags);
}

my $route = $cfg->{mailroute} || { via => 'smtp', host => 'localhost' };
if ($route->{via} eq 'smtp_tls') {
$self->{tls_args} = [
$route->{host},
user => $route->{username},
Password => $route->{password},
Port => $route->{port} || 587,
];
$msg->send_by_smtp_tls(@{ $self->{tls_args} });
} else {
my @args = $route->{host} ? ($route->{host}) : ();
$msg->send($route->{via}, @args);
}
sleep 2;
}

}