Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wide character in print at Mail/Mailer/rfc822.pm line 23.

32 views
Skip to first unread message

adamrw

unread,
Oct 23, 2013, 9:04:07 AM10/23/13
to
Witam
Napisałem skrypt, który wyciąga dane z bazy i wysyła na mail. Wykonuje się wszystko OK. Mail dociera, polskie znaki są, ale wyświetla na konsolę błąd
Wide character in print at /usr/local/lib/perl5/site_perl/5.10.1/Mail/Mailer/rfc822.pm line 23.

Ma ktoś pomysł czym to jest spowodowane ?
W skrócie mój skrypt wygląda tak:
use DBI;
use strict;
use MIME::Base64;
use POSIX;
use Mail::Send;
use utf8;

my $dbh = DBI->connect( ... );
my $query = qq{ ... };
my $sth = $dbh->prepare($query) or exit(0);
$sth->execute or die "Can't execute the query: $sth->errstr";

my $html = " { Tu generuję treść maila w html na podstawie danych z bazy } ";

my $msg = Mail::Send->new();
$msg->to('Adresat <ma...@domena.com>');
$msg->subject('Temat');
$msg->add('Content-Type', 'text/html; charset=UTF-8');

my $fh = $msg->open;
print $fh $html;
$fh->close or die "couldn't send whole message: $!\n";

Pozdrawiam

wozniak grzegorz

unread,
Oct 25, 2013, 9:45:59 AM10/25/13
to
adamrw wrote:

> my $fh = $msg->open;
binmode $fh,":utf8";
lub
utf8::encode($html);
> print $fh $html;
> $fh->close or die "couldn't send whole message: $!\n";

--
Pozdrawiam
Grzegorz Woźniak
xmpp:skinek_at_jabster_pl


adamrw

unread,
Oct 30, 2013, 10:02:54 AM10/30/13
to
W dniu piątek, 25 października 2013 15:45:59 UTC+2 użytkownik wozniak grzegorz napisał:
> binmode $fh,":utf8";
> lub
> utf8::encode($html);
nie pomogło ani jedno ani drugie

Andrzej A. Filip

unread,
Oct 30, 2013, 11:19:14 AM10/30/13
to
adamrw <adam.wa...@gmail.com> pisze:
Czy nagłówek "To:" lub "Subject:" zawiera pliterki?

*TAK* =>
Wygląda że Mail::Mailer zakłada że w nagłówkach są tylko znaki
ASCII (hamerykański ubogi alfabet). Trzeba je zakodowywać samemu.

...
use MIME::Words qw(:all);
my $charset='UTF-8';
...
$msg->to( encode_mimewords('Adresat <ma...@domena.com>', Charset =>
$charset)); $msg->subject( encode_mimewords('Temat',Charset=>
$charset));


--
Andrzej A. Filip
Pijany jest jak jagnię, świnia, małpa i lew. (Przysłowie duńskie)

adamrw

unread,
Nov 4, 2013, 3:24:36 AM11/4/13
to
Zgadza się, temat zawiera polskie znaki. Jak usunąłem polskie znaki jest OK. Ale teraz objawił się inny problem. Mam
use utf8;
co powoduje, że encode_mimewords nie bardzo działa. Zrobiłem sobie test:

use MIME::Words qw(:all);
use utf8;
print encode_mimewords("zażółć gęślą jaźń", Charset=>"UTF-8");

w wyniku pojawia się
Wide character in print at ./test2.pl line 4.
zaż=?UTF-8?Q?=F3?=łć gęślą jaźń

natomiast jak zakomentuję linię "use utf8;" to mam ok
=?UTF-8?Q?za=C5=BC=C3=B3=C5=82=C4=87=20g=C4=99=C5=9Bl=C4?= =?UTF-8?Q?=85=20ja=C5=BA=C5=84?=

lecz nie mogę pozbyć się use utf8, bo wtedy treść maila zawiera krzaki zamiast polskich liter.
Wobec tego zrobiłem tak:
my $subject = encode_mimewords("zażółć gęślą jaźń", Charset=>"UTF-8");
utf8::encode($subject);

treść maila znajduje się w zmiennej $html, więc
my $fh = $msg->open;
utf8::encode($html);
print $fh $html;
$fh->close;

i teraz jest OK - brak warning'ów, mail zawiera polskie znaki.

Dziękuję bardzo za pomoc.
Pozdrawiam

Andrzej A. Filip

unread,
Nov 4, 2013, 3:59:00 AM11/4/13
to
adamrw <adam.wa...@gmail.com> pisze:
Jeśli będziesz zakodowywać jako utf-8 a nie ISO-8859-2 to możesz
użyć
Encode::MIME::Header (Encode).


use Encode; use utf8; print encode('MIME-Header', $utf8),"\n";
print encode('MIME-Q', $utf8),"\n";

--
Andrzej A. Filip
Lepiej zapalić świeczkę, niż narzekać na ciemność. (Przysłowie chińskie)
0 new messages