Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

use Data::Dumper;
warn(Dumper(\%ENV));

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

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 в веб-браузере?

scroll top