Recentemente configurei um servidor de e-mail que consiste em postfix
e dovecot
. Ontem adicionei nginx
e roundcube
à mistura. Os registros SPF, DKIM, DMARC, rDNS estão todos concluídos. O Gmail trata meu e-mail como válido e o entrega na minha caixa de entrada. Tudo está funcionando. Exceto uma pequena coisa irritante.
Quando uso o MUA integrado do Android ou outro MUA, tudo continua bem. O problema começa quando quero enviar mensagens usando roundcube. O e-mail ainda é verificado e entregue corretamente, mas sem assunto. De alguma forma o roundcube está perdendo o campo assunto e enviando meus e-mails sem o assunto.
Estou procurando uma resposta há 7 horas seguidas, mas parece que sou a única pessoa no mundo que está enfrentando esse problema. Isso me faz pensar que algo está errado com meu servidor ou configurações ou algo assim, mas verifiquei quatro vezes todas as minhas configurações e ainda não tenho ideia.
Qualquer ajuda será muito útil. Agradeço antecipadamente pelo seu tempo.
Meu servidor de e-mail está em uma caixa OpenVZ com 768 MB de RAM, rodando CentOS 7 Minimal. Versão Postfix: 2.10.1 Versão Dovecot: 2.2.10 Versão Roundcube: 1.1.0
Minha postconf -n
saída:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = yes
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = localhost
myhostname = mail.example.com
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = unix:/var/run/opendkim/opendkim.sock
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_delay_reject = no
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_unknown_helo_hostname, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_use_tls = yes
strict_rfc821_envelopes = yes
unknown_local_recipient_reject_code = 550
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
Meu trecho de configuração do Roundcube em config/config.inc.php
:
$config['debug_level'] = 5;
$config['db_dsnw'] = 'mysql://user:pass@localhost/database';
$config['default_host'] = 'tls://localhost';
$config['default_port'] = 993;
$config['smtp_server'] = 'tls://localhost';
$config['smtp_port'] = 587;
$config['ip_check'] = true;
$config['identities_level'] = 3;
$config['des_key'] = 'some key';
$config['mime_types'] = '/usr/share/nginx/html/roundcube/mime.types';
$config['preview_pane'] = true;
Responder1
Eu encontrei a solução para minha própria pergunta.
Abaixo estão as linhas 507-513 de program/steps/mail/sendmail.inc.
// encoding subject header with mb_encode provides better results with asian characters
if (function_exists('mb_encode_mimeheader')) {
mb_internal_encoding($message_charset);
$headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
$message_charset, 'Q', "\r\n", 8);
mb_internal_encoding(RCUBE_CHARSET);
}
Este é um dos dois lugares que menciona $headers['Subject']
variável. A outra é a linha 196 que define a variável.
Como nem eu nem meus clientes temos nada a ver com personagens asiáticos, resolvi comentar esse bloco de código e ver o que acontece, e pronto! Os sujeitos começaram a trabalhar. Parece que o roundcube tem um bug estranho. Espero que isso ajude alguém algum dia.