Статья представляет собой обобщение темы форума с одноименным названием.
Было предложено несколько рабочих вариантов.
Первый предложен ezhikov и основан на использовании perl.
Формируй тело сообщения из perl
#!/usr/bin/perl
# путь к sendmail
$mailprog = "/usr/sbin/sendmail";
# путь к файлу с указанием имени файла
$attach_file = "/path/to/file.gz";
# имя файла
$filename = "file.gz";
# MIME-граница для разделения различных частей MIME-сообщения.
# Просто уникальная строка
$boundary = "ABRACADARBRA".time;
# получатель
$to = 'email@domain.ru';
# отправитель
$from = 'mailbox@somedomain.ru';
# Имя отправителя
$name = "Имя отправителя";
# тема сообщения
$subject = 'Тема сообщения';
# текстовое сообщение, помещается в тело письма
$message = 'Некоторое текстовое сообщение';
open (MAIL, "|$mailprog -t");
print MAIL <
From: $name<$from>
To: $to
Subject: $subject
X-mail-agent: Crond mailer
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="$boundary"
--$boundary
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
$message
--$boundary
Content-Type: application/octet-stream; name="$filename"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$filename"
END
# кодируем присоединенный файл по стандарту Base64.
# Для этого вызываем подпрограмму base64_encode_file с именем файла.
$binary_encoded_data = &base64_encode_file($attach_file);
# Вставляем закодированное содержимое файла
print MAIL <
$binary_encoded_data
--$boundary--
.
END
close MAIL;
ну и подпрограмма кодирования base 64
sub base64_encode_file {
local($file) = $_[0];
local($encoded, $line) = '';
local($len, $bytes, $pad) = 0;
open (DATA, "<$file");
while ($bytes = read(DATA, $line, 45)) {
$len += $bytes;
$encoded .= substr(pack('u', $line), 1);
chop($encoded);
}
$encoded =~ tr| -_`|A-Za-z0-9+/A|;
$pad = (3 - ($len % 3)) % 3;
substr($encoded, -$pad, $pad) = '=' x $pad;
$encoded =~ s/(.{76})/$1\n/g;
return($encoded);
}
Второй вариант был предложен kaboom и основан на использовании консольного почтового клиента mutt.
mutt email@address -a прикрепленный_файл -s "Тема письма" < файл_содержащий_текст_письма
Или вариант 2, модифицированный Материалист
echo "текст письма" | mutt email@address -a прикрепленный_файл -s "Тема письма".
Третий вариант предложен Dr.Spectre.
cat text.txt | uuencode text.txt | mail -s TEST email@address
или вариант 3, модифицированный Ananas, который сжимает прикрепленный файл для уменьшения размера письма
gzip -c text | uuencode text.gz | mail -s TEST email@address
Автор темы - Материалист в поисках нашел специальную утилиту для отправки писем с прикрепленными файлами - Biabam (находится здесь
Опубликовал: Alexey Dmitriev
Дата: 30.07.2003
постоянный адрес статьи: http://linuxportal.ru/entry.php/P86_0_3_0/
|