[ic] Bareword error in email.tag

Josh Lavin josh at kdw.us
Fri Aug 20 17:36:47 UTC 2010

On 08/18/2010 09:34 AM, Josh Lavin wrote:
> Using the latest Interchange nightly, along with the
> MINIVEND_DISABLE_UTF8 environment variable, when starting IC the
> email.tag threw:
> Bareword "Encode::PERLQQ" not allowed while "strict subs" in use.
> I made the following change which allows Interchange to start just fine.
> Tested with a regular email, but did not test with UTF8 on...
> --- a/code/UserTag/email.tag
> +++ b/code/UserTag/email.tag
> @@ -23,7 +23,7 @@ BEGIN {
> sub utf8_to_other {
> my ($string, $encoding) = @_;
> - return $string unless defined Encode::PERLQQ; # nop if no Encode
> + return $string unless defined Encode::PERLQQ(); # nop if no Encode
> unless(Encode::is_utf8($string)){
> $string = Encode::decode('utf-8', $string);
> http://github.com/jlavin/interchange/commit/cc04b8d886d77b04c1f848b67401e523f2f1b26c

Additionally, I found that the latest email.tag had some changes which 
caused all plain-text emails to be MIME-encoded.

It seems that the author wanted to clear out anything in $opt->{attach}, 
but this caused plain-text emails to run through the ATTACH routine, 
making them "Content-Type: multipart/mixed".

A side effect was that if the "To" was left blank (mistakenly or from a 
UI order), an attempt was still made to deliver the message, but a blank 
"To" became a "To: ARRAY at ..." (causing bounces). The previous version of 
mail.tag did not suffer from this (I think because plain-text messages 
did not run through ATTACH), and Sendmail would fail silently (debug.log 
would report "No recipient addresses found in header").

The change below fixes both of these problems, but I don't know if the 
author had something else in mind with the line I removed. Regardless, I 
have tested this change with plain-text and HTML emails, and in my 
opinion this is a needed fix.

         # force utf8 email through MIME as attachment
         unless (($opt->{attach} || $opt->{html}) && $utf8){
-               $opt->{attach} = [()];
                 $opt->{body_mime} = $opt->{mimetype};
                 $body = utf8_to_other($body, 'utf-8');


Josh Lavin
Perusion -- Expert Interchange Consulting    http://www.perusion.com/

More information about the interchange-users mailing list