URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 53989
[ Назад ]

Исходное сообщение
"Отправлять почту с аттачем"

Отправлено alexeylomov , 01-Мрт-05 17:30 
Здравствуйте. Мне нужно скриптом на Перл отправлять почту с аттачем и текстом.
С текстом у меня всё получается, а вот с аттачем никак не могу разобраться.
Киньте, пожалуйста, ссылочку, где можно подробно про это почитать, или объясните как аттач работает.
Поиском много примеров находил, но там везде аттач без текста, а сделать также, но с текстом у меня не получается.

Содержание

Сообщения в этом обсуждении
"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 18:51 
Или просто посмотрите, и скажите что не так?
open( SENDMAIL, "|/usr/sbin/sendmail -t" );
print SENDMAIL "To: $email\n";
print SENDMAIL "From: SELFMAILER\n";
print SENDMAIL "Subject: $subject\n\n";
print SENDMAIL "MIME-Version: 1.0\n";
print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n";
print SENDMAIL "--NEWMAIL\n";
print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
print SENDMAIL "Current time:$time\nMessage:\n";
foreach $str( @str ) { print SENDMAIL $str; }
print SENDMAIL "--NEWMAIL\n";
print SENDMAIL "Content-Type: application/unknown; name=$file\n";
print SENDMAIL "Content-Transfer-Encoding: base64\n";
print SENDMAIL "--NEWMAIL--";
close( SENDMAIL );

"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 18:58 
>print SENDMAIL "Subject: $subject\n\n";
На вскидку: один \n лишний.

"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 19:01 
>>print SENDMAIL "Subject: $subject\n\n";
>На вскидку: один \n лишний.


Убрал, теперь вообще пустое письмо пришло...


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 19:18 
>>>print SENDMAIL "Subject: $subject\n\n";
>>На вскидку: один \n лишний.
>Убрал, теперь вообще пустое письмо пришло...
>>>print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n";
Ну добавьте "\n" в конец строки


>>>print SENDMAIL "--NEWMAIL\n";
И здесь "\n" в начало. (это второй --NEWMAIL)


"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 19:33 
>>>>print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n";
>Ну добавьте "\n" в конец строки

Ещё один? Хорошо, добавил.

>>>>print SENDMAIL "--NEWMAIL\n";
>И здесь "\n" в начало. (это второй --NEWMAIL)

Готово.

Получилось:
open( SENDMAIL, "|/usr/sbin/sendmail -t" ) or die "Can't fork for sendmail: $!\n";
print SENDMAIL "To: $email\n";
print SENDMAIL "From: SELFMAILER\n";
print SENDMAIL "Subject: $subject\n";
print SENDMAIL "MIME-Version: 1.0\n";
print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n\n";
print SENDMAIL "--NEWMAIL\n";
print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
print SENDMAIL "Current time:$time\nMessage:\n";
foreach $str( @str ) { print SENDMAIL $str; }
print SENDMAIL "\n--NEWMAIL\n";
print SENDMAIL "Content-Type: application/unknown; name=$file\n";
print SENDMAIL "Content-Transfer-Encoding: base64\n";
print SENDMAIL "--NEWMAIL--\n";

Только опять пустое письмо пришло...


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 19:46 
>Только опять пустое письмо пришло...
Не поленился запустил:
#!/usr/local/bin/perl
$email="unk\@localhost";
$subject="test";
$time="HH:MM:SS";
@str=("foo\n", "bar\n", "zuka\n");
$file="foo.bar";
open( SENDMAIL, "|/usr/sbin/sendmail -t" ) or die "Can't fork for sendmail: $!\n";
print SENDMAIL "To: $email\n";
print SENDMAIL "From: SELFMAILER\n";
print SENDMAIL "Subject: $subject\n";
print SENDMAIL "MIME-Version: 1.0\n";
print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n\n";
print SENDMAIL "--NEWMAIL\n";
print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
print SENDMAIL "Current time:$time\nMessage:\n";
foreach $str( @str ) { print SENDMAIL $str; }
print SENDMAIL "\n--NEWMAIL\n";
print SENDMAIL "Content-Type: application/unknown; name=$file\n";
print SENDMAIL "Content-Transfer-Encoding: base64\n";
foreach $str( @str ) { print SENDMAIL $str; }
print SENDMAIL "--NEWMAIL--\n"
<EOF>
У меня работает как положено.

"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 19:51 
>>Только опять пустое письмо пришло...
>Не поленился запустил:
>#!/usr/local/bin/perl
>$email="unk\@localhost";
>$subject="test";
>$time="HH:MM:SS";
>@str=("foo\n", "bar\n", "zuka\n");
>$file="foo.bar";
>open( SENDMAIL, "|/usr/sbin/sendmail -t" ) or die "Can't fork for sendmail: $!\n";
>
>print SENDMAIL "To: $email\n";
>print SENDMAIL "From: SELFMAILER\n";
>print SENDMAIL "Subject: $subject\n";
>print SENDMAIL "MIME-Version: 1.0\n";
>print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n\n";
>print SENDMAIL "--NEWMAIL\n";
>print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
>print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
>print SENDMAIL "Current time:$time\nMessage:\n";
>foreach $str( @str ) { print SENDMAIL $str; }
>print SENDMAIL "\n--NEWMAIL\n";
>print SENDMAIL "Content-Type: application/unknown; name=$file\n";
>print SENDMAIL "Content-Transfer-Encoding: base64\n";
>foreach $str( @str ) { print SENDMAIL $str; }
>print SENDMAIL "--NEWMAIL--\n"
><EOF>
>У меня работает как положено.

Круто. Повезло :) А у меня не работает... Пойду рвать на себе волосы...


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 19:55 
>Круто. Повезло :) А у меня не работает... Пойду рвать на себе
>волосы...
Когда закончите, то вместо sendmail -t запишите письмо в файл и покажите что у вас получается.

"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 20:00 
>>Круто. Повезло :) А у меня не работает... Пойду рвать на себе
>>волосы...
>Когда закончите, то вместо sendmail -t запишите письмо в файл и покажите
>что у вас получается.

Вот такой текстовый файл получается:
To: alexey@alexhost.ru
From: SELFMAILER
Subject: Testing Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="NEWMAIL"

--NEWMAIL
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
Current time:Tue Mar  1 19:28:56 MSK 2005
Message:
privet :)

--NEWMAIL
Content-Type: application/unknown; name=/home/admin/file.err
Content-Transfer-Encoding: base64
--NEWMAIL--


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 20:05 
>Вот такой текстовый файл получается:
>Content-Transfer-Encoding: 8bit
Если ниже должно начинаться письмо то после 8bit добавьте \n

>Current time:Tue Mar  1 19:28:56 MSK 2005
>--NEWMAIL
>Content-Type: application/unknown; name=/home/admin/file.err
>Content-Transfer-Encoding: base64
Сюда тоже "\n"
И собственно атач не плохобы вставить.
>--NEWMAIL--


"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 20:17 
>>Вот такой текстовый файл получается:
>>Content-Transfer-Encoding: 8bit
>Если ниже должно начинаться письмо то после 8bit добавьте \n
>
>>Current time:Tue Mar  1 19:28:56 MSK 2005
>>--NEWMAIL
>>Content-Type: application/unknown; name=/home/admin/file.err
>>Content-Transfer-Encoding: base64
>Сюда тоже "\n"
>И собственно атач не плохобы вставить.
>>--NEWMAIL--

Ок. Сделал.
Теперь письмо приходит.  И текст и файл (пока пустой). Спасибо.
И вопрос тогда сразу, можно ли несколько аттачей в один Content-Type вписать, или надо каждому вложенному файлу писать  --NEWMAIL ?


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 20:30 
>И вопрос тогда сразу, можно ли несколько аттачей в один Content-Type вписать,
>или надо каждому вложенному файлу писать  --NEWMAIL ?
Если Content-Type что то вроде "text/plain" то можно, иначе лучше делать отдельную секцию.

"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 19:57 
>>Только опять пустое письмо пришло...
>Не поленился запустил:
>#!/usr/local/bin/perl
>$email="unk\@localhost";
>$subject="test";
>$time="HH:MM:SS";
>@str=("foo\n", "bar\n", "zuka\n");
>$file="foo.bar";
>open( SENDMAIL, "|/usr/sbin/sendmail -t" ) or die "Can't fork for sendmail: $!\n";
>
>print SENDMAIL "To: $email\n";
>print SENDMAIL "From: SELFMAILER\n";
>print SENDMAIL "Subject: $subject\n";
>print SENDMAIL "MIME-Version: 1.0\n";
>print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n\n";
>print SENDMAIL "--NEWMAIL\n";
>print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
>print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
>print SENDMAIL "Current time:$time\nMessage:\n";
>foreach $str( @str ) { print SENDMAIL $str; }
>print SENDMAIL "\n--NEWMAIL\n";
>print SENDMAIL "Content-Type: application/unknown; name=$file\n";
>print SENDMAIL "Content-Transfer-Encoding: base64\n";
>foreach $str( @str ) { print SENDMAIL $str; }
>print SENDMAIL "--NEWMAIL--\n"
><EOF>
>У меня работает как положено.

Что, реально приходит письмо с текстом
foo
bar
zuka
и присоединённым foo.bar ?
У меня 1 в 1 так же написано, и не приходит (точнее приходит пустое)


"Отправлять почту с аттачем"
Отправлено alexeylomov , 01-Мрт-05 19:47 
>Получилось:
>open( SENDMAIL, "|/usr/sbin/sendmail -t" ) or die "Can't fork for sendmail: $!\n";
>
>print SENDMAIL "To: $email\n";
>print SENDMAIL "From: SELFMAILER\n";
>print SENDMAIL "Subject: $subject\n";
>print SENDMAIL "MIME-Version: 1.0\n";
>print SENDMAIL "Content-Type: multipart/mixed; boundary=\"NEWMAIL\"\n\n";
>print SENDMAIL "--NEWMAIL\n";
>print SENDMAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
>print SENDMAIL "Content-Transfer-Encoding: 8bit\n";
>print SENDMAIL "Current time:$time\nMessage:\n";
>foreach $str( @str ) { print SENDMAIL $str; }
>print SENDMAIL "\n--NEWMAIL\n";
>print SENDMAIL "Content-Type: application/unknown; name=$file\n";
>print SENDMAIL "Content-Transfer-Encoding: base64\n";
>print SENDMAIL "--NEWMAIL--\n";
>
>Только опять пустое письмо пришло...

Кстати, примечание: если при этом после Subject: $subject\n написать ещё \n то приходит письмо с текстом
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="NEWMAIL"

--NEWMAIL
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
Current time:Tue Mar  1 19:08:32 MSK 2005
Message:
privet

--NEWMAIL
Content-Type: application/unknown; name=/home/admin/file.err
Content-Transfer-Encoding: base64
--NEWMAIL--

Забавно...


"Отправлять почту с аттачем"
Отправлено unk , 01-Мрт-05 19:50 
>Кстати, примечание: если при этом после Subject: $subject\n написать ещё \n  
>приходит письмо с текстом
А что вас удивляет???
^\n\r это разделитель между заголовком и телом в письме.

"Отправлять почту с аттачем"
Отправлено Simps , 02-Мрт-05 09:24 
>>Кстати, примечание: если при этом после Subject: $subject\n написать ещё \n  
>>приходит письмо с текстом
>А что вас удивляет???
>^\n\r это разделитель между заголовком и телом в письме.

Всегда поражали люди игнорирующие CPAN и изобретающие велосипед =)


"Отправлять почту с аттачем"
Отправлено unk , 02-Мрт-05 09:37 
>Всегда поражали люди игнорирующие CPAN и изобретающие велосипед =)
У каждого свой выбор :) Если человеку хочется, то почему бы и нет...
А так смотрите:
Идем на CPAN берем MIME-tools, смотрим - оно хочет IO-stringy, MailTools, TimeDate, Unicode-Map и Unicode-String; Эти модули потянут еще минимум 10 модулей.
Не много ли для отправки одного простенького письмеца?


"Отправлять почту с аттачем"
Отправлено Simps , 02-Мрт-05 10:04 
>>Всегда поражали люди игнорирующие CPAN и изобретающие велосипед =)
>У каждого свой выбор :) Если человеку хочется, то почему бы и
>нет...
>А так смотрите:
>Идем на CPAN берем MIME-tools, смотрим - оно хочет IO-stringy, MailTools, TimeDate,
>Unicode-Map и Unicode-String; Эти модули потянут еще минимум 10 модулей.
>Не много ли для отправки одного простенького письмеца?

Понимаю =) Проще вот уже 4-й день париться =)


"Отправлять почту с аттачем"
Отправлено unk , 02-Мрт-05 10:11 
>Понимаю =) Проще вот уже 4-й день париться =)
Это карма автора треда. :)
Я потратил минуту на его скрипт и минут 15 на посты:)



"Отправлять почту с аттачем"
Отправлено alexeylomov , 02-Мрт-05 16:01 
>Всегда поражали люди игнорирующие CPAN и изобретающие велосипед =)
Если б я мог, то так бы и поступил.
>>У каждого свой выбор :) Если человеку хочется, то почему бы и
>>нет...
>>А так смотрите:
>>Идем на CPAN берем MIME-tools, смотрим - оно хочет IO-stringy, MailTools, TimeDate,
>>Unicode-Map и Unicode-String; Эти модули потянут еще минимум 10 модулей.
>>Не много ли для отправки одного простенького письмеца?
И не только:)  Потом ещё придётся ставить все эти модули на каждую машину, с которой хочу запустить этот скрипт.
Короче, велосипед - это единственный выход.
>Понимаю =) Проще вот уже 4-й день париться =)
Не то, чтобы проще, но учиться никогда не поздно :)
>Это карма автора треда. :)
>Я потратил минуту на его скрипт и минут 15 на посты:)
Это антикарма, я бы сказал... Ну что делать, бывает у меня такое :)

"Отправлять почту с аттачем"
Отправлено Nimdar , 02-Мрт-05 18:32 
А на хрена MIME::Tools?
Ставишь MIME::Lite.
man MIME::Lite

"Отправлять почту с аттачем"
Отправлено alexeylomov , 02-Мрт-05 19:04 
Ни на хрена, а не подходит он мне. Мне вообще ничто не подходит, так как конфигурация той машины, с которой должна отправляться почта может быть любой!!!

"Отправлять почту с аттачем"
Отправлено Nimdar , 02-Мрт-05 19:10 
>Ни на хрена, а не подходит он мне. Мне вообще ничто не
>подходит, так как конфигурация той машины, с которой должна отправляться почта
>может быть любой!!!

Ню-ню. Тогда желаю удачи в изобретении велосипеда с квадратными колесами.


"Отправлять почту с аттачем"
Отправлено alexeylomov , 02-Мрт-05 19:31 
>Ню-ню. Тогда желаю удачи в изобретении велосипеда с квадратными колесами.

Так я уже изобрёл, и колёса нормальные, круглые... Спасибо за беспокойство :)


"Отправлять почту с аттачем"
Отправлено EHoT , 03-Мрт-05 08:45 
а так не проще?

/usr/local/bin/mpack -s Subject-of-mail -d /home/text-of-mail-body /mnt/share/ttn/file-to-send user-to-send\@domain.ru`;


"Отправлять почту с аттачем"
Отправлено Azazelo , 03-Мрт-05 08:54 
>Здравствуйте. Мне нужно скриптом на Перл отправлять почту с аттачем и текстом.
>
>С текстом у меня всё получается, а вот с аттачем никак не
>могу разобраться.
>Киньте, пожалуйста, ссылочку, где можно подробно про это почитать, или объясните как
>аттач работает.
>Поиском много примеров находил, но там везде аттач без текста, а сделать
>также, но с текстом у меня не получается.
кажется подойдет .
http://linuxportal.ru/print.php/86_0_3_0_M/


"Отправлять почту с аттачем"
Отправлено A Clockwork Orange , 03-Мрт-05 09:46 
У нас работает такой скрипт, привожу вырезку
#!/usr/bin/perl -w
##

use strict;
use Mail::Sender;
#use Fcntl;

.....

$sender = new Mail::Sender
  {smtp => 'mail.strs.ru', from => 'b@s.ru'};
$sender->MailFile({to => 'bu@s.ru',
  subject => "La la la",
  msg => "La la la.",
  file => "/usr/stat/.stcsv"});