[ic] email-raw usertag broken for Net::SMTP FIX

Peter peter at pajamian.dhs.org
Sun May 1 19:30:14 EDT 2005



On 05/01/05 07:30, Mike Heins wrote:
> Quoting Peter (peter at pajamian.dhs.org):
> 
>>On 04/30/05 20:04, Mike Heins wrote:
>>
>>>>One thing I failed to mention before is that my patch fails to account 
>>>>for the possibility of folded headers.  I didn't think too much of it 
>>>>because I don't anticipate anyone using the email-raw tag to send emails 
>>>>out with folded headers, but if you want to make it work with then an 
>>>>additional regexp to unfold them should fix it.  Something like the 
>>>>following before the split line should do it:
>>>>
>>>>$headers =~ s/\r?\n([ \t])/$1/s;
>>>
>>>
>>>It would seem to make sense to account for it. Can't we do so simply by
>>>joining the @header array with a \n without stripping the headers
>>>in send_mail?
>>
>>I never bothered to look fully into the details of how send_mail works 
>>with Net::SMTP.  That said...
>>
>>When I patched email-raw I looked at send_mail to see how to use it and 
>>it checks the first arg to see if it's a ref and if it is it assumes 
>>that the first arg is an array ref of all the headers and the second arg 
>>the email body.  If the first arg is not a ref then it is assumed to be 
>>the To: recipient for the email.  so by joining them as yuou suggest 
>>would just make send_mail assume that all those headers are the 
>>recipient and won't work.
> 
> 
> I did mean in send_mail().
> 
> 
>>If you want to hack up send_mail to work 
>>differently then be my guest, but i would want to caution against doing 
>>so in a way that might break existing functionality.
> 
> 
> That is always the worry. 8-) But I think we can safely do this:
> 
>        for(my $i = $#$head; $i > 0; $i--) {
>            if($head->[$i] =~ /^\s/) {
>                my $new = splice @$head, $i, 1;
>                $head->[$i - 1] .= "\n$new";
>            }
>        }

That should work, but it doesn't make sense to me to do it that way. 
Let me explain...

$head is supposed to be an array ref of individual headers.  It would 
seem to me that passing parts of headers in individual elements would be 
a broken usage of the array.  It doesn't make sense to fix this in 
send_mail as send_mail should not be respoonsible for fixing the broken 
array that is passed to it from other functions.  send_mail should be 
able to expect that the array passed to it is good.  So it makes more 
sense to me to fix it in the email-raw usertag (and other usertags and 
functions that do something similar) so they don't pass a broken array 
to send_mail.

>>>One reason I had been avoiding all this is that the send_mail routine
>>>is really an incredibly bad hack. It is some of the original code
>>>in Vend 0.2, mangled year after year to wedge in more stuff. I had
>>>always imagined I was going to make it reasonable, but instead we
>>>ended up with send_mail, mail.coretag, email.coretag, email-raw.coretag,
>>>etc.
>>
>>Sheesh, I never realised there was a mail tag as well.  Maybe the email 
>>and email-raw usertags should just be rewritten as stubs of the mail tag 
>>since it seems to combine the functionality of both.
> 
> 
> This is probably so. And if I add the MIME stuff then everyone will
> be happy.
> 
> 
>>I haven't checked yet, but can I assume that the mail tag works fine 
>>with Net::SMTP?
> 
> It uses send_mail().

That's good.  It makes sense to me that all outbound email should go 
through send_mail to avoid code duplication.

Peter


More information about the interchange-users mailing list