Домой / Музыка / Как размер письма влияет на его доставку? Отправка писем с аттачем

Как размер письма влияет на его доставку? Отправка писем с аттачем

В некоторых, не очень частых случаях, требуется отправлять с сервера письмо со вложением: например какая-то рассылка, или отправка каких-то прайсов, или ещё что. Иными словами нам нужно поле, которое бы позволяло прикрепить файл к письму. Сейчас мы и посмотрим как это делается.

Возьмём для начала ту форму, что мы сделали ранее в статье . Прежде всего подправим html-код, поместив после поля сообщения следующий код:




А также не забываем тегу form прописать свойство:

А теперь займёмся кодом обработки формы, где нам нужно будет внести несколько очень важных изменений.

$mailto = "[email protected]";
$charset = "windows-1251";
$subject = "Имя письма";
$content = "text/html";
$status="
";
if (!empty($_POST))
{
$name = htmlspecialchars(stripslashes($_POST["imko"]));
$message = htmlspecialchars(stripslashes($_POST["tikstik"]));
$mail = htmlspecialchars(stripslashes($_POST["posta"]));
$picture = "" ;
if(empty($_POST["posta"]))
{
$status = "Вы не указали свой E-mail!";
}
elseif (!preg_match("/^+@+\.{2,6}$/i", $mail))
{
$status = "Вы ввели некорректный адрес";
}
else
{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: \"".$name."\" <".$mail.">\r\n";
$headers .= "Bcc: [email protected]\r\n";
$headers .= "X-Mailer: E-mail from my super-site \r\n";
$sendmessage = "

E-mail для связи: ".$mail."


Сообщение: ".$message."


";
if (!empty ($_FILES ["mail_file" ]["tmp_name" ]))
{
$path = $_FILES ["mail_file" ]["name" ];
if (copy ($_FILES ["mail_file" ]["tmp_name" ], $path )) $picture = $path ;
}
if (empty ($picture ))
{
$headers .= "Content-Type: ".$content." charset=".$charset."\r\n";
if (mail($mailto,$subject,$sendmessage,$headers))
{
$status = "Ваше сообщение отправлено!";
}
else
{
$status = "По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам";
}
}
else
{
$fp = fopen ($path ,"r" );
if (!$fp )
{
print "Файл " .$path ." не может быть прочитан" ;
exit ();
}
$file = fread ($fp , filesize ($path ));
fclose ($fp );
$boundary = "--" .md5 (uniqid (time ()));
$headers .="Content-Type: multipart/mixed; boundary=\"" .$boundary ."\"\n " ;
$multipart .= "--" .$boundary ."\n" ;
$multipart .= "Content-Type: text/html; charset=$charset\n " ;
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n " ;
$multipart .= "$sendmessage\n\n " ;
$message_part = "--" .$boundary ."\n " ;
$message_part .= "Content-Type: application/octet-stream\n " ;
$message_part .= "Content-Transfer-Encoding: base64\n " ;
$message_part .= "Content-Disposition: attachment; filename = \"" .$picture ."\"\n\n " ;
$message_part .= chunk_split (base64_encode ($file ))."\n " ;
$multipart .= $message_part ."--" .$boundary ."--\n " ;
if (!mail($mailto, $subject, $multipart , $headers)) $status = "По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам";
else $status = "Ваше сообщение отправлено!";
}
}
}
?>

Весь принципиально новый код выделен, как обычно, цветом.

    12 строка. Добавлена переменная $picture . Через неё будет проходить проверка - был выбран файл для загрузки или поле было оставлено пустым. В ней также будет содержаться путь к файлу. Изначально строка пустая.

    24-32 строки. Уже здесь идут первые изменения. Заголовки $headers и текст письма $sendmessage вынесены раньше и один из заголовков убран. Сделано это вот почему. Мы разобьём код на две части, одна из которых будет выполнятся, если файл не был прикреплён, а другая в случае если был. В обоих случаях по-разному указывается Content-Type, поэтому я решил их разнести.

    32-37 строки. Если файл был передан, то он загружается во временную директорию, и в случае успешной загрузки переменная $picture будет содержать путь к файлу, а если нет, то так и останется пустой.

    38-52 строки. Если файл был не был передан или не был загружен (проверка по $picture), то будет выполнятся знакомый нам по предыдущей статье код отправки письма. Тут также указан заголовок, о которых речь шла несколькими строками выше.

    53-81 строки. Если файл был передан, то будет выполнен этот код.

    55-60 строки. Открываем закачанный файл и тут же проверяем его - открывается или не открывается. Если нет, то выполняется вывод ошибки и прекращение работы скрипта. Здесь я решил показать, что можно передавать ошибку и не через переменную $status, а вот таким вот образом с остановкой скрипта.

    61-62 строки. Читаем размер файла и закрываем файл.

    63-65 строки. Вот отличающийся заголовок Content-Type. Во-первых он multipart/mixed, а во вторых передаётся boundary. То есть, грубо говоря, сначала мы указали, что письмо будет состоять из нескольких частей, а потом задали разделитель. Для различных частей письма boundary должно быть разное.

    66-76 строки. Формирование письма. 66-69 - первая часть, 70-75 - вторая часть, 76 - их склейка.

    • Content-Transfer-Encoding - используется для указания метода шифрования письма при отправке.
    • Content-Disposition - используется для указания браузеру как он должен воспринимать документ.
    • Content-Type - используется, чтобы показать что внутри лежит.

    chunk_split разбивает строку на несколько мелких, и используется с base64_encode для соответствия определённой семантике.

  1. 77-80 строки. Аналог 42-51 строк, только отличается по написанию и использованию условия в if - в первом случае идёт отрицание - если письмо не отправлено, а во втором случае наоборот - если отправлено.

Заключение

Самая частая ошибка в формах со вложениями, это когда забывается тегу form прописать enctype="multipart/form-data". Казалось бы мелочь, а иногда по первенств заставляет задуматься - да что ж такое то.

Второе, что хочу сказать, так это что форме не хватает одной вещи - проверки типа загружаемого файла. Ведь вам могут загрузить и что-нибудь нехорошее, не так ли? Но, чтобы не загружать данный код, я решил оставить это на следующий раз. Там мы поговорим о загрузке файлов на сервер отдельно и в контексте этого и разберём - как же проверить что нам грузят?

А пока до новых встреч! Пишите ваши пожелания и замечания, для меня это очень важно, поскольку хочется давать ту информацию, которая вам была бы наиболее интересна и полезна.

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

Такие файлы называются вложенными, а операция их прикрепления к письму - вложением. В качестве вложения к письму прикрепляются файлы самых разных типов. В следующих разделах мы поговорим о том, как правильно получать и отправлять файлы с помощью приложения Почта.

Сохранение вложений

Получив письмо с вложенным файлом, вы сразу же это заметите. Наличие в письме вложения обозначается значком в виде скрепки, расположенным рядом с темой письма. В тексте письма отправители обычно напрямую указывают на наличие в нем вложений, требующих вашего специального внимания. Очень часто вложенные в письмо графические изображения представляются миниатюрами, не заметить которые просто невозможно.

Сохранение вложенного в почтовое сообщение файла на диске компьютера выполняется очень просто.

1. Откройте письмо, содержащее вложение, н загрузите вложенный в него файл. Для загрузки файла вложения вам необходимо дать приложению Почта специальное указание. По умолчанию вложенные файлы представляются в окне сообщения специальными заполнителями - миниатюрами, изменяющимися в зависимости от типа вложения.
Сохранение файла вложения выполняется одним из двух способов.

  • Щелкните правой кнопкой мыши на заполнителе, представляющем вложение в письмо. Если он представлен миниатюрой содержимого файла, то выберите в контекстном меню команду Сохранить.
  • Если вложенный файл представлен в письме общим значком, то после щелчка на нем правой кнопкой мыши выберите в контекстном меню команду Загрузить. Только после завершения загрузки файл будет представлен более знакомым значком, обозначающим его тип данных.

2. Укажите место сохранения полученного файла . На экране отображается диалоговое окно сохранения файлов программы Проводник. В нем по умолчанию в качестве места назначения указана папка Документы. Если требуется сохранить файл в другом месте компьютера, то укажите его на левой панели окна. Или щелкните на элементе Этот компьютер (на все той же левой панели) и перейдите к целевой папке файловой системы, которая будет использоваться в качестве места хранения файла.

Сохранив вложенные в письма файлы в базовых пользовательских папках (Документы, Изображения, Видео и Музыка), вы легко найдете их в дальнейшем. При выборе других папок для хранения собственных файлов вам нужно постоянно помнить об их расположении, чтобы не потерять важные данные.

Чтобы создать новую папку внутри уже существующей, в окне программы Проводник на вкладке Главная ленты щелкните на кнопке Создать папку. После появления значка папки введите ее название и нажмите клавишу .

На компьютере сохраняется только копия данных, вложенных в почтовое сообщение. Исходный файл остается прикрепленным к письму. Если вы по неосторожности удалите из вложения файл, сохраненный на компьютере, то всегда сможете восстановить его из почтового сообщения. Встроенная в антишпионская программа Защитник Windows автоматически просматривает почтовые сообщения и вложенные в них файлы, ища в них вредоносное программное обеспечение.

Отправка вложения

Операция отправки файлов с помощью приложения Почта другим пользователям во многом напоминает получение вложений и их сохранение на диске, выполненное в обратном порядке. Вместо того чтобы извлекать вложенный файл из письма, теперь вам придется прикреплять его к почтовому сообщению, отправляемому адресату.

Чтобы отправить файл в виде вложения в письмо другому пользователю, выполните следующие действия.

1. Запустите приложение Почта и создайте новое почтовое сообщение. Детально операция создания почтового сообщения была описана в разделе “Составление и отправка писем”.

2. В окне для создания почтового сообщения перейдите на вкладку Вставка и щелкните на кнопке Вложить файл. При выполнении этой команды на экране появляется диалоговое окно Открытие программы Проводник, в котором отображается содержимое папки Документы.

Если необходимый вам файл содержится в папке Документы, то перейдите к п. 4 инструкций. О том, как выбрать файл в другой папке компьютера, читайте в п. 3.

3. Перейдите к папке, в которой находится файл, подлежащий отправке другому пользователю. Щелкните на элементе Этот компьютер левой панели окна Открытие, а затем укажите необходимую папку в файловой системе компьютера. Как правило, пользовательские файлы хранятся в папках Документы, Изображения, Музыка и Видео.

После щелчка на названии папки на левой панели ее содержимое отображается в правой части окна. Снова не та папка? Щелкните на значке со стрелкой “вверх”, чтобы вернуться к предыдущей папке и просмотреть другие вложенные в нее папки.

4. Выберите файл, требующий вложения в письмо, а затем щелкните на кнопке Открыть, расположенной в правом нижнем углу окна. Для выбора файла щелкните на нем. Чтобы выделить сразу несколько файлов, последовательно щелкайте на их значках при нажатой клавише . Вы настолько увлеклись, что выделили лишние файлы? Чтобы исключить некоторые файлы из выделенной области, щелкните на них повторно (снова-таки, при нажатой клавише ). Файл прикрепляется к создаваемому письму сразу после щелчка на кнопке Открыть.

5. Щелкните на кнопке Отправить. Приложение Почта отправит почтовое сообщение с вложенным в него файлом по указанному в поле Кому: адресу.

При вложении в письмо файла вы отправляете адресату только его копию. Исходный файл продолжает храниться в папке своего расположения в компьютере.

Иногда вам нужно отправить большой объем данных в виде вложения к сообщению (например, коллекцию фотографий высокого разрешения, или проект, над которым вы работаете). Почтовые серверы (как ваши, так и получателя сообщения), как правило, имеют ограничение на размер вложений, которые они могут пропустить. Максимально допустимый размер меняется от сервера к серверу, в соответствии с их индивидуальной конфигурацей. Например, для Comcast максимальный размер двоичных файлов равен примерно 10,9 МБ, в то время как Gmail позволяет отправлять вложения размером до 25 МБ.

Если вы превысите лимит сервера, вы получите сообщение об ошибке вроде этого:

Размер сообщения, которое вы пытаетесь отправить, превышает глобальный предел размера (XX XXX XXX байт), допустимый сервером. Сообщение не было отправлено; уменьшите его размер и попробуйте снова.

Где XX XXX XXX - максимальный размер файла, который вы можете отправить.

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

Таким образом лучше всего свести размер вашего(их) вложения(й) к минимуму. Если это не представляется возможным, вы можете выгрузить файлы на службы внешнего хранения, а не прикреплять их к сообщениям.

Проверяйте размер вашего вложения(й) при составлении сообщений

Когда вы добавляете вложения в сообщение, следите за общим размером вашего(их) вложения(й). Общий размер каждого вложения и сумма размера всех вложений отображаются в панели вложений, как показано ниже:

Условные обозначения:

  1. Общее число вложений
  2. Общий размер вложений
  3. Размер каждого отдельного вложения

Вам необходимо использовать Thunderbird 5 (или выше), чтобы увидеть размер вложения.

Уменьшите размер вложений

Измените размер изображений и сожмите их

Фотографии высокого разрешения занимают много места на диске. Поэтому лучше отправить версию фото в низком разрешении, а не оригинал.

Есть несколько способов сделать это:

  • Используйте менеджер фотографий для отправки фотографий, который, как правило, имеет возможность изменения размера перед отправкой. Большинство операционных систем включают в себя менеджер фотографий, и есть много средств управления фотографиями, доступных для свободной загрузки.
  • На Windows выделите изображения с помощью Windows Explorer и выберите "Отправить в". Windows автоматически предложит сжать фотографии.
  • Установите один из нескольких дополнений Thunderbird, которые автоматически изменяют размер изображений:

Сожмите (запакуйте с помощью zip) ваши данные

Для двоичных файлов, не являющихся изображениями (например, текстовые документы или электронные таблицы), вы можете "запаковать с помощью zip" файлы, которые вы приложите к вашему сообщению ("Zip" является типичным способом сжатия данных и форматом архива. Файлы, которые были запакованы, имеют расширение ".zip").

Это может быть сделано либо:

  • вручную с помощью одного из множества бесплатных инструментов zip, доступных для всех операционных систем.
  • автоматически с помощью дополнения Auto Compress File .

Хотя вы можете "запаковать с помощью zip" файлы изображений, это обычно не намного уменьшает размер файла, поэтому сжатие файлов изображений, как правило, бесполезно.

Используйте внешний сервис хранения

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

Сервис обмена фотографиями

Давняя головная боль, которую все преодолевают по разному. Я нашел такой вот путь, надеюсь кому-нибудь еще пригодится

Итак, небольшой ликбез почему так, а не иначе.

Что дано
- после того как отправляется письмо с CEvent::Send() оно на самом деле сначала добавляется в таблицу b_event как событие и сработает на следующем хите (фактически на вашем же)
- перед добавлением в таблицу вызывается обработчик OnBeforeEventAdd
- после добавления в таблицу (на следующем хите) происходит уже отправка письма; как и что там происходит описывать не буду, потому что туда нам не вклинится - там есть обработчик OnBeforeEventSend, но он вызывается, когда письмо уже формируется, фактически перед отправкой и поздно что-то делать.

Вывод: вклиниться надо в OnBeforeEventAdd.

Скачиваем файл с единственной функцией SendAttache() для отправки нашего письма. Внимание! Функция не предусматривает отправки письма без файла. Складируем ее к себе, подключаем файл (я подключил его в момент отправки письма, чтобы постоянно не копилило).

Пишем обработчик:

AddEventHandler("main", "OnBeforeEventAdd", array("MainHandlers", "OnBeforeEventAddHandler")); class MainHandlers { function OnBeforeEventAddHandler($event, $lid, $arFields) { if ($event == "SALE_NEW_ORDER_YANDEX") { require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/classes/mail_attach.php"); SendAttache($event, $lid, $arFields, "/readme.html"); $event = "null"; $lid = "null"; } } }

В первой строчку я подключаю тот самый файл. Во второй строчке вызываю функцию из файла (переменные те же, что передаются в обработчик + аттач).

А вот третья строчка это чистой воды танец с бубном. Если этого не сделать, то придет два письма по шаблону. Почему? Потому что после обработчика идет добавление в таблицу b_event (см. выше). Но мы то письмо уже отправили (обращаю внимание , что при отправке нашим способом добавления в таблицу не происходит). Значит нам надо сделать так, чтобы будущее добавление в таблицу не повлекло отправку письма. unset у меня почему-то не сработал, поэтому я просто присвоил null.

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

В обработчике лишь пример как можно использовать данную функцию. Логика у каждого своя, поэтому я не стал изощряться.

UPD По поводу $event = "null" пару слов еще. Дело в том, что добавление в таблицу произойдет, но система помаркирует ее как "провал при отправке" и письма не отправится, а через несколько дней запись и вовсе удалится автоматически.

Размер e-mail, или из чего складываются килобаты общего объема письма?

Многие задавались вопросом, из-за чего и как формируется общий объем письма, что больше всего утяжеляет общий объем?
Рассмотрим на конкретном примере, как и из чего накапливаются килобайты.

Дано: электронное письмо размером 274 символа, учитывая пробелы, и прикрепляемый файл с картинкой размером около 81,6 Кбайт (83528 байт).
Спрашивается: почему письмо не поместилось в почтовый ящик, в котором имеется свободное пространство объемом 110 Кбайт (т.е. 112640 байт).

Исходное письмо:

Немного арифметики:
Действительно, на первый взгляд возникает парадокс:
Картинка (83528 байт) + Текст (274 байта) = 83802 байт.
Т.е. примерно 81,8 Кбайт, что явно меньше, чем 110.

Простейшее объяснение, которое приходит в голову практически любому пользователю электронной почты, сводится к учету того, что каждое письмо содержит служебный заголовок, где указываются адреса отправителя и получателей, тема сообщения, дата отправки и прочая информация, необходимая для корректной доставки сообщения.
Это, конечно, правильно, но не совсем: выходит, что в нашем примере заголовок письма занимает чуть больше 28 Кбайт (110 - 81,8). Не многовато ли? Давайте попробуем разобраться. Поможет нам в этом любая почтовая клиентская программа, позволяющая сохранять письмо (полностью с заголовком) в виде файла. Мы будем использовать Microsoft Outlook Express. Проводить подобные эксперименты можно на любом исходном материале.
Запустим программу, создадим сообщение, воспользовавшись кнопкой Создать сообщение панели инструментов.

Затем выполним команду Файл - Сохранить как… меню окна редактора сообщений, чтобы сохранить сообщение в виде файла. Обратите внимание, что следует использовать именно команду Сохранить как, а не Сохранить, так как последняя помещает сообщение в папку Черновики хранилища Outlook Express, а не в файл на диске.

При указании имени файла в диалоговом окне Сохранить сообщение как убедитесь, что в раскрывающемся списке Тип файла выбран вариант Почта (*.eml). В этом режиме в файл сохраняется письмо точно в том виде, в каком оно пересылается по Сети.



Полученный текстовый файл имеет размер примерно 114,9 Кбайт (Очевидно, что это больше 110!). Чтобы понять, какой размер имеет упомянутый ранее служебный заголовок, поступим просто: удалим в редакторе сообщений программы Outlook Express все содержимое письма (текст и картинку), сохраним полученное пустое письмо в отдельном файле и сравним его размер с размером созданного ранее.



Результат может несколько шокировать: получаем примерно 1 Кбайт вместо ожидаемых 28. Значит дело не в заголовке письма, а в его содержимом?! Но в чем именно - в тексте или в картинке… попробуем понять. Для этого удалим из текста исходного письма картинку, сохраним результат в файл и снова оценим размер. Получаем около 2,7 Кбайт).



Выходит, что текст сообщения (274 символа) представлен всего 1,6 Кбайтами (2,7 минус заголовок). Следовательно, из 114,9 Кбайт исходного письма более 112 Кбайт приходятся на вложенную картинку. И это при объеме вкладываемого файла 81,6 Кбайта (!). "Прирост" составил примерно 30,5 Кбайт, т.е. более 30%.
Можно повторить этот эксперимент с разными (не обязательно графическими) файлами и различным их количеством - результат будет стабильным - в электронном письме каждый прикрепляемый файл увеличивается примерно на 33%. Может возникнуть законный вопрос: почему?
Чтобы объяснить этот эффект увеличения размера прикрепляемых файлов, придется разобраться в некоторых принципах работы электронной почты. Если кому-то из вас, уважаемые читатели, это не интересно, то, не сомневаясь, пропустите следующий раздел.
Немного информатики
Технические особенности функционирования электронной почты, приводящие к такому увеличению, имеют исторические корни. Дело в том, что изначально протоколы электронной почты разрабатывались для передачи только текстовых сообщений, причем в формате ASCII (American Standard Code for Information Interchange).
Увы, уже немногим современным пользователям известно, что скрывается за этой аббревиатурой. Стандарт ASCII описывает способ кодирования 33 служебных и 95 печатных символов (всего 128), которые используются для предоставления текстовой информации. Для нас важно выделить следующие свойства кодировки ASCII:
1. Она применима, по сути, только для представления латинского алфавита, цифр и знаков препинания. Символы национальных алфавитов, в том числе и кириллица, в ASCII не представимы. Для решения этой проблемы в свое время был разработан расширенный стандарт ASCII, описывающий возможность кодирования 256 символов.
2. Для представления одного символа в ASCII требуется 7 бит, тогда как для представления произвольной информации, в том числе и текста с использованием национальных символов в расширенной кодировке ASCII, используется понятие байта, состоящего из 8 бит.

Таким образом, изначальная (1982 год) технология электронной почты, рассчитанная на передачу текстовых данных "порциями по 7 бит", оказалась непригодной для передачи произвольных данных, представленных набором байт. В 1993 году был принят стандарт расширения электронной почты MIME (Multipurpose Internet Mail Extensions), который, среди прочего, описывал методы приведения (кодирования) произвольных данных к текстовому виду ASCII. Реализация именно этих методов в современных почтовых программах позволяет нам пересылать друг другу не только латинский текст, но и музыку, фотографии и т.д.
Стандарт MIME предусматривает несколько методов преобразования данных. Для кодирования вложенных файлов обычно используется метод BASE-64. Метод предполагает, что каждые 3 байта прикрепляемого к сообщению файла последовательно заменяются с помощью специальной таблицы подстановки на 4 текстовых символа, из-за чего и происходит 33-х процентное увеличение объема. Естественно, что при сохранении на диск прикрепленных к полученному письму файлов происходит обратное преобразование.
Немного экономики
Давайте теперь обозначим практические следствия, вытекающие из установленного факта увеличения размера вложений:
1. Простейшее следствие представляет сама разбираемая задача - вполне безобидное по предварительным расчетам письмо может не поместиться в ограниченный в размерах почтовый ящик получателя.
2. Это влияет на время доставки сообщения (больший объем требует большего времени на передачу).
3. Это влияет на стоимость доставки сообщения, причем как при повременном варианте оплаты доступа к Интернету (поскольку увеличивается время), так и при варианте оплаты по объему передаваемых данных (очевидно).
Кстати, "информация к размышлению" для тех, кто любит подготавливать письма в редакторе Microsoft Word и отправлять их как вложения в пустое письмо.



Вернемся к нашему примеру. Файл с документом Word, содержащим только текст письма, имеет размер ровно 24 Кбайта. Следовательно, пустое письмо, содержащее только этот файл в качестве вложения, по размеру будет не менее 32 Кбайт (и еще плюс заголовок; для тех, кому интересно, приведем точные данные - 34,3 Кбайта). А ведь если вспомнить описанный выше эксперимент, письмо со вставленным непосредственно текстом имело размер менее 3 Кбайт. Но ведь эта разница, как уже отмечалось, и время, и деньги. Причем не только отправителя, но и получателя, которому придется "выкачивать" письмо с почтового сервера.

И на последок, особенно размер письма увеличивают большие таблицы помещенные в тело письма, с практической точки зрения лучше всего большие таблицы лучше всего помещать в екселевских или вордовских файлах в прикрплении.

С Уважением Богдан

Использовались материалы сайта: http://center.fio.ru/