diff options
| author | fukachan <fukachan> | 2004-04-02 11:56:26 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2004-04-02 11:56:26 +0000 |
| commit | af4bcc0ffd4bbbee715f0c22db1ebd3992b59a14 (patch) | |
| tree | 07e0ed5ffd9b23dcf072bdec8ec4d64043049051 /fml/lib | |
| parent | 22badc0f8dd437f6a97ef5f3766f3a3922b0d632 (diff) | |
| download | fml8-af4bcc0ffd4bbbee715f0c22db1ebd3992b59a14.tar.gz fml8-af4bcc0ffd4bbbee715f0c22db1ebd3992b59a14.tar.bz2 fml8-af4bcc0ffd4bbbee715f0c22db1ebd3992b59a14.zip | |
fix reply_message() system to handle smtp_sender properly.
moify libexec/error to forward mail which smtp sender is fml_owner().
Diffstat (limited to 'fml/lib')
| -rw-r--r-- | fml/lib/FML/Process/Error.pm | 12 | ||||
| -rw-r--r-- | fml/lib/FML/Process/Kernel.pm | 59 |
2 files changed, 45 insertions, 26 deletions
diff --git a/fml/lib/FML/Process/Error.pm b/fml/lib/FML/Process/Error.pm index c4566143..2693c937 100644 --- a/fml/lib/FML/Process/Error.pm +++ b/fml/lib/FML/Process/Error.pm @@ -3,7 +3,7 @@ # Copyright (C) 2002,2003,2004 Ken'ichi Fukamachi # All rights reserved. # -# $FML: Error.pm,v 1.41 2004/03/12 11:45:51 fukachan Exp $ +# $FML: Error.pm,v 1.42 2004/03/13 06:03:24 fukachan Exp $ # package FML::Process::Error; @@ -303,18 +303,20 @@ sub _forward_error_message { my ($curproc) = @_; my $config = $curproc->config(); - my $maintainer = $config->{ maintainer }; + my $fml_owner = $curproc->fml_owner_address(); + my $maintainer = $config->{ maintainer } || $fml_owner; my $maps = $config->{ maintainer_recipient_maps } || ''; my $msg = $curproc->incoming_message(); if ($maps) { my $maps = $config->get_as_array_ref('maintainer_recipient_maps'); my $msg_args = { - sender => $maintainer, + smtp_sender => $fml_owner, recipient_maps => $maps, header => { - from => $maintainer, - to => $maintainer, + sender => $fml_owner, + from => $fml_owner, + to => $maintainer, }, }; $curproc->reply_message($msg, $msg_args); diff --git a/fml/lib/FML/Process/Kernel.pm b/fml/lib/FML/Process/Kernel.pm index 048d7fb9..fc038779 100644 --- a/fml/lib/FML/Process/Kernel.pm +++ b/fml/lib/FML/Process/Kernel.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: Kernel.pm,v 1.221 2004/03/20 16:27:01 fukachan Exp $ +# $FML: Kernel.pm,v 1.222 2004/03/23 06:34:16 fukachan Exp $ # package FML::Process::Kernel; @@ -1593,14 +1593,16 @@ sub _array_is_different sub _append_message_into_queue { my ($curproc, $msg, $rm_args, $rcpt, $rcpt_maps, $hdr, $charsets) = @_; - my $pcb = $curproc->pcb(); - my $category = 'reply_message'; - my $class = 'queue'; - my $rarray = $pcb->get($category, $class) || []; + my $pcb = $curproc->pcb(); + my $category = 'reply_message'; + my $class = 'queue'; + my $rarray = $pcb->get($category, $class) || []; + my $smtp_sender = $rm_args->{ smtp_sender } || ''; $rarray->[ $#$rarray + 1 ] = { message => $msg, type => ref($msg) ? ref($msg) : 'text', + smtp_sender => $smtp_sender, recipient => $rcpt, recipient_maps => $rcpt_maps, header => $hdr, @@ -1620,15 +1622,17 @@ sub _append_message_into_queue sub _append_message_into_queue2 { my ($curproc, $msg, $rm_args, $rcpt, $rcpt_maps, $hdr, $charsets) = @_; - my $pcb = $curproc->pcb(); - my $category = 'reply_message'; - my $class = 'queue'; - my $rarray = $pcb->get($category, $class) || []; + my $pcb = $curproc->pcb(); + my $category = 'reply_message'; + my $class = 'queue'; + my $rarray = $pcb->get($category, $class) || []; + my $smtp_sender = $rm_args->{ smtp_sender } || ''; for my $rcpt (@$rcpt) { $rarray->[ $#$rarray + 1 ] = { message => $msg, type => ref($msg) ? ref($msg) : 'text', + smtp_sender => $smtp_sender, recipient => [ $rcpt ], recipient_maps => [], header => $hdr, @@ -1640,6 +1644,7 @@ sub _append_message_into_queue2 $rarray->[ $#$rarray + 1 ] = { message => $msg, type => ref($msg) ? ref($msg) : 'text', + smtp_sender => $smtp_sender, recipient => [], recipient_maps => [ $map ], header => $hdr, @@ -1659,16 +1664,21 @@ sub _append_message_into_queue2 sub _reply_message_recipient_keys { my ($curproc, $msg) = @_; - my $pcb = $curproc->pcb(); - my $category = 'reply_message'; - my $class = 'queue'; - my $rarray = $pcb->get($category, $class) || []; - my %rcptattr = (); - my %rcptlist = (); - my %rcptmaps = (); - my %hdr = (); + my $pcb = $curproc->pcb(); + my $category = 'reply_message'; + my $class = 'queue'; + my $rarray = $pcb->get($category, $class) || []; + my %rcptattr = (); + my %rcptlist = (); + my %rcptmaps = (); + my %hdr = (); + my %smtp_sender = (); my ($rcptlist, $rcptmaps, $key, $type) = (); + # mark identifier based on recipients into each message. messages + # with same identifier are aggregated into one mail message later. + # XXX-TODO: we should identify messages based on {sender, recipients} ? + # XXX-TODO: it may be annoying in some cases... hmm ;-) for my $m (@$rarray) { if (defined $m->{ recipient } ) { $rcptlist = $m->{ recipient }; @@ -1679,10 +1689,11 @@ sub _reply_message_recipient_keys $rcptlist{ $key } = $rcptlist; $rcptmaps{ $key } = $rcptmaps; $hdr{ $key } = $m->{ header }; + $smtp_sender{ $key } = $m->{ smtp_sender } || ''; } } - return ( \%rcptattr, \%rcptlist, \%rcptmaps, \%hdr ); + return ( \%rcptattr, \%rcptlist, \%rcptmaps, \%hdr, \%smtp_sender ); } @@ -2041,7 +2052,8 @@ sub inform_reply_messages # 2. pick up messages for it/them. # merge messages by types if needed. # - my ($attr, $list, $maps, $hdr) = $curproc->_reply_message_recipient_keys(); + my ($attr, $list, $maps, $hdr, $smtp_sender) = + $curproc->_reply_message_recipient_keys(); my $need_multipart = 0; for my $key (keys %$list) { @@ -2054,6 +2066,7 @@ sub inform_reply_messages recipient_maps => $maps->{ $key }, recipient_attr => $attr, header => $hdr->{ $key }, + smtp_sender => $smtp_sender->{ $key }, }); } } @@ -2085,6 +2098,7 @@ sub queue_in my $rcptmaps = []; my $msg = ''; my $hdr_to = ''; + my $smtp_sender = ''; use Mail::Message::Date; my $_nowdate = new Mail::Message::Date time; @@ -2096,7 +2110,7 @@ sub queue_in my $h = $optargs->{ header }; my $c = $optargs->{ header }->{ 'content-type' }; - # override parameters + # override header parameters $sender = $h->{'sender'} if defined $h->{'sender'}; $subject = $h->{'subject'} if defined $h->{'subject'}; $hdr_to = $h->{'to'} if defined $h->{'to'}; @@ -2106,6 +2120,9 @@ sub queue_in $rcptlist = $a->{ recipient_list } if defined $a->{'recipient_list'}; $rcptmaps = $a->{ recipient_maps } if defined $a->{'recipient_maps'}; + # override smtp_sender + $smtp_sender = $optargs->{ smtp_sender } || ''; + # we need multipart style or not ? if (defined $a->{'recipient_attr'}) { my $attr = $a->{ recipient_attr }->{ $rcptkey }; @@ -2303,7 +2320,7 @@ sub queue_in }; if (defined $queue) { - $queue->set('sender', $sender); + $queue->set('sender', $smtp_sender || $sender); if ($rcptlist) { $queue->set('recipients', $rcptlist); |
