Email Setup · 14 min read · Sep 28, 2025

Usuários Virtuais E Domínios Com Postfix, Courier, MySQL E SquirrelMail (Mandriva 2009.1 x86_64) - Página 5

15 Instalando o SquirrelMail

SquirrelMail é uma interface de webmail que permitirá que seus usuários enviem e recebam e-mails em um navegador. Este capítulo mostra como instalá-lo e ajustá-lo à nossa configuração para que os usuários possam até mesmo alterar a senha de sua conta de e-mail pela interface do SquirrelMail.

Para instalar o SquirrelMail, simplesmente digitamos:

urpmi squirrelmail

O SquirrelMail vem com alguns plugins pré-instalados, infelizmente nenhum deles é capaz de nos permitir alterar nossa senha de e-mail em nosso banco de dados MySQL. Mas existe o plugin Change SQL Password que podemos instalar manualmente:

cd /var/www/squirrelmail/plugins/  
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz  
tar xvfz change_sqlpass-3.3-1.2.tar.gz  
cd change_sqlpass  
cp config.php.sample config.php

Agora devemos editar o config.php e ajustá-lo à nossa configuração. Por favor, ajuste as variáveis $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static e $csp_delimiter da seguinte forma e comente a variável $csp_salt_query:

vi config.php

| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] $csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] $csp_delimiter = '@'; [...] |

Os arquivos completos ficam assim:

| * 2002-2005 Paul Lesneiwski <[email protected]> * Este programa é licenciado sob GPL. Veja COPYING para detalhes * * @package plugins * @subpackage Change SQL Password * */ // Variáveis Globais, não toque nelas a menos que queira quebrar o plugin // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Teoricamente, qualquer banco de dados SQL suportado pelo Pear deve ser suportado // aqui. O DSN (data source name) deve conter as informações necessárias // para conectar ao seu banco de dados. Um exemplo MySQL está incluído abaixo. // Para mais detalhes sobre a sintaxe do DSN e a lista de tipos de banco de dados suportados, // veja: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Este plugin sempre verificará a senha antiga do usuário // contra sua senha de login, mas uma verificação extra também pode // ser feita contra o banco de dados para mais segurança, se você // desejar. Se você não precisar da verificação extra de senha, // certifique-se de que esta configuração esteja vazia. // // Esta é uma consulta que retorna um valor positivo se um usuário // e par de senha forem encontrados no banco de dados. // // Esta consulta deve retornar um valor (uma linha, uma coluna), o // valor sendo idealmente um ou zero, simplesmente indicando que // o par usuário/senha realmente existe no banco de dados. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // como "example.com" // %4 nesta consulta será substituído pela senha atual (antiga) // no formato de criptografia necessário conforme outras // configurações do plugin (Note que a sintaxe da // senha será fornecida dependendo de suas escolhas de criptografia, // então você NUNCA precisa fornecer aspas ao redor deste // valor na consulta aqui.) // %5 nesta consulta será substituído pela senha atual (antiga) // em texto simples não criptografado. Se você não usar nenhuma // criptografia de senha, %4 e %5 serão os mesmos valores, // exceto que %4 terá aspas duplas ao redor e %5 não. // //$lookup_password_query = ''; // SEGURANÇA TERRÍVEL: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Um array de consultas SQL que serão todas executadas // sempre que uma tentativa de alteração de senha for feita. // // Qualquer número de consultas pode ser incluído aqui. // As consultas serão executadas na ordem dada aqui. // // %1 em todas as consultas será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 em todas as consultas será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 em todas as consultas será substituído pelo nome do domínio, // como "example.com" // %4 em todas as consultas será substituído pela nova senha // no formato de criptografia necessário conforme outras // configurações do plugin (Note que a sintaxe da // senha será fornecida dependendo de suas // escolhas de criptografia, então você NUNCA precisa fornecer aspas // ao redor deste valor nas consultas aqui.) // %5 em todas as consultas será substituído pela nova senha // em texto simples não criptografado - CUIDADO! Se você não usar // nenhuma criptografia de senha, %4 e %5 serão os mesmos // valores, exceto que %4 terá aspas duplas ao redor // e %5 não. // //$password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1", // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Uma consulta que verifica um flag que indica se um usuário // deve ser forçado a mudar sua senha. Esta consulta // deve retornar um valor (uma linha, uma coluna) que é // zero se o usuário NÃO precisa mudar sua senha, // ou um se o usuário deve ser forçado a mudá-la agora. // // Esta configuração deve ser uma string vazia se você não deseja // habilitar essa funcionalidade. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // como "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // Que método de criptografia você usa para armazenar senhas // em seu banco de dados? Por favor, use um dos seguintes, // exatamente como você o vê: // // NONE Senhas são armazenadas apenas como texto simples // MYSQLPWD Senhas são armazenadas usando a função password() do MySQL // MYSQLENCRYPT Senhas são armazenadas usando a função encrypt() do MySQL // PHPCRYPT Senhas são armazenadas usando a função crypt() do PHP // MD5CRYPT Senhas são armazenadas usando o algoritmo MD5 criptografado // MD5 Senhas são armazenadas como hash MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Tipos de criptografia que precisam de um sal precisam saber onde obter // esse sal. Se você tiver um valor de sal constante e conhecido, você // deve defini-lo em $csp_salt_static. Caso contrário, deixe esse // valor vazio e defina um valor para o $csp_salt_query. // // Deixe ambos os valores vazios se você não precisar (ou usar) sais // para criptografar suas senhas. // // A consulta deve retornar um valor (uma linha, uma coluna) que // é o valor do sal para a senha do usuário atual. Esta // consulta é ignorada se $csp_salt_static for qualquer coisa além de vazio. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // como "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // use este formato com MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // use este formato com PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Você pode garantir que a criptografia SSL seja usada durante a senha // mudança definindo isso para a porta que seu HTTPS é servido // (443 é típico). Defina como zero se você não deseja forçar // uma conexão HTTPS quando os usuários estão mudando suas senhas. // // Você pode substituir esse valor para certos domínios, usuários ou // níveis de serviço através do plugin Virtual Host Login (vlogin) // definindo um valor(s) para $vlogin_csp_secure_port na configuração do vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Se você servir solicitações web HTTP padrão em uma porta não padrão // (qualquer coisa além da porta 80), você deve especificar esse // número da porta aqui. Defina como zero caso contrário. // // Você pode substituir esse valor para certos domínios, usuários ou // níveis de serviço através do plugin Virtual Host Login (vlogin) // definindo um valor(s) para $vlogin_csp_non_standard_http_port // na configuração do vlogin. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Você pode definir os comprimentos mínimo e máximo de senha que // você aceita ou deixar essas configurações como zero para indicar que // nenhum limite deve ser aplicado. // // Ative qualquer uma das outras configurações aqui para verificar se a // nova senha contém pelo menos um dígito, letra maiúscula, // letra minúscula e/ou um caractere não alfanumérico. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // se seu sistema tiver nomes de usuário com algo além de // um sinal "@" separando a parte do usuário e do domínio, // especifique esse caractere aqui // //$csp_delimiter = '|'; $csp_delimiter = '@'; // modo de depuração // $csp_debug = 0; ?> |

Agora devemos entrar na configuração do SquirrelMail e informar ao SquirrelMail que usamos o Courier como nosso servidor POP3 e IMAP (se você não fizer isso, provavelmente verá erros como

ERROR: Could not complete request.  
Query: CREATE "Sent"  
Reason Given: Invalid mailbox name.

quando você fizer login no SquirrelMail) e habilitar o plugin Change SQL Password e desabilitar os outros plugins de senha:

/var/www/squirrelmail/conf/conf.pl

Você verá o seguinte menu. Digite D para alterar o servidor IMAP/POP3:

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Main Menu --  
1. Organization Preferences  
2. Server Settings  
3. Folder Defaults  
4. General Options  
5. Themes  
6. Address Books  
7. Message of the Day (MOTD)  
8. Plugins  
9. Database  
10. Languages
D. Set pre-defined settings for specific IMAP servers
C Turn color off  
S Save data  
Q Quit

Comando >> <– D

SquirrelMail Configuration : Read: config.php  
---------------------------------------------------------  
While we have been building SquirrelMail, we have discovered some  
prefs that work better with some servers that don't work so  
well with others. If you select your IMAP server, this option will  
set some pre-defined settings for that server.
Please note that you will still need to go through and make sure  
everything is correct. This does not change everything. There are  
only a few settings that this will change.
Please select your IMAP server:  
bincimap = Binc IMAP server  
courier = Courier IMAP server  
cyrus = Cyrus IMAP server  
dovecot = Dovecot Secure IMAP server  
exchange = Microsoft Exchange IMAP server  
hmailserver = hMailServer  
macosx = Mac OS X Mailserver  
mercury32 = Mercury/32  
uw = University of Washington's IMAP server

sair = Não mudar nada
Comando >> <– courier

imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true

Pressione qualquer tecla para continuar… <– pressione qualquer tecla

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Main Menu --  
1. Organization Preferences  
2. Server Settings  
3. Folder Defaults  
4. General Options  
5. Themes  
6. Address Books  
7. Message of the Day (MOTD)  
8. Plugins  
9. Database  
10. Languages
D. Set pre-defined settings for specific IMAP servers
C Turn color off  
S Save data  
Q Quit

Comando >> <– 8

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Installed Plugins  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. change_pass  
7. quota_usage  
8. change_ldappass  
9. avelsieve  
10. windows  
11. folder_sizes  
12. archive_mail  
13. empty_folders
Available Plugins:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_sqlpass  
21. compatibility  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Return to Main Menu  
C Turn color off  
S Save data  
Q Quit

Comando >> <– 21 (ou qualquer que seja o número do plugin de compatibilidade - é necessário pelo plugin change_sqlpass)

SquirrelMail Configuration : Read: config.php (1.4.0)

Plugins
Installed Plugins

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. change_pass
  7. quota_usage
  8. change_ldappass
  9. avelsieve
  10. windows
  11. folder_sizes
  12. archive_mail
  13. empty_folders
  14. compatibility
    Available Plugins:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_sqlpass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Return to Main Menu
    C Turn color off
    S Save data
    Q Quit
    
    Comando >> <-- 21 (o número do plugin change_sqlpass)
    
    SquirrelMail Configuration : Read: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. change_ldappass  
    8. avelsieve  
    9. windows  
    10. folder_sizes  
    11. archive_mail  
    12. empty_folders  
    13. compatibility  
    14. change_sqlpass
Available Plugins:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Return to Main Menu  
C Turn color off  
S Save data  
Q Quit

Comando >> <– 6 (o número do plugin change_pass)

SquirrelMail Configuration : Read: config.php (1.4.0)

Plugins
Installed Plugins

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. quota_usage
  7. change_ldappass
  8. avelsieve
  9. windows
  10. folder_sizes
  11. archive_mail
  12. empty_folders
  13. compatibility
  14. change_sqlpass
    Available Plugins:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_pass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Return to Main Menu
    C Turn color off
    S Save data
    Q Quit
    
    Comando >> <-- 7 (o número do plugin change_ldappass)
    
    SquirrelMail Configuration : Read: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. avelsieve  
    8. windows  
    9. folder_sizes  
    10. archive_mail  
    11. empty_folders  
    12. compatibility  
    13. change_sqlpass
Available Plugins:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_ldappass  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Return to Main Menu  
C Turn color off  
S Save data  
Q Quit

Comando >> <– S

Dados salvos em config.php
Pressione enter para continuar… <– ENTER

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Installed Plugins  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. quota_usage  
7. change_ldappass  
8. avelsieve  
9. windows  
10. folder_sizes  
11. archive_mail  
12. empty_folders  
13. compatibility  
14. change_sqlpass
Available Plugins:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Return to Main Menu  
C Turn color off  
S Save data  
Q Quit

Comando >> <– Q

Agora você pode digitar http://server1.example.com/squirrelmail ou http://192.168.0.100/squirrelmail em seu navegador para acessar o SquirrelMail.

Faça login com seu endereço de e-mail (por exemplo, [email protected]) e sua senha:

Você deve encontrar o e-mail de boas-vindas em sua caixa de entrada:

Para alterar sua senha, vá para Opções e depois selecione Alterar Senha:

Digite sua senha atual e depois sua nova senha duas vezes:

O SquirrelMail lhe dirá se a senha foi alterada com sucesso:

16 Referências

Tutorial: Serviço de E-mail estilo ISP com Debian-Sarge e Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

Postfix + Quota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17

Senhas de E-mail Criptografadas usando saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

17 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.