Помогите при отправке электронной почты используя команду linux mail в CGI-скрипте perl - PullRequest
0 голосов
/ 17 января 2011

Как я могу отправить html-сообщение с помощью командной строки linux внутри CGI-скрипта perl.Я попробовал:

system(echo $message | mail -s $subject $email);

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Perl не является оболочкой.Здесь вы вызываете некоторую подпрограмму Perl с «голым словом» echo и передаете значение $message двоичное или-ed с выводом некоторого подпрограммы с именем mail, которому передается размер файла с именемв $subject (-s оператор) - и мы можем получить это далеко только после полного игнорирования того, что он даже не скомпилируется, потому что между $email и выражением перед ним нет оператора.

В Perl вам нужны кавычки для ваших системных команд.Но поскольку в $message может быть любое количество символов, из-за которых трудно передать «как есть» в оболочку, лучше всего открыть канал и вывести на него:

use English qw<$OS_ERROR>;

open( my $mailh, '|-', "mail -s '$subject' $email" )
    or die( "Could not open pipe! $OS_ERROR" )
    ;
print $mailh $message;
close $mailh;
0 голосов
/ 19 января 2011

Взгляните на Net :: SMTP .

Из документации:

Этот модуль реализует интерфейс клиента к протоколам SMTP и ESMTP, позволяя приложению perl5 взаимодействовать с серверами SMTP.

...

В этом примере отправляется небольшое сообщение администратору почты на SMTP-сервере, известном как mailhost:

#!/usr/local/bin/perl -w

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');

$smtp->mail($ENV{USER});
$smtp->to('postmaster');

$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();

$smtp->quit;
...