Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

POP3Client не определить перевод строки в теле письма

1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Собственно сабж.

Лезу в почту, используя POP3Client. Всё тип топ, до того момента пока не пытаюсь получить тело письма. Нечто типа
foreach ($pop->Body( 1 )) {
print $_;
}
Выводит тело письма в одну длинную строку. Если после каждого принта ставить \n - то бьёт строки письма на части.
Кто-нибудь знает как правильно отобразить содержимое письма?
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
nl2br()
1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
я пишу тело тело письма в файл не html формата, и в нём я не вижу перевода строк. Так что:
1. nl2br() мне не нужна
2. она всё равно не отработает
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: AndrewSha

Выводит тело письма в одну длинную строку.


Куда выводит? В браузер? В лог-файл?

Цитата: AndrewSha

Если после каждого принта ставить \n - то бьёт строки письма на части.
Кто-нибудь знает как правильно отобразить содержимое письма?


Где бьет "на части"? В письме? Или при выводе в браузер? или в лог-файл?

1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Речь о браузере не идёт, пишу в лог.
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Ставь не \n, а \r\n

И что значит "бьет строки письма на части"?
1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Например 2 строки в письме (конец помечу $)

Компания 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 колонке прайс-листа.$
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
1) А чем ты просматриваешь лог? У тебя случайно не стоит в программе-просмотрщике режим автоматического переноса (Word Wrap)?
2) Берем hex-редактор и смотрим что за символы стоят в тех местах где ты видишь "перенос".
1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
:)
лог я смотрел в том числе и winhex-ом
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: AndrewSha
:)
лог я смотрел в том числе и winhex-ом



Молодец. И каков результат?

1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Тот что и был в начале топика.
В логе только те переводы строк, которые ставлю я в цикле.
Если я не ставлю \r\n, то письмо представляет из себя одну строку без переводов каретки, а если ставлю, то получается больше строк, чем было в изначальном письме.
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: AndrewSha
Тот что и был в начале топика.
В логе только те переводы строк, которые ставлю я в цикле.
Если я не ставлю \r\n, то письмо представляет из себя одну строку без переводов каретки, а если ставлю, то получается больше строк, чем было в изначальном письме.



Ответь сам себе на такие вопросы:

1) Есть ли свете колдунство?
2) Если его нет - откуда берутся переносы строк?
3) Если в hex-редакторе я не вижу символов перевода строки, а строка переводится - не сплю ли я и не нахожусь ли под действием наркотических средств?
4) Если я не сплю и не пил сегодня таблеток, не курил, не нюхал порошков - вероятнее всего я смотрю файлы не тем редактором?

Это я все к чему. Это я к тому что не бывает переноса строк из ниоткуда если там не стоят соответствующие символы или если редактор не находится в режиме автоматического переноса строк.

ЗЫ А еще можешь сюда вывалить тот кусок кода в котором ты расставляешь переносы и записываешь в лог

1.7K
14 февраля 2007 года
AndrewSha
64 / / 13.01.2003
:)
Код будет вечером, когда до дома дойду. Возможно я не доходчиво объяснил...
Вариант 1.
foreach ($pop->Body( 1 )) {
print $_;
}
В логе письмо - одной строкой.

Вариант 2.
foreach ($pop->Body( 1 )) {
print "$_\r\n";
}
В логе вместо 2-х строк - четыре, потому что метод Body порубил каждую мою строку на две.
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Мы про какой язык говорим? Perl или PHP? Если про РНР то в нем нет такой штуки как $_ - это чисто перловая радость.
1.7K
15 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Мы говорим про Perl.
13
15 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Это не сильно меняет дело. Ищи ошибку в своем коде.

ЗЫ А у тебя пользователи тоже будут письма просматривать через логи?
1.7K
15 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Не беспокойся за моих пользователей, о них беспокоюсь я :)
Я кажется нашёл ошибку. Сегодня поковыряюсь ещё и напишу в чём была проблема.
26K
16 февраля 2007 года
brig1
1 / / 16.02.2007
попробуй через модуль Net::POP3

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";
}
1.7K
18 февраля 2007 года
AndrewSha
64 / / 13.01.2003
Дошли руки дописать в чём дело было.
В случае, если письмо
Content-Transfer-Encoding: quoted-printable
Строки письма бьются (в моём случае) на подстроки, не превышающие 74 байт. Однако, если строка не окончена, то в конце ставится знак "=".
В остальных случаях всё ок.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог