Как я могу отправить вложение электронной почты, не используя дополнительную библиотеку в Perl? - PullRequest
2 голосов
/ 26 мая 2009

Привет, мне было интересно, есть ли способ прикрепить файлы (в частности, файлы .csv) к почтовому сообщению в Perl, не используя MIME :: Lite или любые другие библиотеки.

Прямо сейчас, у меня есть «почтовая функция», которая прекрасно работает, но я не уверен, как адаптировать ее для прикрепления файлов. Вот что у меня есть:

open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "To: cheese\@yahoo.com\n";
print MAIL "From: queso\@what.com\n";
print MAIL "Subject: Attached is $filename\n\n";
print MAIL "$message";
close(MAIL);

Я думаю, что это специфично для UNIX.

Ответы [ 6 ]

12 голосов
/ 26 мая 2009

Почему вы хотите написать код, который уже существует? Вероятно, есть гораздо лучший способ решить вашу задачу, чем воссоздавать ошибки и самостоятельно поддерживать больше кода. У вас проблемы с установкой модулей? Есть также способы, которыми вы можете распространять сторонние модули вместе с вашим кодом.

Если вы хотите сделать это самостоятельно, вам просто нужно сделать то же самое, что модуль делает для вас. Вы можете просто посмотреть на код, чтобы увидеть, что они сделали. Вы просто делаете это. В конце концов, это открытый исходный код. :)

7 голосов
/ 26 мая 2009

Если частью вашей проблемы является то, что вы используете общий хостинг и не можете установить дополнительные библиотеки, они обычно могут быть установлены (и использованы из) локальной библиотеки (например, ~ / lib). Инструкции для этого более здесь (в разделе «У меня нет разрешения на установку модуля в системе!»).

2 голосов
/ 26 мая 2009

Общие советы по стилю для облегчения вашей жизни:

Т.е.:

open my $mail, '|-', '/usr/sbin/sendmail', '-t'  or Carp::croak("Cant start sendmail, $! $@");

print $mail  "foo";

close $mail or Carp::croak("SendMail might have died! :( , $! $@");

perldoc -f открыто

1 голос
/ 10 марта 2015

Пример. Отправьте заархивированный файл по электронной почте в виде вложения:

base64 /path/to/my/file.zip | mail -s "Subject" recipient@mydomain.com -a 'Content-Type: application/zip; name="myfile.zip"' -a 'Content-Disposition: attachment' -a 'Content-Transfer-Encoding: base64'
1 голос
/ 26 мая 2009

Вы можете указать заголовки почты как:

Content-Type, т.е.: image / jpeg; Name = "File.jpg"
Содержание-расположение (т. Е.) Вложение; имя файла = "name.jpg"
Content-Transfer-Encoding (то есть) base64

Посмотрите на письмо, отправленное с приложением, которое должно вам помочь.

уловка состоит из нескольких частей.
http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

0 голосов
/ 21 мая 2010
print "To: ";       my $to=<>;      chomp $to;
print "From: ";     my $from=<>;    chomp $from;
print "Attach: ";   my $attach=<>;  chomp $attach;
print "Subject: ";  my $subject=<>; chomp $subject;
print "Message: ";  my $message=<>; chomp $message;

my $mail_fh = \*MAIL;
open $mail_fh, "|uuencode $attach $attach |mailx -m -s \"$subject\" -r $from $to";
print $mail_fh $message;
close($mail_fh);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...