Estou tentando configurar um servidor SMTPS na porta 465 usando Python e a biblioteca aiosmtpd. Embora eu possa conectar ao servidor localmente usando openssl s_client, servidores de e-mail externos (como o Gmail) não conseguem se conectar, relatando um erro "Conexão recusada".
Aqui está meu código atual:
import asyncio
import ssl
from aiosmtpd.controller import Controller
from aiosmtpd.handlers import Debugging
async def main():
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(
certfile='./certs/fullchain.pem',
keyfile='./certs/privkey.pem'
)
controller = Controller(
handler=Debugging(),
hostname='0.0.0.0',
port=465,
ssl_context=ssl_context
)
controller.start()
print("SMTPS server started on port 465...")
try:
await asyncio.sleep(3600)
finally:
controller.stop()
if __name__ == "__main__":
asyncio.run(main())
Embora funcione bem quando desabilito a criptografia TLS e altero o número da porta para 25.
Eu verifiquei que:
- O servidor inicia sem erros.
- Posso me conectar ao meu servidor usando
openssl s_client -connect my_domain.example.com:465
. - A porta 465 está aberta no meu firewall.
- Os certificados SSL são válidos e correspondem ao nome de domínio.
Sei que também há SMTP com protocolo STARTTLS na porta 587, mas no meu caso de uso específico preciso exatamente de SMTPS na porta 465.
Informações adicionais:
Versão do Python: 3.12.3. SO: Ubuntu 24 server
Qualquer ajuda ou orientação seria muito apreciada. Obrigado
Servidores de e-mail externos sempre se conectam à porta 25. Especificamente, eles fazem uma pesquisa DNS MX e então se conectam à porta 25 no servidor fornecido. E como você não tem um servidor na porta 25, isso resultará em "Conexão recusada". Não há como especificar uma porta diferente que eles devem usar.
Em outras palavras: você não pode fazer nada no seu código para fazê-lo funcionar, simplesmente porque o servidor de e-mail de conexão não tentará usar seu servidor na porta 465. As portas 465 e 587 são para agentes de usuário (MUA), não para servidores de e-mail (MTA).
Além disso, a porta 25 realmente suporta TLS, usando STARTTLS da mesma forma que é feito com a porta 587.