Матеріал з Xgu.ru
На даній сторінці розглядаються різні способи правильної надсилання повідомлень електронної пошти, що містять не-ASCII символи в тексті і вкладеннях.
Скрипти всіляких форумів зазвичай не розраховані на мову, відмінний від англійського, і при використанні їх з російською мовою генерують неправильні повідомлення. Більшість поштових клієнтів навчилися розуміти неправильно сформовані листи, але далеко не все, і тим більше не всі види помилок. Підводні камені можуть чекати де завгодно, та й краще робити програми, що формують листи у відповідності зі стандартами. Поради, дані тут, допоможуть вам відправляти правильні листи на будь-якій мові. Якщо ви побачили тут невідповідність з будь-яким RFC - правте сміливо, або пишіть на сторінку обговорення.
[Ред] Теорія
[Ред] Кодування
У заголовку листа допускаються тільки ASCII символи, тому рядок, що містить не-ASCII символи (наприклад, російські літери), повинна бути закодована.
У тілі листа можна використовувати 8 бітні (НЕ-ASCII) символи, правда з деякими обмеженнями (максимальна довжина рядка.). Тому щоб передати нам не-ASCII текст в незмінному вигляді, його краще закодувати.
Прикріплюються файли (mime, attach) необхідно кодувати в base64, щоб вони були отримані незмінними.
[Ред] RFC
[Ред] Скрипти
[Ред] Відправлення в Perl
Нам знадобляться модулі MIME :: Base64 і Encode, що входять в стандартну поставку Perl ( «Core modules»).
Для кодування заголовків листа (тема, відправник, одержувач) будемо використовувати функцію encode модуля Encode. У неї є спеціальний режим для кодування заголовків листів, при цьому він приймає тільки utf-8.
Отже, підключаємо модуль і кодируем: use Encode qw / encode decode /; my $ Mail_subject = encode ( 'MIME-Header', decode ( 'utf8', 'Тестова тема')); my $ Mail_from = encode ( 'MIME-Header', decode ( 'utf8', 'Тестовий Відправник
Слід зазначити використання функції decode для приведення тексту до кодуванні utf-8. Навіть якщо текст вашого скрипта вже в utf-8, вам все одно доведеться викликати функцію decode. Про це написано тут.
[Ред] За допомогою Mail :: Sendmail
У керівництві зазначено, що модуль сам додасть зазначені заголовки, якщо вони не будуть задані
[Ред] За допомогою MIME :: Lite
Розділ не написаний.
[Ред] Відправлення в PHP
[Ред] Відправлення в Python
З використанням бібліотеки smtplib
[Ред] Відправлення з оболонки командного рядка
[Ред] За допомогою sendmail
Файл / usr / bin / sendmail багато поштові програми (зокрема, Exim4) ставлять аліасом на себе, обробляючи відправку пошти, і приймаючи більшість прапорів sendmail
Відправлення повідомлення з файлу FILE.eml (формат - звичайне повідомлення пошти, RFC 822):
(Перевірено роботу під FreeBSD від 5 до 8 (sendmail з комплекту поставки), і Debian 6 (стандартний симлінк з sendmail на exim4)):
[Ред] За допомогою mutt
Mutt є консольним поштовим клієнтом (POP3, IMAP), одним з найпотужніших. Також їм зручно відправляти листи з вкладеннями з командного рядка
Потрібно враховувати, що mutt за замовчуванням сам тільки генерує лист, для отравкі він запускає sendmail або еквівалент (налаштовується) приблизно таким же чином, що і в попередньому пункті.
Так, щоб вкладення розумілося поштовим клієнтом саме вкладеним листом, а не текстом, файл вкладення для mutt повинен мати розширення .eml (Content-type = message / rfc822).
/.muttrc або формуватися автоматично.
Докладніший синтаксис:
[Ред] За допомогою mpack
Mpack - стара програма (Linux, FreeBSD), призначена для пакування файлу в MIME-формат.
Якщо в якості виходу вказати емейл (або декілька), файл буде відправлений за допомогою sendmail або його замінника.
Особливості - вкласти в лист можна тільки один файл, але є опція максимального розміру, якщо він перевищується, генерується кілька вихідних файлів (листів).
[Ред] За допомогою biabam
Biabam не вміє правильно кодувати російський текст при відправці. Якщо ви знаєте, як це виправити - напишіть тут.
Дана програма використовує штатний клієнт mail.
[Ред] Посилання
[Ред] Ліцензія на текст
Текст доступний на умовах ліцензії Creative Commons Attribution / Share-Alike