[Catalyst] Catalyst::Plugin::Email and utf-8
Bill Moseley
moseley at hank.org
Mon Apr 17 19:27:05 CEST 2006
I'm emailing content that's in utf-8, and when using the Email plugin
I would get "Wide character" errors when Net::Cmd was writing via
SMTP.
First question:
Should the Email plugin look for utf-8 in the "body" and change the
encoding? Is that the realm of the plugin or should that be in client
code?
In my application base class I'm now doing:
sub email {
my $c = shift;
my $email = ref $_[0] ? shift : {@_};
if ( $email->{body} && utf8::is_utf8( $email->{body} ) ) {
$email->{body} = encode( 'utf8', $email->{body} );
$email->{attributes}{encoding} = 'base64';
$email->{attributes}{charset} = 'utf-8';
}
$c->SUPER::email( %$email );
}
which adds these headers:
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
and encodes the body as base64.
Would that be useful as a standard part of the Email plugin?
Second question:
What is the opinion on how to send the mail? The default is to use SMTP
to localhost.
In general, I prefer to use sendmail (qmail-inject/exim/postfix)
to inject mail via a pipe. But, using the sendmail interface has its
own problems, such as using -f to set the sender and configuring to be a
"trusted" user, and potentially forking multiple times when sending a
number of emails. Also seem more likely with SMTP that sending email
might end up delayed.
Sending multiple emails with $c->email doesn't seem great, either, as
each is a separate smtp connection. I'm not sending that many emails
at once (30 or 40), still it doesn't seem ideal to do that in the
middle of a http request.
--
Bill Moseley
moseley at hank.org
More information about the Catalyst
mailing list