Форум программистов, компьютерный форум, киберфорум
Perl: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19

Кодировка писем

22.09.2016, 10:00. Показов 5742. Ответов 16

Студворк — интернет-сервис помощи студентам
Здравствуйте, рассылая почту модулем Net::SMTP или Сендмейлом письма в разных почтовых клиентах требуется перекодировать.

Так, для MS OUTLOOK это КОИ-8Р, для The bat - это Win1251.

В скрипте кодировку указываю, но я же не знаю какой почтовый клиент у пользователя.

Что делать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2016, 10:00
Ответы с готовыми решениями:

Не работает парсер писем
Есть вот такой парсер ящиков #!/usr/bin/perl ################# By Fepsis for forum.antichat.ru ################# use threads; ...

Обработка почтовых писем
Добрый день, я новичок в программировании. Хотел разобраться в домашней почте и заодно попробовать себя в perl. В общем идея такая. ...

Кодировка писем
Возникла необходимость получить содержимое моих e-mail. Все они в разных кодировках, кто в Windows-1251, кто в UTF-8. Как я понимаю,...

16
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
23.09.2016, 18:42
Если в скрипте указано что-то вроде
Perl
1
$smtp->datasend('Content-Type: text/html; charset=windows-1251');
то почтовый клиент, по идее, сам поймет, в какой кодировке показывать.
Удачи.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
26.09.2016, 14:52  [ТС]
У меня указано вот так:

$smtp->datasend("Content-Type: text/plain; koi8-r\n"); # MIME и кодировка

В таком варианте, меняя в скрипте кодировку, письмо приходит с кодировкой указанной в скрипте. Но почтовый клиент не хочет менять свою кодировку "по умолчанию", на указанную в письме и показывает крокозябы. Более того, аутлук не желает работать даже если для письма меняешь кодировку. Все равно крокозябы.

Попробую в точности указать как у Вас, поменять plain на html.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
29.09.2016, 16:06  [ТС]
Попробовал, это ничего не меняет. У меня админка по рассылке писем в кодировке UTF-8, база MySQL тоже в этой кодировке, указываю в письме кодировку Win1251, как Вы пишите, но письма приходят в кодировке UTF-8. Почтовые клиенты (и the bat и оутлук) корректно стали перекодировать письма, при выборе UTF-8, но я это связываю с тем что ранее в базу данных я вносил инфо в другой кодировке, для эксперимента, и когда везде сделал UTF-8 полученное письмо можно перекодировать правильно, выбрав эту кодировку. Указывал в скрипте и UTF-8, но все-равно почтовые клиенты показываю кодировку как у них стоит в настройках (т.е. не ту кодировку и крокозябы), для the bat - это win1251, для оутлук - КОИ8-Р.

К тому же в html формате много гемора натягивать теги на текст письма. Но я проделал и этот эксперимент, сделал полную структура html-документа для письма с указанием meta тегов и кодировки UTF-8. Это помогло частично. THE BAT стал понимать правильно! Но оутлук уперто стоит на своей КОИ8-Р.

К тому же мы не знаем какие еще есть почтовые клиенты у пользователей. Но главное победить Оутлук. Какие еще есть идеи, как победить оутлук? спасибо.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
30.09.2016, 14:52
Цитата Сообщение от gdmipro Посмотреть сообщение
Но главное победить Оутлук
Не надо его побеждать, это всего лишь компьютерная программа.
У меня к сожалению или к счастью под Linux нет Outlook, но алгоритм решения Вашей проблемы следующий.
1. Любым способом посылаете к себе на Outlook письмо, которое хорошо принимается и читается.
2. Просматриваете принятое письмо как текст, определяете его кодировку, смотрите служебные поля.
3. Формируете в аналогичной кодировке и аналогичной структуре письмо через Perl.
4. Проверяете сформированное письмо на остальных клиентах.
5. Всегда помните, что спам вреден для кармы и приводит к частой икоте.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
04.10.2016, 10:08  [ТС]
Спасибо за ответ!

Спасибо что не посчитали меня спамером, т.к. я забыл указать, что рассылку делаю исключительно добровольным подписчикам сайта, рассылка новостей сайта. Таким образом у меня есть на сайте страничка подписки на новости, где я собираю имейлы (могу дать ссылку, если форумом это допускается, то вот она http://romaxprom.ru/cgi-bin/subscribe.cgi), затем в каждом письме есть ссылка на отписку от новостей, если вдруг человек решил что ему это больше не надо, (вот она http://romaxprom.ru/cgi-bin/unsubscribe.cgi). У меня уже есть база из примерно 100 добровольных подписчиков. Сорри что не объяснил это в начале моей темы.

jenker в моем письме - это оутлук (punto switcher шалит).

Теперь по Вашему ответу, я так и делал для jenker? как Вы пишите. Jenker понимает кодировку КОИ8, я внес в базу данных имейли и комменты по названию организаций в этой кодировке, в скрипте отправки почты указал эту кодировку, сам скрип в этой кодировке, отправил почту. Письма прекрасно пришли в jenker в читаемом виде.

Но проблема в том что в другие почтовые клиенты, в таком случае, приходят крокозябы, в the bat например. Так как the bat не понимает кои8 по умолчанию. Кроме того, скрипт в кодировке кои8 не вяжется с остальными скриптами и базой данных, которые все в кодировке UTF-8!

Как интересно сделать, чтобы скрипты, сайт и база данных были в нормальной кордировке UTF-8, а вот в коде отправке почты указывать то что переключит каждый почтовый клиент на правильную кодировку? Я думаю нужно еще что-то добавить в структуру html кода письма, т.к. the bat уже стал понимать. Но что добавить?
спасибо, еще раз.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
04.10.2016, 12:09
Почитал про TheBat на форуме сайта производителя. Исходя из этой ветки проблемы с кодировкой у TheBat случаются.
А в html Вы добавляете указание кодировки?
HTML5
1
2
3
4
5
6
7
<!DOCTYPE html>
<html>
    <head>
        <meta charset="windows-1251">
        <title>Кодировка HTML-страницы</title>
    </head>
    <body>.........
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
04.10.2016, 13:27  [ТС]
Да, добавляю, я писал: "сделал полную структура html-документа для письма с указанием meta тегов и кодировки UTF-8. Это помогло частично. THE BAT стал понимать правильно! "

Вот мое письмо:

<!DOCTYPE html>
<html lang="ru"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta charset="UTF-8">
<title>Ножи для кормораздатчиков кормосмесителей ИСРК-12 "Хозяин" Запагромаш раздатчиков смесителей кормов РСК-12 "Белмикс" Бобруйскагромаш</title>

</head>

<body>

<p>бла бла бла текст письма </p>

</body>
</html>



The bat понял меня, Outlook нет.
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
05.10.2016, 18:25
Попробуйте в своём примере текст в html только в utf-8 и
HTML5
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Второй
HTML5
1
<meta charset="UTF-8">
при наличии
HTML5
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
попробуйте убрать
0
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
06.10.2016, 09:00
Цитата Сообщение от gdmipro Посмотреть сообщение
Вот мое письмо:
<!DOCTYPE html>
Это не всё. Не хватает заголовков RFC до первой пустой строки перед Вашим HTML.
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
18.10.2016, 12:00  [ТС]
hobo-mts, Не могли бы Вы дать пример, что там нужно указывать? Ведь RFC-заголовки письма - это служебная информация о маршруте прохождения писем. Как можно на это влиять и что нам это дает?
0
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
18.10.2016, 12:38
Цитата Сообщение от gdmipro Посмотреть сообщение
Ведь RFC-заголовки письма - это служебная информация о маршруте прохождения писем.
Не только маршрут. Дам несколько ссылок. Возможно информация дублируется:
http://www.icmm.ru/~masich/win... /form.html
http://citforum.ru/internet/servers/glava2_5.shtml
http://web.opennet.ru/docs/RUS/mime_rfc/
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
18.10.2016, 13:09  [ТС]
pka, Перестановка, добавление, удаление кода пока ничего существенно не меняет для Outlook.

Добавлено через 26 минут
Цитата Сообщение от hobo-mts Посмотреть сообщение
Не только маршрут.
А ну это я указываю, только MIME и кодировка указывается в скрипте отправки почты, а не в html-письме, я об этом выше писал. Вот так у меня в скрипте:

$smtp->datasend('Content-Type: text/html; charset=UTF-8');

И, насколько я понимаю, модуль Net::SMTP передает эти инструкции и приклеивает к письму.

Добавил еще инструкцию в скрипт $smtp->datasend('Content-transfer-encoding: base64');
как в учебнике про MIME.

но Outlook по-прежнему не понимает.
0
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
18.10.2016, 13:28
Цитата Сообщение от gdmipro Посмотреть сообщение
А ну это я указываю, только MIME и кодировка указывается в скрипте отправки почты, а не в html-письме, я об этом выше писал. Вот так у меня в скрипте:
$smtp->datasend('Content-Type: text/html; charset=UTF-8');
Попробуйте в Outlook ПКМ в списке сообщений и посмотреть "Параметры сообщения...". Какие там заголовки приезжают.
У меня Outlook прекрасно понимает и UTF-8, и cp1251
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
18.10.2016, 14:54  [ТС]
Цитата Сообщение от hobo-mts Посмотреть сообщение
Попробуйте в Outlook ПКМ в списке сообщений и посмотреть "Параметры сообщения...". Какие там заголовки приезжают.
У меня Outlook прекрасно понимает и UTF-8, и cp1251
Вот что там приезжает:

Delivered-To: gdmipro@gmail.com
Received: by 10.12.142.14 with SMTP id v14csp811850qvb;
Tue, 18 Oct 2016 03:02:13 -0700 (PDT)
X-Received: by 10.25.133.11 with SMTP id h11mr20521609lfd.60.1476784933775;
Tue, 18 Oct 2016 03:02:13 -0700 (PDT)
Return-Path: <info@romaxprom.ru>
Received: from smtpout17.sweb.ru (smtpout17.sweb.ru. [77.222.41.73])
by mx.google.com with ESMTPS id a202si7098953lfb.243.2016.10.18.03.02.13
for <gdmipro@gmail.com>
(version=TLS1_2 cipher=AES128-SHA bits=128/128);
Tue, 18 Oct 2016 03:02:13 -0700 (PDT)
Received-SPF: neutral (google.com: 77.222.41.73 is neither permitted nor denied by best guess record for domain of info@romaxprom.ru) client-ip=77.222.41.73;
Authentication-Results: mx.google.com;
spf=neutral (google.com: 77.222.41.73 is neither permitted nor denied by best guess record for domain of info@romaxprom.ru) smtp.mailfrom=info@romaxprom.ru
Date: Tue, 18 Oct 2016 03:02:13 -0700 (PDT)
Message-Id: <5805f325.d34d190a.e856d.eb49SMTPIN_ADDE D_MISSING@mx.google.com>
Received: from [UNAVAILABLE] ([77.222.40.7] helo=localhost.localdomain)
by smtpout17.sweb.ru with esmtpa (Exim 4.84)
(envelope-from <info@romaxprom.ru>)
id 1bwRDo-0005ok-Nd
for gdmipro@gmail.com; Tue, 18 Oct 2016 13:02:12 +0300
From: info@romaxprom.ru
To: gdmipro@gmail.com
Content-Type: text/html; charset=UTF-8Content-transfer-encoding: base64Subject: http://romaxprom.ru
X-EsetId: B2B8902238653530E8F5CD


Меня смущает то, что предпоследняя строчка слепливает строки: "Content-Type: text/html; charset=UTF-8Content-transfer-encoding: base64Subject: http://romaxprom.ru"

Outlook у меня из офиса 2010 версия 14.0.4760.1000 (32-разрядная)
0
48 / 22 / 3
Регистрация: 21.06.2013
Сообщений: 92
18.10.2016, 15:41
Пример из perldoc говорит, что символы новой строки нужны
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/local/bin/perl -w
        use Net::SMTP;
        my $smtp = Net::SMTP->new('mailhost');
        $smtp->mail($ENV{USER});
        if ($smtp->to('postmaster')) {
         $smtp->data();
         $smtp->datasend("To: postmaster\n");
         $smtp->datasend("\n");
         $smtp->datasend("A simple test message\n");
         $smtp->dataend();
        } else {
         print "Error: ", $smtp->message();
        }
        $smtp->quit;
0
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 19
18.10.2016, 16:34  [ТС]
Огромное спасибо, заработало! Строку "Content-transfer-encoding: base64" убрал, с ней тоже не работало. Получается ошибка была в простом синтаксисе! За что оч. стыдно (.

Работает даже с простым текстом (не html). Заработала также тема письма (кодировка в Subject), что ранее не работало!

Всем огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2016, 16:34
Помогаю со студенческими работами здесь

Кодировка електронных писем
Доброго времени суток. Делаю программу, где через POP3 принимает електронные сообщение. Прием сообщений работает, но когда открываю...

Кодировка писем mail.ru
Добрый день всем.Мне нужна Ваша помощь ( я сама не программист).суть вопроса и помощи в след.У меня почта mail.ru агент-с недавних пор...

Кодировка писем со вложением
Здраствуйте! Ниже представлен код для отправки письма со вложением. Как поменять кодировку для того, что бы вместо кракозяб были руские...

Кодировка заголовков E-mail писем
Здравствуйте. Читаю заголовки (тему) email письма через TextView и получаю такой эффект: Какой-нибудь русский...

Кодировка при отправке писем через Outlook
Доброго времени суток!!! Суть проблемы в том, что при отправке писем из Excel через Outlook происходит следующее. Если Outlook открыт, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru