Pages

Saturday, February 02, 2008

mailx e sendmail no ubuntu

Eu acredito que muita gente saiba que o linux é capaz de atual como servidor de e-mails, também acredito que boa parte desse pessoal sabia que alguns aplicativos do linux são capazes de enviar notificações de problemas para um e-mail configurado.

O que talvez muita gente (ou pelo menos os novatos) não saiba (ou não tenha percebido) é que o ubuntu não faz isso. Ele não tem o "mailx" instalado no sistema e não envia notificações de coisa alguma de problemas que eventualmente existam no computador.

Como mudar isso ? Simples, instale o "mailx" no computador (sudo apt-get install mailx). Ele é um cliente de e-mail tradicional de comando de linha e usualmente utilizado por vários programas para enviar um e-mal a um usuário (ou root) sobre suas condições. Só tem um problema. Ao digitar o comando acima você vai instalar o mailx e o exim4 como agente de transporte. O problema é que o exim4 não envia e-mails para contas de domínios externos ou pelo menos não faz isso na configuração padrão estabelecida após uma simples instalação e eu não irei ler um livro para aprender a configurar um detalhe no meu computador. A solução mais simples é instalar o sendmail. Isso removerá o exim4 do computador (caso você o tenha instalado). Mas a princípio, faça um sudo apt-get install mailx sendmail e ele só baixará os softwares necessários, sem o exim4.

A partir do momento que mailx e o sendmail estiverem instalados você será capaz de enviar e-mails para usuários do sistema e para contas externas, isto é, sua conta do gmail ou yahoo ou etc. Também a partir do momento que o mailx estiver instalado, novos softwares instalados ou atualizados poderão utilizar essa possibilidade para acrescentar uma configuração de notificação de e-mail durante sua configuração. É normal que muitos softwares tenham essa possibilidade, mas não tenha essa necessidade de configuração (ou seja, configurar o e-mail era opcional).

Mas e se você quiser resolver a questão agora ? E se você quiser desde já saber e configurar o e-mail onde houver a possibilidade ? Duas opções: a primeira é difícil, estude, descubra quais são os softwares que você pode configurar o e-mail e configure-os manualmente (ou pelo dpkg-reconfigure nomedopacote). A segunda é muito mais fácil, mas muito mais arriscada e demorada, configure todos os pacotes, isto é, use o "sudo dpkg-reconfigure -a". Isso pode levar muito tempo, muito mesmo e abre margem erros, já que muitas perguntas terão de ser respondidas até o fim das configurações é uma opção recomendada apenas para quem tem tempo para ficar algumas horas na frente do computador apertando enter e respondendo perguntas, não é difícil, mas é arriscado, especialmente se nunca fez isso ou se der algum problema durante a configuração de algum software crítico (recomendo o uso de no-breaks para essa tarefa). Se não está interessado nem em uma coisa, nem em outra, sugiro aguardas as atualizações.

Em todo caso, o mailx e o sendmail podem ser uma combinação muito eficaz na monitoração de problemas de um sistema, e se o sistema foi recém instalado, eles podem ser ainda mais eficazes ser forem os primeiros softwares instalados (talvez até antes mesmo de uma atualização do sistema). Isso fará que todos os programas seguintes percebam a existência deles e abram a possibilidade (quando houver) de configurar as notificações de sistema.

Notas:
  1. O Gmail e o Yahoo tendem a considerar e-mail vindos de usuario@localhost como spam. Você pode prevenir isso adicionando eles aos contatos (no gmail, pelo menos, isso funciona).
  2. Nem todos os softwares precisam do mailx para enviar um e-mail, nem todos os softwares precisam do sendmail para enviar um e-mail para fora do computador. Mas a lista dos que não precisam é menor do que as dos que precisam.
  3. O sendmail é um software que atua em uma categoria com inúmeros representantes. O que me chama a atenção nele é a facilidade de usá-lo. Depois de instalado é só usar, sem configurações adicionais, edições de .conf ou qualquer outra coisa do tipo. É instalar e usar. É para construir um servidor de e-mails ? Não. Meu interesse é apenas para adicionar a possibilidade de enviar e-mails para contas externas a partir do "localhost".
  4. Mesmo que você não tenha nenhum tipo de software que utilize o mailx, você poderá usá-lo em scripts que enviam notificações ao término de determinado serviço. É um cliente de e-mail muito popular e instalado por padrão em inúmeras distribuições e existem diversos scripts por aí que utilizam ele para enviar e-mails. A questão é que esses scripts foram criados por usuários de outras distros, como o red hat ou suse, onde ele é instalado como parte básica do sistema.
  5. A utilização do mailx com exim4 pode ser uma solução muito interessante para quem tem interesse de usar o próprio ambiente de e-mail do linux para gerenciar seus e-mails (ou seja, não tem a intenção de usar um e-mail externo). Se você gerencia um computador de terceiros pode não estar interessado de permitir o fluxo de mensagens do sistema pela internet. Você também pode não estar interessado em monitorar o seu e-mail para verificar se tem ou não uma mensagem perdida no spam. Já disse que no gmail isso se resolve adicionando os contatos no sistema, ou seja, adicionando root@localhost e usuario@localhost (onde usuario é o seu login), mas em outros clientes da web eu não sei como resolver isso. Se utiliza "apenas" um computador e sempre usa um cliente de e-mails (ou seja, não usa webmail), pode ser indiferente utilizar o exim4 ou o sendmail, pois você pode adicionar a mbox do sistema (ou seja, /var/mail/usuario) ao seu cliente e configurar o usuario@localhost como receptor dos e-mails de notificação do sistema. Vale lembar que a utilização do sendmail, no lugar do exim4, é apenas para resolver o problema de como enviar uma mensagem de e-mail para uma conta em domínio externo, mas para enviar uma mensagem para um certo usuário do domínio interno, você pode usar qualquer um dos dois softwares. Eu uso o sendmail porque com ele eu faço tudo que eu faria com o exim4 e ainda faço mais.

7 comments:

  1. Depois que instalei o sendmail e o mailx meu Ubuntu Gutsy não consegue conectar-se na internet. Descobri que é preciso reinicializar o script /etc/init.d/networking. Então acrescentei este comando: su root /etc/init.d/networking restart ao /etc/rc.local para que depois de alguns segundos o sistema consiga conectar-se a internet. Ele fica algum tempo parado nesta tela:

    Creating /etc/mail/relay-domains
    # Optional file...
    A forced reload...
    ** ** You should issue `/etc/init.d/sendmail reload` ** **
    Mail Transport Agent: sendmail is not running

    Estranho isso, pois removi o sendmail e mailx e isso não resolveu, nem mesmo parando o serviço do sendmail com o services-admin.Se puder me ajudar a entender o que está acontecendo agradeço. Abraços.

    ReplyDelete
  2. Meu caro,
    eu não faço a menor idéia de que tipo de relação poderia ter uma coisa com a outra.

    Digo: uma coisa são os aplicativos que conectam a internet, eles tem seus próprios scripts e configurações. Outra coisa são as questões de configuração de sendmail.

    Uma coisa eu posso dizer, acrescentar o networking restart ao rc.local não devia fazer tanta diferença assim, afinal, o sendmail é prioridade 21 enquanto a rede é 40. Quero dizer, você está lendo a rede depois de ter lido o servidor de e-mail, então eu não vejo que tipo de diferença essa questão poderia ter feito.

    Mas estranho ainda é eu não ter o /etc/mail/relay-domains

    Nota: não é preciso usar "su root" no arquivo rc.local porque ele é executado sempre como root.

    Para eliminar o problema sem resolver a questão, faça:
    sudo chmod -x /etc/init.d/sendmail
    Isso vai impedir que o sendmail se inicialize com o sistema. Feito isso, não pode mais haver qualquer mensagem como a que mostrou.

    Faça e depois me diga o que aconteceu...
    []'s

    ReplyDelete
  3. Obrigado por responder. Retirei a permissão de execução mas não adiantou.Continuo tendo que reiniciar a rede manualmente. A única coisa que mudou foi que desapareceu a mensagem "Mail Transport Agent: sendmail is not running".Também verifique se o /etc/mail/relay-domains foi criado e ele não estava lá. Apesar de tudo, concordo com você (uma coisa não tem nada a ver com a outra). Talvez seja só um bug mesmo que coincidiu com a instalação do mesmo. Vou deixar o /etc/rc.local da forma que me falou até que possa encontrar alguma solução. De qualquer forma, obrigado ;)

    ReplyDelete
  4. Bom dia J. F. Mitre!
    Me chamo Fellipe, sou de Niterói - RJ
    estou há varios dias procurando um tutorial específico sobre o sendmail para envio de e-mail para domínios externos. Acabei encontrando seu blog, fiquei surpreso ao começar ler pois é exatamente o que eu estava procurando, mas, de repente, seu post acabou e não ensinou como fazer.. Por acaso voce teria algum link para me mandar que explicasse a configuração do sendmail para envio de e-mail para endereço externo? Se possível que explicasse um pouco também das linhas de comando, tendo em vista que pretendo criar um script que envie o log do nmap por email..
    grande abraço

    ftbarata@hotmail.com

    ReplyDelete
  5. Fellipe,
    primeiro, me desculpe pela demora.

    Eu não entendi muito bem a sua dúvida. Não existe configuração adicional. Tudo que você tem que fazer é usar o comando "mail" para enviar o arquivo...

    Vide "man mail" e se ainda tiver dúvida de como enviar, me informe.

    Quanto ao script, bem, procure na internet, Google, Viva ao Linux, etc. Porque scripts como o que você quer já existe em razoável quantidade por aí. Não é preciso reinventar.

    []'s

    ReplyDelete
  6. Boas,

    Não sei se me poderás ajudar.... Estou a tentar instalar o sendmail seguindo as tuas dicas. Estou neste momento a testar, para garantir não vir a ter problemas com a configuração. Instalei numa máquina o ubuntu 10.04, e já fiz todos os upgrades e updates.

    Ao tentar configurar os pacotes surge-me o seguinte erro:

    acpid start/running, process 4361
    .: 49: Can't open /etc/apache2/envvars
    invoke-rc.d: initscript apache2, action "stop" failed.
    .: 49: Can't open /etc/apache2/envvars
    invoke-rc.d: initscript apache2, action "start" failed.
    touch: impossível executar sobre `/etc/apache2/httpd.conf': Ficheiro ou directoria inexistente


    Eu sou um utilizador inicial do Linux (estou a dar os primeiros passos) por isso agradeço toda a ajuda que me possas dar...

    Obrigado..

    ReplyDelete
  7. Bom, esse texto é muito antigo, muita coisa muda na informática no espaço de dois anos.

    Seja como for, não uso mais esse sistema para atualizar essa informação (se isso for necessário, porque, de fato, eu não sei nem isso).

    Sua mensagem de erro refere-se a problemas com a instalação do Apache.
    Verifique se o Apache está instalado e se está instalado se está corretamente configurado e rodando.

    Não faço ideia do porque isso seria relevante, mas essa é a mensagem de erro e o caminho para corrigir o problema.

    Um abraço

    ReplyDelete