Skip to main content

Configurações SMTP para e-mail de sistemas (não-responda.ifsp.edu.br)

Configurações de E-mail - Envio e recebimento de mensagens

Seguem abaixo as informações necessárias para configuração do e-mail institucional em serviços web (Ex.: GLPI, Moodle, etc).

Originalmente, o Simple Mail Transfer Protocol (SMTP) usava a porta 25. Atualmente, o SMTP deve usar a porta 587. Esta é a porta para transmissões de e-mails criptografados usando SMTP Secure (SMTPS).

Às vezes a porta 465 também é usada para SMTPS. Entretanto, esta é uma implementação ultrapassada e a porta 587 deve ser usada, se possível. 

Portanto: dar preferencia a porta 587 com TLS; e usar a porta 465 com SSL em casos que não for possivel usar a 587.
porta 25 foi bloqueada por default e não é mais utilizada.

HOST: nao-responda.ifsp.edu.br
Autenticação: prontuario@nao-responda.ifsp.edu.br
Segurança: SSL/TLS
Portas: 465 ou 587 (preferivel).

Abaixo as portas geralmente listadas no servidor zimbra.

root@email:~# nmap  nao-responda.ifsp.edu.br

Starting Nmap 5.21 ( http://nmap.org ) at 2020-10-28 12:30 AMST
Nmap scan report for email.ifsp.edu.br (45.236.121.45)
Host is up (0.000020s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
111/tcp  open  rpcbind
143/tcp  open  imap
389/tcp  open  ldap
443/tcp  open  https
465/tcp  open  smtps
587/tcp  open  submission
993/tcp  open  imaps
995/tcp  open  pop3s
5222/tcp open  unknown
7025/tcp open  unknown
Envio de E-mail via script


Casa seja necessário validar o envio de mensagens a apartir de uma determinada VLAN, pode ser usado o script abaixo: 

Pode ser necessário instalar o pacote dnspyhton.
Ex.: python -m pip install dnspython

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket
import ssl
import smtplib
import dns.resolver
from datetime import datetime
import getpass
import sys

SMTP_SERVER = "nao-responda.ifsp.edu.br"
PORTS = [465, 587]
TIMEOUT = 10
LOG_FILE = "smtp_test.log"


def log(msg):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    line = f"[{timestamp}] {msg}"
    print(line)
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(line + "\n")


def test_dns():
    log("=== Teste DNS ===")
    try:
        answers = dns.resolver.resolve(SMTP_SERVER, "A")
        for rdata in answers:
            log(f"Registro A: {rdata.address}")
    except Exception as e:
        log(f"Erro DNS A: {e}")

    try:
        answers = dns.resolver.resolve(SMTP_SERVER, "MX")
        for rdata in answers:
            log(f"Registro MX: {rdata.exchange} (prio {rdata.preference})")
    except Exception as e:
        log(f"Erro DNS MX: {e}")


def test_tcp(port):
    log(f"=== Teste TCP porta {port} ===")
    try:
        with socket.create_connection((SMTP_SERVER, port), timeout=TIMEOUT):
            log(f"Porta {port} acessível")
    except Exception as e:
        log(f"Falha na porta {port}: {e}")


def test_banner_smtps():
    log("=== Teste Banner SMTPS (porta 465) ===")
    try:
        context = ssl.create_default_context()
        with socket.create_connection((SMTP_SERVER, 465), timeout=TIMEOUT) as sock:
            with context.wrap_socket(sock, server_hostname=SMTP_SERVER) as ssock:
                banner = ssock.recv(1024).decode(errors="ignore").strip()
                log(f"Banner recebido: {banner}")
    except Exception as e:
        log(f"Erro ao obter banner SMTPS: {e}")


def test_smtp_plain_587():
    log("=== Teste SMTP simples (EHLO) porta 587 ===")
    try:
        server = smtplib.SMTP(SMTP_SERVER, 587, timeout=TIMEOUT)
        server.ehlo()
        log("EHLO executado com sucesso")
        server.quit()
    except Exception as e:
        log(f"Erro SMTP simples (587): {e}")


def test_starttls():
    log("=== Teste SMTP STARTTLS (porta 587) ===")
    try:
        server = smtplib.SMTP(SMTP_SERVER, 587, timeout=TIMEOUT)
        server.ehlo()
        server.starttls(context=ssl.create_default_context())
        server.ehlo()
        log("STARTTLS negociado com sucesso")
        server.quit()
    except Exception as e:
        log(f"Erro STARTTLS: {e}")


def test_smtps():
    log("=== Teste SMTPS (porta 465) ===")
    try:
        context = ssl.create_default_context()
        server = smtplib.SMTP_SSL(SMTP_SERVER, 465, timeout=TIMEOUT, context=context)
        server.ehlo()
        log("Conexão SMTPS estabelecida com sucesso")
        server.quit()
    except Exception as e:
        log(f"Erro SMTPS: {e}")


def interactive_auth_test():
    answer = input("\nDeseja realizar o teste de envio SMTP autenticado? (s/N): ").strip().lower()
    if answer != "s":
        log("Teste de envio autenticado ignorado pelo usuário")
        return

    log("=== Teste de envio SMTP autenticado (interativo) ===")

    smtp_user = input("Usuário SMTP: ").strip()
    smtp_pass = getpass.getpass("Senha SMTP (não será exibida): ")

    mail_from = input("E-mail remetente: ").strip()
    mail_to = input("E-mail destinatário: ").strip()

    try:
        msg = f"""From: {mail_from}
To: {mail_to}
Subject: Teste SMTP Python (Interativo)

Mensagem de teste enviada via script Python SMTP interativo.
"""

        server = smtplib.SMTP(SMTP_SERVER, 587, timeout=TIMEOUT)
        server.ehlo()
        server.starttls(context=ssl.create_default_context())
        server.login(smtp_user, smtp_pass)
        server.sendmail(mail_from, [mail_to], msg)
        server.quit()

        log("Mensagem enviada com sucesso (SMTP autenticado)")
    except Exception as e:
        log(f"Erro no envio autenticado: {e}")


def main():
    log("===== INÍCIO DOS TESTES SMTP =====")

    test_dns()

    for port in PORTS:
        test_tcp(port)

    test_banner_smtps()
    test_smtp_plain_587()
    test_starttls()
    test_smtps()
    interactive_auth_test()

    log("===== FIM DOS TESTES SMTP =====")


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        log("Execução interrompida pelo usuário")
        sys.exit(1)

Referência