POP3Client не определить перевод строки в теле письма
Лезу в почту, используя POP3Client. Всё тип топ, до того момента пока не пытаюсь получить тело письма. Нечто типа
foreach ($pop->Body( 1 )) {
print $_;
}
Выводит тело письма в одну длинную строку. Если после каждого принта ставить \n - то бьёт строки письма на части.
Кто-нибудь знает как правильно отобразить содержимое письма?
1. nl2br() мне не нужна
2. она всё равно не отработает
Выводит тело письма в одну длинную строку.
Куда выводит? В браузер? В лог-файл?
Если после каждого принта ставить \n - то бьёт строки письма на части.
Кто-нибудь знает как правильно отобразить содержимое письма?
Где бьет "на части"? В письме? Или при выводе в браузер? или в лог-файл?
И что значит "бьет строки письма на части"?
Компания ULTRA Electronics поздравляет Вас с наступающим Днем Рождения и извещает о предоставлении Вам дополнительной скидки.$
В период с 09.02.2007 по 13.02.2007 Вы можете приобретать товар в ULTRA Electronics по 2 колонке прайс-листа.$
Результат лога (если ставить \n или \r\n) будет примерноследующим:
Компания ULTRA Electronics поздравляет Вас с наступающим Днем Рождения и$
извещает о предоставлении Вам дополнительной скидки.$
В период с 09.02.2007 по 13.02.2007 Вы можете приобретать товар в$
ULTRA Electronics по 2 колонке прайс-листа.$
2) Берем hex-редактор и смотрим что за символы стоят в тех местах где ты видишь "перенос".
лог я смотрел в том числе и winhex-ом
лог я смотрел в том числе и winhex-ом
Молодец. И каков результат?
В логе только те переводы строк, которые ставлю я в цикле.
Если я не ставлю \r\n, то письмо представляет из себя одну строку без переводов каретки, а если ставлю, то получается больше строк, чем было в изначальном письме.
В логе только те переводы строк, которые ставлю я в цикле.
Если я не ставлю \r\n, то письмо представляет из себя одну строку без переводов каретки, а если ставлю, то получается больше строк, чем было в изначальном письме.
Ответь сам себе на такие вопросы:
1) Есть ли свете колдунство?
2) Если его нет - откуда берутся переносы строк?
3) Если в hex-редакторе я не вижу символов перевода строки, а строка переводится - не сплю ли я и не нахожусь ли под действием наркотических средств?
4) Если я не сплю и не пил сегодня таблеток, не курил, не нюхал порошков - вероятнее всего я смотрю файлы не тем редактором?
Это я все к чему. Это я к тому что не бывает переноса строк из ниоткуда если там не стоят соответствующие символы или если редактор не находится в режиме автоматического переноса строк.
ЗЫ А еще можешь сюда вывалить тот кусок кода в котором ты расставляешь переносы и записываешь в лог
Код будет вечером, когда до дома дойду. Возможно я не доходчиво объяснил...
Вариант 1.
foreach ($pop->Body( 1 )) {
print $_;
}
В логе письмо - одной строкой.
Вариант 2.
foreach ($pop->Body( 1 )) {
print "$_\r\n";
}
В логе вместо 2-х строк - четыре, потому что метод Body порубил каждую мою строку на две.
ЗЫ А у тебя пользователи тоже будут письма просматривать через логи?
Я кажется нашёл ошибку. Сегодня поковыряюсь ещё и напишу в чём была проблема.
use Net::POP3;
sub logw
{
my ($log) = @_;
my $log_file_name = './ml.txt';
open LOGFILE, ">>$log_file_name";
print LOGFILE $log;
close LOGFILE;
}
print "connect to $addr...\n";
my $pop = Net::POP3->new($addr);
if (defined($pop))
{
my $res = $pop->login($user, $pass);
if (defined($res))
{
print "USER OK\nPASS OK\n";
print "Get messages...\n";
my $msgnums = $pop->list; # hashref of msgnum => size
my $subject = '';
my $content = '';
my $from = '';
foreach my $msgnum (keys %$msgnums)
{
my $msgfull = '';
my $msg = $pop->get($msgnum);
my $msg_size = $$msgnums{$msgnum};
$msgfull .= $_ foreach (@$msg);
$msgfull =~ m/From: (.*)/;
$from = $1;
$msgfull =~ m/Subject: (.*)/;
$subject = $1;
$msgfull =~ m/\n\n(.*)/;
$content = $1;
logw($msgfull);
print "From: $from";
print "Subject: $subject";
print "Content: $content";
$pop->delete($msgnum);
}
}
else
{
print "Error invalid USER and PASS\n";
}
$pop->quit;
}
else
{
print "Error connect to $addr\n";
}
В случае, если письмо
Content-Transfer-Encoding: quoted-printable
Строки письма бьются (в моём случае) на подстроки, не превышающие 74 байт. Однако, если строка не окончена, то в конце ставится знак "=".
В остальных случаях всё ок.