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]