Qual é a diferença entre o sendmail via CGI vs. Perl?
Pergunta
Eu estou usando sendmail em perl e notei (depois de muito bater de cabeça contra a parede) que quando o script é executado na linha de comando que precisa de você para deixar de fora o \ n (s) após o seu e-mail e do destinatário endereço de e-mail, a fim de formatar o e-mail corretamente, mas quando executado via CGI se aqueles \ n (s) não estão lá ele retorna um erro informando que o email do destinatário é mal formado.
Tem mais alguém encontrou isso? Quais são os dois fazendo de diferente?
Solução
Em um par de seus comentários que você menciona que você está executando o script a partir da linha de comando com a opção -l (perl -l foo.cgi).
A opção -l permite o processamento de fim de linha automático, e como o seu problema é com fins de linha, eu sugiro que você experimentá-lo sem a -l.
Outras dicas
Eu estou apostando que você está recebendo dados de prompts no na linha de comando e não chomp ing-los como este:
my $send_to = <>;
Isto significa $ send_to já terá um "\ n". Para torná-los tanto o trabalho da mesma forma chomp as variáveis:
my $send_to = <>;
chomp($send_to);
ou apenas
chomp(my $send_to = <>);
Onde está a dados provenientes? Codificado no script, ou a partir de um formulário web?
Apenas como um aparte, se você obter o endereço de email do destinatário de um formulário web, seu formulário de irá ser usado por spammers. É uma garantia de 100%.
O termo "CGI" é amplo, se você quer dizer sua corrida script perl como um CGI contra yur prazo PerlScript na linha de comando, gostaria de olhar para o pathing que o script tem e seu ambiente herdado geral. Especialmente se o seu executá-lo como diferentes userids. Se o servidor está em um chroot, etc.
use Data::Dumper;
warn(Dumper(\%ENV));
Então, eu estou supondo que você tem algo como este para executá-lo através da linha de comando:
my $your_email = "you@foo.bar";
my $recipient_email = "them@foo.bar";
e isto quando "correr via CGI":
my $your_email = "you@foo.bar\n";
my $recipient_email = "them@foo.bar\n";
Assim, a pergunta que eu gostaria de lhe pedir, em seguida, é como você está chamando sendmail com as variáveis ??acima, e também o que você quer dizer quando diz "correr via CGI" versus executando através da linha de comando? Você está apenas adicionando código CGI e ainda correndo através da linha de comando ou visitando seu URL em um navegador da web?