On Mon, 19 Mar 2001, FokusMedia - Linux wrote:

> tem alguma forma de fazer com que o SendMail envie mensagens somente para
> e-mails pré-determinados?
> 
> Por ex: Envie e-mails somente para os:
> [EMAIL PROTECTED]
> [EMAIL PROTECTED]
> 
> E não envie para mais ninguém?


E' provavel que exista algo ja' definido no "M4 Configuration" para
resolver esse problema, ou algo em anti-SPAM que possa ser usado
tambem.  Mas vou descrever como eu faria se fosse implementar isso
diretamente.

Para _entender_ o que vou fazer e' preciso conhecer bem configuracoes
do sendmail, existem muitos tutoriais por ai', alguns em portugues
inclusive.

Para quem quer se aprofundar no Sendmail:

        http://www.dicas-l.unicamp.br/dicas-l/Treinamentos/
        http://www.sendmail.org/
        http://www.sendmail.org/faq/
        http://google.com  ;)

        sendmail
        Bryan Costales with Eric Allman
        2nd Edition
        O'Reilly & Associates (www.ora.com)
        ISBN: 1-56592-222-0


Em resumo, provavelmente nao vou RESOLVER o seu problema, mas vou
passar dicas de como o problema pode ser resolvido, para quem sabe
alterar as configuracoes de um sendmail padrao.



Para fazer o que voce quer, voce pode programar isso na "regra zero",
que e' a regra que define o "mailer" a ser usado.  Usando "M4
Configuration" fica "facil" acrescentar "hacks" na regra zero.

Seria algo como (num arquivo de M4 Configuration):

LOCAL_RULE_0
# restringir destinatarios aos enderecos permitidos
R$*  <@      $=w > $*   $@ $1 <@ $2 > $3                # local, OK
Raaa <@ bbb.com.br> $*  $@ aaa <@ bbb.com.br> $1
Rsss <@ ttt.com.br> $*  $@ sss <@ ttt.com.br> $1
R$*                     $# error $@ 5.7.1 $: "550 Destinatario nao permitido"


A LOCAL_RULE_0 e' na verdade a ruleset 98, chamada pela regra zero,
por isso podemos termina-la com $@ sem que isso aborte a regra zero
real ($@ termina a regra atual e retorna para regra zero).

Nota, depois de cada "> $*" tem que ter um TAB para separar o que
procura (LHS) da acao a ser tomada (RHS), sendo que mais um TAB separa
o RHS de comentarios (desnecessarioamente iniciados com um "#" acima).

Comentarios "normais" no sendmail.cf iniciam com um "#".

Para que voce nao tenha que ficar editando o sendmai.cf, o melhor e'
criar um "database".

LOCAL_CONFIG
Kdestinos hash /etc/mail/destinos

LOCAL_RULE_0
# restringir destinatarios aos enderecos permitidos
R$*  <@      $w > $*    $@ $1 <@ $2    > $3             # local, OK
R$+  <@ $*      > $*    $: < $(destinos $1@$2 $: NO $) > $1 <@ $2 > $3
R<OK> $* <@ $*  > $*    $@ $1 <@ $2    > $3     # aceita destinatario
R<$+> $* <@ $*  > $*    $: $2 <@ $3    > $4     # restaura estado anterior
R<>   $* <@ $*  > $*    $: $1 <@ $2    > $3     # map mal construido! :(
R$*                     $# error $@ 5.7.1 $: "550 Destinatario nao permitido"


As regras entre R<OK> e R$* sao de fato sao desnecessarias nessa
aplicacao, ja' que R$* captura qualquer coisa...


Ai' voce cria um arquivo /etc/mail/destinos contendo:

[EMAIL PROTECTED]  OK
[EMAIL PROTECTED]  OK

Executa:
        cd /etc/mail
        makemap hash destinos <destinos

Isso cria o arquivo /etc/mail/destinos.db que o sendmail usa na regra
acima.

Quando precisar alterar os "destinos", apenas edite o arquivo e
execure o makemap, nao precisa derrubar o sendmail para que este passe
a considerar os novos enderecos, pois o sendmail rele os "databases" a
cada processamento de email.

Entretanto, por se tratar de um ambiente multitask, executar o makemap
e recriar o destinos.db pode gerar um problema transitorio: o makemap
abre o arquivo de destino e o trunca para zero, ai' processa a
entrada, gera o mapa na memoria e finalmente grava o arquivo.

Apensar de ser um processo rapido, existe uma "janela de tempo"
durante o qual o sendmail pode acessar o destinos.db e achar que ele
esta' vazio, ou inconsistente.  Para evitar isso, usa-se em unix os
comandos "mv" ou "ln" para mudar ou dar novos nomes a arquivos de
forma "atomica", isto e', o kernel GARANTE que antes do comando e
depois do comando nenhuma task vai acessar o arquivo e fazer confusao.

Para solucionar o problema dentro do "espirito Unix", e assegurar que
nao existe possibilidade do sendmail ficar sem acessar o arquivo
consistente e valido, deve-se fazer:

        cd /etc/mail
        novo=destinos.$$
        novodb=${novo}.db

        rm -f ${novodb}
        if makemap hash $novo <destinos
        then
                ln -f ${novodb} destinos.db
        fi
        rm -f ${novodb}


Existem outras regras que sao ate' mais adequadas para serem usadas
alem da regra zero.  Sao as regras "check_*", em particular a
"check_relay" para o seu caso.  Como eu nao sei se essas regras tem
"hooks" para se fazer "hacks" como tem a regra zero, e' preciso
saber...

Humm.  Lendo agora o cf/README, as rulesets check_ tambem tem hooks!
Sao as regras "Local_check_*".

A simplicidade das regras check_* e' que voce pode retornar um OK para
sinalizar que e' aceito e dispensa maiores confirmacoes, usar $#error,
ou nao fazer nada para que as demais regras da ruleset sejam testadas.

Entao, fica algo assim:


LOCAL_CONFIG
Kdestinos hash /etc/mail/destinos

# restringir destinatarios aos enderecos permitidos
SLocal_check_relay
R$+  <@ $* > $*         $: $(destinos $1@$2 $: $1 <@ $2 > $3 $)
ROK                     $@ OK
R$*                     $# error $@ 5.7.1 $: "550 Destinatario nao permitido"


E', e' BEM mais simples...  :)

Sendmail pode ser complicado, exige estudo e muitos testes, mas
virtualmente pode-se fazer MUITAS coisas com ele.


--- Wagner                      [EMAIL PROTECTED]

PS: Cuidado! Nao contem comigo como um suporte avancado e gratuito
para o sendmail!  :))
Infelizmente nao disponho de tempo para me dedicar, bem que gostaria!,
e essas coisas demandam tempo, as vezes muitas horas, so' para
responder um email como este...



Assinantes em 20/03/2001: 2184
Mensagens recebidas desde 07/01/1999: 104491
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a