Ajuda com programa canalizado no / etc / aliases do sendmail

5

Estou tentando algum tipo de assinatura automática por meio de um script interno. Eu sei que pode ser conseguido através de listas de discussão, como o Mailman, mas também quero aprender ao mesmo tempo sobre como fazê-lo à mão.

Aqui está o script simples:

#!/usr/bin/perl

use strict;
use warnings;

open ("RCV_MAIL", ">>/home/icasimpan/mail_received.txt") or die $!;
while(<STDIN>){
   print RCV_MAIL;
}
close(RCV_MAIL);

Anexei o script acima em / etc / aliases usando a sintaxe:

subscribe: | /home/icasimpan/parse-subscribe.pl

e execute

$ sudo newaliases

Ainda é um roteiro muito simples. Apenas testando se minha sintaxe em / etc / aliases está correta.

Mas quando tentei enviar um email para [email protected], ele retorna algo como:

Delivery failure 69

Estou usando o Lotus Notes para que minha pesquisa no Google me direcione para este link . Aparentemente, algo a ver com o arquivo ... Não tenho certeza.

O comando é executável, na verdade eu tentei fazê-lo 777 e até mesmo criei o mail_received.txt no diretório apenas para garantir que eu não tenha nenhum problema de permissão de arquivo mas ainda assim o mesmo.

Alguém pode contribuir por favor?

Obrigado antecipadamente.

    
por icasimpan 28.01.2011 / 04:12

3 respostas

4

Se você estiver executando um sendmail com o smrsh configurado (comum em várias configurações padrão), você precisará executar o comando canalizado do / etc / smrsh /. Pode ser um link simbólico ou uma cópia do script, mas se o sendmail tiver 'smrsh' definido, ele precisará ser executado a partir desse diretório. Por exemplo:

subscribe: | /etc/smrsh/parse-subscribe.pl

Verifique a documentação do sendmail no smrsh para mais detalhes.

    
por 28.01.2011 / 14:21
3

Você precisa citar o "alias" se ele tiver um espaço:

subscribe: "| /home/icasimpan/parse-subscribe.pl"

ou remova o espaço:

subscribe: |/home/icasimpan/parse-subscribe.pl
    
por 28.01.2011 / 23:40
-1
open ("RCV_MAIL", ">>/home/icasimpan/mail_received.txt") or die $!;
while(<STDIN>){
   print RCV_MAIL;
}

está errado.

Se você estiver tentando imprimir linhas de STDIN para mail_received.txt, precisará:

open (RCV_MAIL, ">>/home/icasimpan/mail_received.txt") or die $!;
while (<STDIN>) {
   print RCV_MAIL $_;
}

porque print com um argumento leva o argumento a significar a lista a ser impressa, não o filehandle para imprimi-lo.

$ perldoc -f print
print FILEHANDLE LIST
print LIST
...

Além disso, não há necessidade de cotações em torno do nome do filehandle em open . Apenas use RCV_MAIL .

    
por 28.01.2011 / 08:30