1 |
|
# $Header$ |
2 |
|
# $RCSfile$ $Source$ |
3 |
use strict; |
use strict; |
4 |
use vars qw($MYNAME $VERSION); |
use vars qw($MYNAME $MYVERSION $VERSION); |
5 |
$MYNAME = 'send.pl'; $VERSION = '2.4'; |
$MYNAME = $0; |
6 |
|
$VERSION=do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
7 |
|
$MYVERSION = qq{2.5.$VERSION}; |
8 |
use lib qw(/home/wakaba/temp/msg/); |
use lib qw(/home/wakaba/temp/msg/); |
9 |
use Message::Entity; |
use Message::Entity; |
10 |
use Message::Field::Date; |
use Message::Field::Date; |
17 |
$server{nntp} ||= 'suika.fam.cx'; |
$server{nntp} ||= 'suika.fam.cx'; |
18 |
my $debug_msg_log = 0; |
my $debug_msg_log = 0; |
19 |
|
|
|
my $myhostname = 'send-msg'; |
|
|
|
|
20 |
open LOG, '>> send.slog'; binmode LOG; |
open LOG, '>> send.slog'; binmode LOG; |
21 |
my $date = Message::Field::Date->new (zone => [+1, 9, 0]); |
my $date = Message::Field::Date->new (zone => [+1, 9, 0]); |
22 |
$date->unix_time (time); |
$date->unix_time (time); |
55 |
my $header = $msg->header; |
my $header = $msg->header; |
56 |
|
|
57 |
## Envelope From, To |
## Envelope From, To |
58 |
my $eFrom = $header->field ('x-envelope-from')->addr_spec; |
my $eFrom = $msg->sender; |
59 |
my $resent = $header->field ('resent-from')->addr_spec; |
my $resent = $header->field_exist ('resent-from'); |
60 |
if ($resent) { |
my @eTo = $msg->destination; |
|
$eFrom ||= $resent; |
|
|
} else { |
|
|
$eFrom ||= $header->field ('from')->addr_spec; |
|
|
} |
|
|
my @eTo = $header->field ('x-envelope-to')->addr_spec; |
|
61 |
my ($send_mail,$post_news) = (0, 0); |
my ($send_mail,$post_news) = (0, 0); |
62 |
if ($resent) { |
unless ($resent) { |
|
@eTo =($header->field ('resent-to')->addr_spec, |
|
|
$header->field ('resent-cc')->addr_spec, |
|
|
$header->field ('resent-bcc')->addr_spec) if $#eTo < 0; |
|
|
} else { |
|
|
@eTo =($header->field ('to')->addr_spec, |
|
|
$header->field ('cc')->addr_spec, |
|
|
$header->field ('bcc')->addr_spec) if $#eTo < 0; |
|
63 |
$post_news = 1 if $header->field_exist ('newsgroups'); |
$post_news = 1 if $header->field_exist ('newsgroups'); |
64 |
} |
} |
65 |
$send_mail = 1 if @eTo > 0; |
$send_mail = 1 if @eTo > 0; |
111 |
if ($Jcode::VERSION) { |
if ($Jcode::VERSION) { |
112 |
$ua->add ('Jcode.pm' => $Jcode::VERSION); |
$ua->add ('Jcode.pm' => $Jcode::VERSION); |
113 |
} |
} |
114 |
#my $jv=do{my @r=($jcode::rcsid=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
if ($jcode::rcsid) { |
115 |
$ua->add ('jcode.pl' => ['',$jcode::rcsid]); |
$ua->add_rcs ($jcode::rcsid); |
116 |
$ua->add ($MYNAME => $VERSION); |
} |
117 |
|
$ua->add_rcs (q$Date$, name => $MYNAME, version => $MYVERSION, -prepend => 1); |
118 |
|
|
119 |
$header->delete (qw(bcc date-received relay-version resent-bcc status x-envelope-from x-envelope-to xref)); |
$header->delete (qw(date-received relay-version status x-envelope-from x-envelope-to xref)); |
120 |
|
$header->option (field_sort => 'good-practice') unless $resent; |
121 |
|
|
122 |
my %sopt = ( |
my %sopt = ( |
123 |
-fill_date => 0, -fill_msgid => 0, |
-fill_date => 0, -fill_msgid => 0, |
126 |
my ($msg_mail, $msg_news); |
my ($msg_mail, $msg_news); |
127 |
if ($send_mail) { |
if ($send_mail) { |
128 |
$msg_mail = $msg->stringify (-format => 'mail-rfc2822', %sopt); |
$msg_mail = $msg->stringify (-format => 'mail-rfc2822', %sopt); |
|
#$msg_mail =~ s/\x0D\x0A|\x0D|\x0A/\x0D\x0A/gs; |
|
129 |
$msg_mail =~ s/\x0D\x0A\./\x0D\x0A../gs; |
$msg_mail =~ s/\x0D\x0A\./\x0D\x0A../gs; |
|
#$msg_mail =~ s/^(?:\x0D\x0A)+//; |
|
|
#$msg_mail =~ s/(?:\x0D\x0A)*$/\x0D\x0A/; |
|
130 |
$msg_mail .= "\x0D\x0A.\x0D\x0A"; |
$msg_mail .= "\x0D\x0A.\x0D\x0A"; |
131 |
} |
} |
132 |
if ($post_news) { |
if ($post_news) { |
133 |
my %rename; |
my %rename; |
134 |
for (qw(cc complaints-to nntp-posting-date injector-info nntp-posting-host posting-version received to x-complaints-to x-trace)) { |
for (qw(cc complaints-to injector-info received to x-complaints-to x-trace)) { |
135 |
|
$rename{$_} = 'original-'.$_; |
136 |
|
} |
137 |
|
for (qw(nntp-posting-date nntp-posting-host posting-version)) { |
138 |
$rename{$_} = 'x-'.$_; |
$rename{$_} = 'x-'.$_; |
139 |
} |
} |
140 |
$header->rename (%rename); |
$header->rename (%rename); |
141 |
$msg_news = $msg->stringify (-format => 'news-usefor', %sopt); |
$msg_news = $msg->stringify (-format => 'news-usefor', %sopt); |
|
#$msg_news =~ s/\x0D\x0A|\x0D|\x0A/\x0D\x0A/gs; |
|
142 |
$msg_news =~ s/\x0D\x0A\./\x0D\x0A../gs; |
$msg_news =~ s/\x0D\x0A\./\x0D\x0A../gs; |
|
#$msg_news =~ s/^(?:\x0D\x0A)+//; |
|
|
#$msg_news =~ s/(?:\x0D\x0A)*$/\x0D\x0A/; |
|
143 |
$msg_news .= "\x0D\x0A.\x0D\x0A"; |
$msg_news .= "\x0D\x0A.\x0D\x0A"; |
144 |
} |
} |
145 |
|
|
288 |
|
|
289 |
sub Send::SMTP::Connect (;%) { |
sub Send::SMTP::Connect (;%) { |
290 |
my %o = @_; |
my %o = @_; |
291 |
my $myname = $o{myname} || 'send.pl.'.$server{smtp}; |
my $myname = $o{myname} || &Message::Util::get_host_fqdn || 'send.pl.'.$server{smtp}; |
292 |
pmsg('connecting to '.$server{smtp}.':25...'); |
pmsg('connecting to '.$server{smtp}.':25...'); |
293 |
socket (SMTP, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]); |
socket (SMTP, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]); |
294 |
my $aton = inet_aton($server{smtp}); |
my $aton = inet_aton($server{smtp}); |
327 |
$Send::NNTP::connected = 1; |
$Send::NNTP::connected = 1; |
328 |
} |
} |
329 |
|
|
|
sub __fw2hw ($) { |
|
|
my $s = shift; |
|
|
jcode::tr(\$s, "\xa3\xb0-\xa3\xb9\xa3\xc1-\xa3\xda\xa3\xe1-\xa3\xfa\xa1\xf5". |
|
|
"\xa1\xa4\xa1\xa5\xa1\xa7\xa1\xa8\xa1\xa9\xa1\xaa\xa1\xae". |
|
|
"\xa1\xb0\xa1\xb2\xa1\xbf\xa1\xc3\xa1\xca\xa1\xcb\xa1\xce". |
|
|
"\xa1\xcf\xa1\xd0\xa1\xd1\xa1\xdc\xa1\xf0\xa1\xf3\xa1\xf4". |
|
|
"\xa1\xf6\xa1\xf7\xa1\xe1\xa2\xaf\xa2\xb0\xa2\xb2\xa2\xb1". |
|
|
"\xa1\xe4\xa1\xe3\xA1\xC0\xA1\xA1" => |
|
|
'0-9A-Za-z&,.:;?!`^_/|()[]{}+$%#*@=\'"~-><\\ '); |
|
|
$s; |
|
|
} |
|
|
|
|
330 |
END { |
END { |
331 |
Send::SMTP::Close() if $Send::SMTP::connected; |
Send::SMTP::Close() if $Send::SMTP::connected; |
332 |
Send::NNTP::Close() if $Send::NNTP::connected; |
Send::NNTP::Close() if $Send::NNTP::connected; |