Пошлите электронные письма с международными символами с диакритикой и специальными символами

Если бы Вы действительно используете системную команду, я попытался бы добавить в белый список то, что входит в os.system () вызов.. Например..

clean_user_input re.sub("[^a-zA-Z]", "", user_input)
os.system("ls %s" % (clean_user_input))

модуль подпроцесса является более оптимальным вариантом, и я рекомендовал бы не использовать что-либо как os.system/subprocess по мере возможности.

6
задан Nathan H 12 November 2009 в 00:49
поделиться

3 ответа

Вам необходимо использовать MIME. Добавьте заголовки писем:

MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8

(Если вы уже используете MIME multipart / alternate для помещения HTML и текста в одно и то же сообщение, вы помещаете Content-Type: text / plain; charset = utf-8 вместо подзаголовков текстовой части.)

Предполагается, что кодировка, в которой вы будете отправлять свои «международные» символы, - UTF-8. Если вы планируете обслуживать несколько стран, UTF-8 - единственный разумный выбор кодировки для использования во всем приложении, но если вы еще не задумывались об этом, на вашем сайте по умолчанию может использоваться западноевропейская кодировка. Убедитесь, что такие вещи, как китайские иероглифы, правильно работают на вашем сайте и в базе данных, прежде чем беспокоиться о них в почте.

Крах: есть регионы, где отправка почты в UTF-8 не подходит. т самое действенное. Я не знаю насчет Китая, но в Японии все еще существуют некоторые отсталые и нелепые почтовые системы (особенно веб-почта), которые не могут справиться с Unicode и вместо этого должны иметь кодировку, зависящую от локали, такую ​​как Shift-JIS. Если вы концентрируетесь на этих рынках, вам часто придется использовать iconv для создания особым образом закодированных версий почты. Неприятно.

Теперь, поскольку многие почтовые серверы не могут справиться с не-ASCII символами в теле письма, вам придется их кодировать. Для этого вы можете выбрать quoted-printable или base64; quoted-printable, как правило, меньше по размеру и более удобочитаем для контента, который также содержит символы ASCII:

Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello! An a-acute is =C3=A1

Функция, которую нужно кодировать в этом формате, - quoted_printable_encode . Однако для использования этой функции вам нужен достаточно современный PHP; если у вас его нет, вы можете установить Content-Transfer-Encoding на base64 вместо этого и использовать base64_encode .

Наконец, если вы хотите включать в заголовки символы, отличные от ASCII (например, в From , To или Subject ), существует совершенно другой синтаксис:

Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=

Где это QW ... == беспорядок посередине - это base64_encode в UTF-8 «А-острый á».

24
ответ дан 8 December 2019 в 04:09
поделиться

Если содержимое вашего электронного письма закодировано как UTF-8, а вы отправляете электронное письмо как UTF-8, то вам не нужно использовать какую-либо специальную обработку международных символов в вашем HTML или Текстовая часть.

1
ответ дан 8 December 2019 в 04:09
поделиться

Символы с диакритическими знаками, такие как á, í, é, ñ, работают с обычным текстом для большинства настроек кодирования браузера по умолчанию.

Азиатские символы, такие как китайский персонажи обычно оказываются мусором.

Да, рекомендуется использовать обычный текст + HTML.

1
ответ дан 8 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: