# Solução de problemas do &kmail;

## Introdução ao &akonadi;

O &kmail; está em desenvolvimento ativo desde 1997. Muitos bugs surgiram ao longo dos anos. Muitos deles já foram resolvidos. Se você tiver curiosidade sobre algum desses bugs antigos, consulte a seção KMail/FAQs Dicas e Truques na Wiki do UserBase do &kde;. Ou visite a página principal de rastreamento de bugs do &kde; para saber mais sobre bugs mais recentes.

Atualmente (2021), muitos dos problemas que as pessoas estão enfrentando com o &kmail; envolvem o servidor &akonadi;. O &akonadi; é um programa auxiliar que funciona como intermediário entre o &kmail; (e todos os outros aplicativos de gerenciamento de mensagens &PIM;) e um daemon de banco de dados de uso geral (geralmente "mysqld"). Ele também facilita a comunicação entre os vários componentes dos aplicativos de gerenciamento de mensagens &PIM;. Dependendo da configuração do seu sistema, o &akonadi; pode ser iniciado durante o processo de inicialização/login. Ou pode não ser iniciado até que você execute um aplicativo de gerenciamento de mensagens &PIM; (como o &kmail;, o &kaddressbook; ou o &kontact;).

Existem dois programas de aplicação que permitem interagir diretamente com o servidor &akonadi;: `akonadictl` (um programa de controle orientado a terminal) e `akonadiconsole` (um aplicativo com interface gráfica). Aqui está um pouco de informação sobre esses dois programas.

### O programa de controle do Akonadictl

Relatório de status do &akonadi; Relatório de status do &akonadi;

Relatório de status do &akonadi;, 32 agentes em execução

A captura de tela anterior ilustra um dos comandos que podem ser usados ​​com o programa `akonadictl`. Aqui estão todos os comandos que o `akonadictl` reconhece.

    ~$ akonadictl start

Inicia o servidor do &akonadi;.

    ~$ akonadictl stop

Interrompe o servidor do &akonadi;.

    ~$ akonadictl restart

Interrompe o servidor &akonadi; e, em seguida, inicia-o novamente.

    ~$ akonadictl status

Gera o relatório de status ilustrado na captura de tela anterior.

    ~$ akonadictl instances

Lista as instâncias do servidor &akonadi; (mais de uma pode estar em execução ao mesmo tempo).

    ~$ akonadictl vacuum

Limpa o armazenamento do &akonadi;, ou pelo menos tenta fazer isso.

    ~$ akonadictl fsck

Executa uma verificação de consistência de arquivos. A saída deste comando pode ser bastante volumosa, especialmente se você adicionou suas próprias pastas ao &kmail;. Use esta versão do comando (direcionando a saída através do grep) para verificar se seu banco de dados &akonadi; está íntegro, sem gerar muita saída desnecessária.

    ~ $ akonadictl fsck 2
    >&1 | grep ^Found
    Found 0 external files.
    Found 0 external parts.
    Found no unreferenced external files.
    Found 0 parts to be moved to external files
    Found 0 parts to be moved to database
    Found 6 collections without RID.
    Found 0 items without RID.
    Found 0 dirty items.

RID significa RemoteId, um campo nomeado nas tabelas do banco de dados MySQL. Se houver mais de 0 itens sem RID, você tem um problema menor que deve ser corrigido. Se houver mais de 0 itens sujos, você pode ter um problema grave que deve ser corrigido. Veja "Não foi possível buscar o item..." e também "Corrigindo os itens sujos do &kmail;", abaixo.

### O programa Akonadiconsole

Aparência do akonadiconsole Aparência do akonadiconsole

Akonadiconsole em ação

O programa `akonadiconsole` fornece doze "janelas" diferentes para o funcionamento interno dos aplicativos &PIM;. Aqui está um breve resumo das visualizações disponíveis.

Aba Agentes.

- Aqui você pode ver uma lista dos agentes de usuário (processadores).

Aba Navegador.

- Esta aba fornece uma visão geral das várias coleções de dados que a &akonadi; mantém, organizadas como uma árvore hierárquica que mostra quantos itens residem em cada coleção.

Aba Depurador.

- Aqui você pode ativar e desativar a depuração e visualizar o registro de mensagens de depuração.

Aba Registro.

- Esta aba permite visualizar as mensagens emitidas por vários componentes do &akonadi;.

Aba Navegador de DB.

- Use esta aba para dar uma olhada no banco de dados MySQL. Existem muitas tabelas diferentes.

Aba Console de DB.

- Aqui você pode consultar o banco de dados MySQL.

Aba Depurador de consulta.

- Use esta aba para ativar e desativar a depuração de consultas ao banco de dados. O &kmail; consulta o banco de dados mysql muitas vezes em apenas alguns segundos; a saída pode ser volumosa.

Aba Rastreador de tarefa.

- Os aplicativos &PIM; executam várias funções iniciando "tarefas". Use esta aba para ativar e desativar o rastreamento de tarefas.

Aba Agendadores de recursos.

- Aqui você pode ver quais recursos são necessários quando uma função &PIM; específica é invocada. Você pode ver uma lista de todos os recursos &akonadi; em seu sistema no diretório `~/.config/akonadi/`.

Aba Monitor de notificação.

- Use esta aba para monitorar as notificações enviadas por vários recursos da &akonadi;

Aba Pesquisa de item.

- Esta aba oferece uma função de busca genérica. As buscas podem ser restritas a: Calendário, Contato, E-mail ou Nota.

Aba Monitores.

- Aqui você pode ver uma lista de todos os monitores em execução no &akonadi;, e também visualizar suas propriedades. Agentes, recursos e até mesmo alguns programas de aplicativos são monitorados.

## "Não foi possível buscar o item no backend" ao entrar na pasta &IMAP;

Existem pelo menos duas possíveis razões para isso. Aqui estão algumas soluções alternativas.

Alternativa 1

- - edite `~/.local/share/akonadi/mysql.conf`

  - Na seção [mysql], adicione: `binlog_format=row`

  Se isto não funcionar, tente a solução 2 (abaixo).

Alternativa 2

- Esta é mais uma questão de reiniciar, para que o &kmail; possa obter estes itens específicos. Alguns passos possíveis incluem:

  Use &Alt;F2 (&krunner;) ou o &konsole; para digitar: ``kquitapp kmail``, então espere um minuto, então ``akonadictl stop``, espere um minuto, digite ``akonadictl start``, espere um minuto, digite ``kmail``. Isto interrompe o &kmail; (fechando todas as janelas), para as infraestruturas do &kmail;, reinicia as infraestruturas do &kmail;, e reinicia o &kmail;. Ter uma conexão com a Internet ativa aumenta a chance de sucesso. Algumas vezes, você pode também apenas fazer um ``kquitapp kmail``, esperar um minuto, e iniciar o &kmail; novamente. Frequentemente, algumas reinicializações podem ser necessárias. Não está claro qual a razão disto, mas em conexões ruins de rede, isto é mais provável de ocorrer.

Veja também o próximo tópico sobre como o akonadiconsole pode ser útil.

## Suas mensagens não estão sendo enviadas e não aparecem mensagens de erro

Se o &kmail; não enviar nada mas também não indicar nenhum erro, o agente responsável por despachar as mensagens poderá estar bloqueado. Obviamente, você terá que certificar-se de que possui uma conexão adequada à rede para enviar o correio!

Para remediar isto, pode ser útil cancelar a ação atual e reiniciá-la. Primeiramente, saia do &kmail; usando o &krunner; (&Alt;F2) ou o &konsole; e digitando: ``kquitapp kmail``. Note que um &Alt;F4 ou Arquivo Sair normais não resolvem o problema! Espere um minuto, e então inicie o &kmail; novamente. Agora inicie o akonadiconsole usando o &krunner; (&Alt;F2) ou o &konsole;. Vá para o Agente de envio de e-mail (na aba Agentes), dê um clique-direito e cancele a ação atual. Você provavelmente obterá algumas mensagens de erro. Retorne para o &kmail; e selecione Arquivo Enviar mensagens em espera. Agora deve funcionar. Caso contrário, ao invés de cancelar a ação atual, tente alternar o status do Agente de envio de e-mail (mesmo menu de contexto) entre off-line e on-line ou reinicie coisas como as mencionadas na alternativa 2 do tópico anterior.

O akonadiconsole pode ser bem útil em diversas situações uma vez que ele exibe todos os agentes, os componentes individuais da infraestrutura do &kmail;. Você pode pará-los e iniciá-los, colocá-los no modo desconectado, cancelar ações em curso &etc; Ele pode ser muito útil quando o &kmail; está se comportando de forma irritante.

Às vezes, o Agente de envio de e-mail falha ao funcionar porque o daemon dbus (um recurso de nível de sistema para comunicação entre processos) não está funcionando corretamente. A melhor opção nessa circunstância é simplesmente reiniciar o sistema. O daemon dbus é um dos primeiros processos iniciados quando você faz login na área de trabalho &kde;. Portanto, não pode ser facilmente interrompido e reiniciado. Todo o ambiente &plasma; depende dele.

## "Não foi possível obter o item do backend... [LRCONFLICT]"

Este problema está diretamente relacionado ao bug #283682 do &akonadi;, que tem sido um problema para o &kmail; desde outubro de 2011. Há um problema de sincronização/coordenação com o processamento assíncrono de filtros de mensagens. De vez em quando, uma regra de filtro que move mensagens para uma pasta diferente "apresenta um problema" e gera mais de uma entrada no banco de dados para uma mensagem que foi movida. Quando você tenta abrir a segunda cópia dessa mensagem, a mensagem de erro "Não foi possível buscar o item do backend ...[LRCONFLICT]" aparece. Essas mensagens fantasmas não podem ser excluídas ou movidas para a lixeira usando as funções integradas do &kmail;. Mas você pode se livrar delas. Veja como.

1. Primeiro, saia do programa &kmail;. Isso pode não ser necessário, mas é melhor prevenir do que remediar.

2. Você pode descobrir quantas mensagens corrompidas estão presentes usando`akonadictl`.

       ~ $ akonadictl fsck 2
       >&1 | grep ^Found
       Found 6 external files.
       Found 6 external parts.
       Found no unreferenced external files.
       Found 0 parts to be moved to external files
       Found 0 parts to be moved to database
       Found 6 collections without RID.
       Found 9 items without RID.
       Found 0 dirty items.

   Neste caso, existem nove mensagens duplicadas (sem RID).

3. Você precisa saber como se conectar diretamente ao servidor MySQL. Use os comandos `ps` e `grep` para fazer isso.

       ~ $ ps ux | grep mysql
       david     8788  0.2  0.9 3736292 153936 ?      Sl   06:45   0:16 /usr/sbin/mysqld
       --defaults-file=/home/david/.local/share/akonadi/mysql.conf
       --datadir=/home/david/.local/share/akonadi/db_data/
       --socket=/run/user/1000/akonadi/mysql.socket
       --pid-file=/run/user/1000/akonadi/mysql.pid
       david    24275  0.0  0.0   8056  2144 pts/1    S+   08:24   0:00 grep --colour=auto mysql

4. Invoque o programa do servidor mysql usando as informações do socket da etapa 3 e emita três comandos mysql, conforme ilustrado abaixo.

       ~ $ mysql --socket=/run/user/1000/akonadi/mysql.socket                 <==
       Welcome to the MariaDB monitor.  Commands end with ; or \g.
       Your MariaDB connection id is 114
       Server version: 10.5.10-MariaDB Source distribution

       Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

       Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

       MariaDB [(none)]> use akonadi;                                         <==
       Reading table information for completion of table and column names
       You can turn off this feature to get a quicker startup with -A

       Database changed
       MariaDB [akonadi]> delete from pimitemtable where remoteid is NULL;    <==
       Query OK, 9 rows affected (0.003 sec)

       MariaDB [akonadi]> \q                                                  <==
       Bye

   Os três comandos mysql são "use akonadi;", "delete from pimitemtable where remoteid is NULL;" e "\q". Depois de digitar "mysql --socket= ...", você entrará em um diálogo com o servidor mysql (também conhecido como "MariaDB"), que fornecerá um prompt >. O diálogo completo é apresentado aqui, para clareza. As linhas de entrada do usuário são marcadas com <== na ilustração anterior.

Ao reiniciar o &kmail;, aquelas mensagens duplicadas irritantes desaparecerão. Elas eram apenas fantasmas causados ​​pelos ponteiros NULL nas tabelas do banco de dados MySQL.

## Mantendo as áreas de armazenamento auxiliares do &kmail; limpas

O &kmail; armazena dados em vários locais diferentes em sua máquina. A maioria desses locais está dentro da pasta `~/.local/share/`. Por exemplo, na maioria das distribuições Linux, suas Pastas locais estão em `~/.local/share/local-mail/`. O &akonadi; armazena a maior parte de seus dados em `~/.local/share/akonadi/`.

    ~ $ cd .local/share/akonadi
    ~/.local/share/akonadi $ ls
    Akonadi.error      db_data  file_db_data     mysql.conf  socket-localhost-default
    Akonadi.error.old  db_misc  file_lost+found  search_db

`Akonadi.error` e `Akonadi.error.old` são arquivos de log criados sempre que o &akonadi; para e reinicia. O arquivo de texto `mysql.conf` é um arquivo de configuração para o daemon mysqld que serve como backend do &akonadi;. As duas pastas `db_data` e `search_db` contêm as tabelas do banco de dados MySQL. Há também alguns arquivos de log do MySQL em `db_data` que podem ser úteis caso o &akonadi; apresente algum problema.

As duas pastas `file_db_data` e `file_lost+found` contêm dados auxiliares associados ao processamento assíncrono. O &akonadi; não limpa automaticamente a pasta `file_lost+found`, portanto, você pode querer limpar esses arquivos manualmente de tempos em tempos (⪚, com o &dolphin;). O &akonadi; tenta limpar a pasta `file_db_data` depois de mesclar tudo nos arquivos principais do banco de dados, mas às vezes arquivos inúteis se acumulam lá. Use este comando

    find .local/share/akonadi/file_db_data/ -type f | xargs rm

para corrigir isso quando acontecer. (Se a pasta `file_db_data` já estiver limpo, o comando "find" mostrado acima retornará um erro.)

## Corrigindo itens "sujos" do &kmail;

Este problema está diretamente relacionado ao bug #436550 do &akonadi;, que foi relatado em abril de 2021. Ele resulta dos itens "sujos" ocasionalmente encontrados pelo `akonadictl fsck`.

    ~ $ akonadictl fsck 2
    >&1 | grep ^Found
    Found 5 external files.
    Found 5 external parts.
    Found no unreferenced external files.
    Found 0 parts to be moved to external files
    Found 0 parts to be moved to database
    Found 6 collections without RID.
    Found 0 items without RID.
    Found 750 dirty items.

O indicador "sujo" em um item na tabela pimitemtable (uma das tabelas no banco de dados &akonadi;) é usado para controlar certos aspectos do processamento assíncrono. Ele é definido como verdadeiro quando há operações pendentes para uma determinada mensagem de e-mail. Na maioria das vezes, o indicador "sujo" é limpo um ou dois segundos depois, quando a operação pendente é concluída.

Ocasionalmente, por razões não totalmente claras, o indicador "sujo" pode ser definido em dezenas ou até centenas de mensagens de uma só vez, como ilustrado acima. Quando isso acontece, o mecanismo de limpeza automática trava e não consegue se reparar automaticamente. A principal razão para um item "sujo" nessa circunstância é que o campo "remoteid" não está definido corretamente, impossibilitando a recuperação de uma mensagem "suja" no &kmail;. A mensagem ainda existe no disco. Mas o &kmail; não consegue encontrá-la.

Deve haver uma maneira melhor de corrigir esse problema. Se você pensar em uma maneira melhor, por favor, informe os autores para que esta documentação possa ser aprimorada. O procedimento a seguir corrigirá pelo menos os erros do banco de dados. Mas ele exige bastante trabalho.

1. Saia do &kmail; e pare o servidor &akonadi; com um comando de terminal: `akonadictl stop` .

2. Faça uma cópia de segurança de todas as suas mensagens de e-mail. Você pode usar o Exportador de dados PIM para isso. Ou você pode usar o &ark; para criar um arquivo compactado ou o &dolphin; para fazer uma segunda cópia de ~/.local/share/local-mail/ em outro local do seu disco rígido. Se você for aventureiro, pode até renomear o diretório das suas pastas locais para algo como `local-mail-save`. Mas é mais seguro garantir que você tenha uma cópia de segurança das suas mensagens antes de prosseguir.

3. Você também deve fazer uma cópia de segurança de todos os filtros que criou e certificar-se de que sabe como restaurar quaisquer entradas personalizadas nas pastas Enviados, Rascunhos ou Modelos associadas às suas identidades do &kmail;. A próxima etapa removerá todas as suas pastas de e-mail personalizadas e você precisará corrigir alguns problemas depois que o &akonadi; reconstruir suas tabelas de banco de dados.

4. Agora, exclua todas as pastas dentro do diretório `local-mail`, ou renomeie esse diretório para algo como `local-mail-save`. Em seguida, inicie o programa &kmail;. Isso forçará o &akonadi; a apagar todas as entradas da tabela do banco de dados associadas às mensagens de e-mail. Você verá os nomes das suas pastas antigas brevemente, mas eles desaparecerão quando o &akonadi; terminar de excluir todos os itens "sujos" (e todos os limpos também).

5. Saia do &kmail; e pare o servidor &akonadi; conforme explicado na etapa 1, então restaure a cópia de backup de suas mensagens (criada na etapa 2) para a pasta ~/.local/share/local-mail/.

6. Reinicie o &kmail; e force o &akonadi; a ressincronizar o banco de dados. A maneira mais fácil de fazer isso é &Ctrl;L Arquivo Verificar e-mail. O &akonadi; sincroniza automaticamente todas as pastas ao buscar e-mails. Isso levará alguns minutos para ser concluído, dependendo da quantidade de mensagens salvas em suas pastas do &kmail;. Mas, ao término do processo, todos os itens "sujos" terão desaparecido.

7. Por fim, você precisará restaurar as regras de filtro de e-mail salvas na etapa 3 e verificar se todos os itens de pastas personalizadas (Pasta de enviados, &etc;) para suas identidades estão configurados da maneira desejada. Você também precisará redefinir todas as propriedades de pastas personalizadas que configurou e provavelmente terá várias notificações falsas de "Mensagens não lidas" para lidar. Mas suas tabelas de banco de dados do &akonadi; estarão limpas e funcionando perfeitamente novamente!