Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > sendmail и вложения


Автор: Масяня 8.10.2003, 01:46
Привет всем!
Как отправить письмо с вложением используя sendmail?
Помогите, плз!!!

Заранее благодарю за помощь!

Автор: Unregistered 3.12.2003, 16:23
http://search.cpan.org/search?query=sendmail&mode=all
Так что не стоит изобретать велосипед

Автор: Гость_Lonely Ranger 8.12.2003, 09:21
Тут подробно всё описано
http://flyover.xpoint.ru/forums/programming/perl/misc/faq.xhtml#137


Автор: HalkaR 8.12.2003, 20:05
Код
use MIME::QuotedPrint;
use MIME::Base64;
use Mail::Sendmail;

$message = qq[<html><body><h1>Вот то, что просила</h1><img src="pbar.gif><img src="erorr.gif></body></html>];
$message = encoder($message,"win","koi"),
$boundary = "====" . time() . "====";

 %mail = ( To      => 'artur@mail.rin.ru',
           From    => '"Bill Gates" <Bill.Gates@microsoft.org>',
           Subject => 'Subj',
    'Content-Type' => "multipart/mixed; boundary=\"$boundary\" charset=koi8-r",
    'Content-Transfer-Encoding' => '8bit',
    'X-Mailer' => 'Microsoft Outlook Express 6.00.2600.0000',
    smtp    => '192.168.1.80:25',
    'X-MSMail-Priority' => 'High');


$file = 'send.pl'; #Здесь пишешь название файла, которы отправляешь.
open (F, $file) or die "Cannot read $file: $!";
binmode F; undef $/;
$mail{body} = encode_base64(<F>);
close F;

$boundary = '--'.$boundary;
$mail{body} = <<END_OF_BODY;
$boundary
Content-Type: text/html; charset="koi8-r"
Content-Transfer-Encoding: 8bit

$message
$boundary
Content-Type: application/octet-stream; name="$file"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$file"

$mail{body}
$boundary--\n
END_OF_BODY


 sendmail(%mail) or die $Mail::Sendmail::error;



 print "OK. Log says:\n", $Mail::Sendmail::log;

sub encoder {
my $enstring=shift; my $cfrom=shift; my $cto=shift;
my %codefunk=(
#win=>"\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF",
#koi=>"\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1",
#iso=>"\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF",
#dos=>"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF",
win=>"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёЁ",
koi=>"бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАСЈі",
iso=>"°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопсЎ",
dos=>"Ђ?‚ѓ„…†‡?‰Љ‹Њ?Ћ??‘’“”•–—&#152;™љ›њ?ћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Їабвгдежзийклмнопср",
koi_lc=>"tr/\xB3\xE0-\xFF/\xA3\xC0-\xDF/", koi_uc=>"tr/\xA3\xC0-\xDF/\xB3\xE0-\xFF/",
win_lc=>"tr/\xA8\xC0-\xDF/\xB8\xE0-\xFF/", win_uc=>"tr/\xB8\xE0-\xFF/\xA8\xC0-\xDF/",
alt_lc=>"tr/\xF0\x80-\x9F/\xF1\xA0-\xAF\xE0-\xEF/", alt_uc=>"tr/\xF1\xA0-\xAF\xE0-\xEF/\xF0\x80-\x9F/",
iso_lc=>"tr/\xA1\xB0-\xCF/\xF1\xD0-\xEF/", iso_uc=>"tr/\xF1\xD0-\xEF/\xA1\xB0-\xCF/",
dos_lc=>"tr/\x80-\x9F/\xA0-\xAF\xE0-\xEF/", dos_uc=>"tr/\xA0-\xAF\xE0-\xEF/\x80-\x9F/",
mac_lc=>"tr/\xDD\x80-\xDF/\xDE\xE0-\xFE\xDF/", mac_uc=>"tr/\xDE\xE0-\xFE\xDF/\xDD\x80-\xDF/"
);

if (!$enstring or !$cfrom or !$cto) {return 0}
else {
   if ($cfrom ne "" and $cto ne "lc" and $cto ne "uc") {
      $_=$enstring;$cfrom=$codefunk{$cfrom};$cto=$codefunk{$cto};
      eval "tr/$cfrom/$cto/"; return $_;
   }
   elsif (($cfrom ne "") and ($cto eq "lc" or $cto eq "uc")) {
      $_=$enstring; $cfrom=$codefunk{"$cfrom\_$cto"};
      eval $cfrom; return $_;
   }
}
return $enstring;
}
Данный скрипт отправляет файл с помощью модуля Mail, но принцип формирования послания одинаковый.

Автор: Raptus Melanholicus 6.1.2004, 10:24
Я рекомендую использовать модуль http://search.cpan.org/~yves/MIME-Lite-3.01/lib/MIME/Lite.pm и не мучаться.

Автор: wd_and 10.1.2004, 11:55
Код
  use Mail::Sender;
 eval {
              (new Mail::Sender)
               ->OpenMultipart({
                       smtp => '192.168.0.111',
                         to => $User_Send,
                       from => $tmpFrom,
                       subject => $Subject,
                       multipart => 'mixed',
                       priority => $TmpID,                        
               })
               ->Part({ctype => 'multipart/alternative'})                
               ->Part({ctype => 'text/html', charset => 'windows-1251', disposition => 'NONE', msg =>$html })
               ->Part({ctype => 'text/plane', disposition => 'NONE', msg =>'UTM' })
               ->EndPart("multipart/alternative")

               ->Attach({  description => 'File',
                           ctype => $TmpFileType,
                           encoding => 'base64',
                           disposition => "inline; filename=$TmpFileName;",
                           file => $TmpFileLink
                       })

       ->Close();
       }

Это пример с моего скрипта.
Где:
$html = HTML - текст сообщения.
$TmpFileName - название файла в аттаче.
$TmpFileLink- путь к файлу.
$TmpID - приоритет письма (то 1 до 5).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)