+ Responder ao Tópico



  1. #1
    hunt3r
    Visitante

    Padrão sendmail/postfix >>> qmail

    Achei bem interessante a ideia do colega...

    Citação Postado originalmente por PatrickBrandao
    Voce pode usar o vpopmail para aprender as senhas, ou copia-las (o hash criptografado do shadow) para o campo no bando de dados, assim, quando o qmail e vpopmail estiverem funcionando, voce faz:

    # /mailhome/bin/vadddomain dominio.com.br senhadopostmaster
    # for linha in cat `/etc/shadow`; do
    # user=`echo $linha | cut -f1 -d:`
    # hash=`echo $linha | cut -f2 -d:`
    # /mailhome/bin/vadduser [email protected] senhateste
    # mysql -u root -psenhadorootmysql vpopmail -e "update vpopmail set pw_passwd = '$hash' where pw_user = '$user' limit 1"
    # done

    com o codigo acima voce deve conseguir criar todos os usuario registrados em /etc/shadow e transferir a senha para o campo dele no banco de dados.

    outra opcao seria voce habilitar uma opcao no ./configure do vpopmail para ele aprender a senha quando o usuario nao definir uma, assim, voce cria a conta de deixa o campo pw_passwd no mysql em branco, a primeira vez que o usuario logar, ele guarda a senha digitada como sendo a verdadeira, acho que a opcao é learning, ou algo assim.

    para importar os e-mail, voce vai ter que usar um script chamado mailbox2maildir, encontrado no site www.qmail.org ou no google.

    boa sorte!

    Patrick Brandão
    o detalhe que me está assolando agora é:

    existe uma forma de importar as MENSAGENS dos usuarios tambem?

    os formatos usados pelo postfix/sendmail sao "compativeis" com o do qmail?

    ambos os 3 usam texto plano para armazenar os emails?

  2. #2
    Avenger
    Visitante

    Padrão sendmail/postfix >>> qmail

    Usam texto plano, mas a estrutura de armazenamento das mensagens é diferente. Me parece que há modo de armazenar tudo num mesmo arquivo ou aquele outro tipo Maildir que guarda em cur/new. Deste ultimo modo é até mais fácil a transição. O que você colocar no diretório 'new' ou 'cur' o cliente de e-mail do cliente vai receber. Então desde que você separe cada e-mail em um arquivo, basta meter ele no /home/vpopmail/dominio/usuario/Maildir/new que o usuário vai achar o e-mail aguardando ele 'bonitinho' na caixa de entrada do servidor.
    Já se for aquele tipo 'mbox' onde fica tudo no mesmo arquivo... você vai ter o trabalhão de separar os e-mails em arquivos e jogar na pasta 'maildir/new' do cliente.

  3. #3
    hunt3r
    Visitante

    Padrão sendmail/postfix >>> qmail

    primeiramente obrigado amigo...

    eu estava dando uma olhadinha, e realmente a estrutura, tanto de nomes de arquivo quanto de distribuicao das mensagens no postfix e diferente do qmail.....


    se entendi bem a tua observação, basta apenas eu copiar o arquivo de texto plano do
    /var/spool/mail/usuario

    para a pasta dominio/usuario/Maildir/new/

    do cara e ele vai conseguir interpretar? mesmo sem estar no formato de arquivos do qmail?

    Código :
    1129568184.29205.dominio.com.br,S=3548


    abracos

  4. #4
    hunt3r
    Visitante

    Padrão sendmail/postfix >>> qmail

    Citação Postado originalmente por Avenger
    Então desde que você separe cada e-mail em um arquivo, basta meter ele no /home/vpopmail/dominio/usuario/Maildir/new
    desculpa, nao li direito o post... :P


    mas existe algum "separador" de mensagens no arquivo de texto-plano do postfix?

    alguma string ou caractere que se possa reconhecer o final de uma mensagem e o inicio de outra?

    do contrario nao imagino um modo de separar as mensagens...

    e ainda tem a questao do formato do nome do arquivo no qmail...

    e ainda tem mais uma... (essa veio de conhecimento impírico)...
    se voce exceder 90 e poucos usuarios, ele muda a estrutura dos diretorios...

    ao inves de:
    ~vpopmail/domains/dominio.com.br/usuario/...

    ele comeca a criar "sub-pastas"
    ~vpopmail/domains/dominio.com.br/0/usuario1/...
    ~vpopmail/domains/dominio.com.br/0/usuario2/...
    ~vpopmail/domains/dominio.com.br/0/usuario3/...

    ~vpopmail/domains/dominio.com.br/1/usuario99999/...

    e assim por diante, entao ficam alguns na pasta "raiz"
    ~vpopmail/domains/dominio.com.br/

    e outros dentro dessas sub-pastas...
    (que coisa maluca!?!?!)

  5. #5
    Avenger
    Visitante

    Padrão sendmail/postfix >>> qmail

    Bem, sobre a 1.a questão, vem: (nome do arquivo)
    eu fiz:
    cd /home/vpopmail/domains/dominiolah/meuuser/Maildir/new
    echo "coco" >> cocozim

    Daí fui lá no meu outlook, chequei email e tava lá um e-mail sem recipiente nem remetente, cujo conteúdo (olhando o fonte da mensagem) constava 'coco' Então, qualquer coisa que você colocar no Maildir/new vai ficar disponível no servidor pop3. (eu uso qmail-pop3d)

    Segunda questão: (cortar o arquivo em formato mbox)
    Eu presumo que o formato do postfix seja o tão-falado 'Mbox'. O qmail tem um utilitário prá converter Maildir prá mbox, mas não o contrário. Daí vai ser uma questão de procurar no google mesmo, ou desenvolver um scriptzinho. Me parece que o MTA que usa o formato mbox (o qmail também suporta isso -- mas prefere maildir). Uma mensagem em mbox é dividida pela outra por 'uma linha em branco, e a linha seguinte contendo |From | (note que a linha começa com as letras F, r, o, m, e com o caractere 'espaço', daí pode ser seguida do que quiser. Então o segredo seria ler uma linha em branco seguida por uma cujos 5 primeiros caracteres batam com a casa do 'From<espaço>' (com primeiro F maiúsculo e o resto minúsculo).

    Terceira Questão: (diretórios malucos)
    Isso fica desse jeito prá não acumular tudo em um diretório só. Acho que nesse esquema aí o qmail totaliza uma capacidade prá 32 mil ou 32 milhões de contas de e-mails espalhadas pelos diretórios. É porque tem um limite de arquivos por diretório, daí ele faz esse esquema todo. Para pegar qual diretório é de que usuário, basta olhar o arquivo vpasswd no raiz do domínio. Para separar o diretório, em bash a partir do nome de usuário, faça isso:
    Código :
    #!/bin/bash
    user=ana
    domain=dominio.com.br
    matches="$(cat /home/vpopmail/domains/${domain}/vpasswd | \
      grep "${user}")"
    for ((counter=1;  \
           $counter "<=" $(echo "$matches"|wc -l); \
           counter=$(($counter+1)))); do
     match="$(echo "${matches}" | head -n $counter | tail -n 1)"
     if [ "$(echo "$match" | cut -f1 -d":")" == "${user}" ]; then
      echo "${match}" | cut -f6 -d":"
     fi
    done

    Aqui eu fiz um teste com um usuário que tinha nome parecido em umas 20 linhas do vpasswd e ele me deu o resultado correto!.. Acabei de fazer esse script e testar na prática, não deve te dar problemas e resolve o problema de não saber onde tal usuário pode estar. (a diferença é que aqui eu fiz em uma linha só sem quebrar uma sequer: caso o fato de essa interface quebrar linha atrapalhe, aí tá a linha completa (cola isso tudo em uma única linha!)
    Código :
    user=ana domain=dominio.com.br matches="$(cat /home/vpopmail/domains/${domain}/vpasswd | grep "${user}")"; for ((counter=1;$counter "<=" $(echo "$matches" | wc -l);counter=$(($counter+1)))); do match="$(echo "${matches}" | head -n $counter | tail -n 1)"; if [ "$(echo "$match" | cut -f1 -d":")" == "${user}" ]; then echo "${match}" | cut -f6 -d":";break;fi;done

    Espero que ajude!..

  6. #6
    hunt3r
    Visitante

    Padrão sendmail/postfix >>> qmail

    Super Avenger!

    Mais uma vez tirando o hunt3rzinho de enrascada!

    Vo aproveitar o topic pra te agradecer pela resposta dos "2 servidores respondendo pelo mesmo dominio"...
    E por esse tambem!!

    Eu e o meu emprego, agradecemos muito a sua colaboração!

    Grande abraço!

  7. #7
    hunt3r
    Visitante

    Padrão sendmail/postfix >>> qmail

    Soh pra constar, pra quem mais possa ter esse problema...

    Possivelmente porque estou usando o vpopmail com suporte ao MySQL

    nao existe um arquivo vpasswd !

    ele armazena as senhas em uma tabela com o nome do dominio,
    ex: dominio: under-linux.org
    tabela: underlinux_com_br (por causa do mysql ele substitui o . por _ )

    describe da tabela....
    +-----------------+-----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------------+-----------+------+-----+---------+-------+
    | pw_name | char(32) | | PRI | | |
    | pw_passwd | char(40) | YES | | NULL | |
    | pw_uid | int(11) | YES | | NULL | |
    | pw_gid | int(11) | YES | | NULL | |
    | pw_gecos | char(48) | YES | | NULL | |
    | pw_dir | char(160) | YES | | NULL | |
    | pw_shell | char(20) | YES | | NULL | |
    | pw_clear_passwd | char(16) | YES | | NULL | |
    +-----------------+-----------+------+-----+---------+-------+

    nao vou citar pois os campos já sao auto-explicativos...

    qualquer duvida, postem... e mais uma vez, valeu avenger (reciclei teu scripr e uzei com php-shell para integrar com o bd :P)

    abracos!

  8. #8
    Avenger
    Visitante

    Padrão sendmail/postfix >>> qmail

    haha beleza... você não é o primeiro Hunter que eu ajudo. Tem um que eu conheci no IRC (que usa esse nick e email (não hunt3r, mas hunter)) que sempre me procura quando tudo parece perdido hehehe

    inclusive -- coincidentemente ele me mandou um email agora pedindo alguma solução anti-spam e eu passei prá ele do scriptzinho que fiz pro qmail filtrar spam a partir do vhost de domínio (vide topico 'Filtro a nivel de reverso no qmail' que eu abri no forum do qmail/postfix/sendmail).
    E mais coincidência, ele me mandou o cabeçalho de um spam que ele recebeu. Pelo cabeçalho deu prá ver que meu lindo scriptzinho eliminaria o SPAM mesmo tendo passado em branco por RBL's spamassassins, etc. Tou até pensando em conversar com o povo que desenvolve o spamassassin prá estudar um jeito de integrar o script que tou fazendo com os plugins que agora o spamassassin tem suporte!.. mas antes tenho que botar minha vida em dia (trabalho, estudos).
    Por enquanto estou só vendo o resultado de 20% a mais de emails sendo filtrados (spams!) com o script em ação.

  9. #9
    Avenger
    Visitante

    Padrão sendmail/postfix >>> qmail

    Ah, ainda sobre aquele outro tópico, você agradeceu... Então quer dizer que a última tentativa que eu fiz foi a idéia que você precisava para resolver o problemão?..

    (uhhu se foi, foi na mosca heim, depois de umas três tentativas)