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?
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.
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
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!?!?!)
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!..