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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top