В чем разница между sendmail через CGI и Perl? - PullRequest
2 голосов
/ 02 мая 2009

Я использую sendmail в perl и заметил (после долгих ударов головой о стену), что когда скрипт запускается из командной строки, вам нужно пропустить \ n (s) после вашей электронной почты и получателя. адрес электронной почты для правильного форматирования почты, но при запуске через CGI, если эти \ n (s) отсутствуют, он возвращает ошибку, указывающую, что электронная почта получателя искажена.

Кто-нибудь еще сталкивался с этим? Что они делают по-разному?

Ответы [ 5 ]

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

Готов поспорить, что вы получаете данные из подсказок в командной строке, а не chomp , например:

my $send_to = <>;

Это означает, что $ send_to уже будет иметь "\ n". Чтобы заставить их работать одинаково, скомпонуйте переменные:

my $send_to = <>;
chomp($send_to);

или просто

chomp(my $send_to = <>);
0 голосов
/ 05 мая 2009

В нескольких ваших комментариях вы упоминаете, что запускаете скрипт из командной строки с параметром -l (perl -l foo.cgi).

Опция -l включает автоматическую обработку конца строки, и, поскольку ваша проблема связана с окончаниями строки, я предлагаю вам попробовать без -l.

0 голосов
/ 05 мая 2009

Итак, я предполагаю, что у вас есть что-то вроде этого для запуска через командную строку:

my $your_email = "you@foo.bar";
my $recipient_email = "them@foo.bar";

и это при "работе через CGI":

my $your_email = "you@foo.bar\n";
my $recipient_email = "them@foo.bar\n";

Итак, вопрос, который я бы вам задал, заключается в том, как вы вызываете sendmail с указанными выше переменными, а также что вы имеете в виду, когда говорите «работает через CGI», а не через командную строку? Вы просто добавляете код CGI и по-прежнему работаете через командную строку или посещаете его URL в веб-браузере?

0 голосов
/ 02 мая 2009

Термин "CGI" является широким, если вы имеете в виду, что ваш Perl-скрипт выполняется как CGI по сравнению с Perl-скриптом YUR в командной строке, я бы посмотрел на путь, который имеет скрипт, и его общую унаследованную среду. Особенно, если вы используете его как разные идентификаторы пользователей. Если веб-сервер находится в chroot и т. Д.

use Data::Dumper;
warn(Dumper(\%ENV));
0 голосов
/ 02 мая 2009

Откуда поступают данные? Жестко закодировано в скрипте или из веб-формы?

Кроме того, если вы получите адрес электронной почты получателя из веб-формы, ваша форма будет использоваться спаммерами. Это 100% гарантия.

...