S/MIME Parte 3: Plug and Play para Email Seguro Local

Pássaro

1 de dez. de 2019

Email

1 min read

S/MIME Parte 3: Plug and Play para Email Seguro Local

Principais Conclusões

    • Integração S/MIME para MTAs locais: aprenda como injetar fluxos de e-mail assinados e criptografados no PowerMTA, Momentum ou SparkPost SMTP enquanto preserva as configurações DKIM e de conformidade existentes.

    • Modelo de segurança híbrido: combine criptografia S/MIME + assinatura DKIM para garantir tanto a autenticidade da mensagem quanto a privacidade do conteúdo em ambientes regulamentados.

    • Fluxo de implantação: configure variáveis de ambiente (SMTP_HOST, credenciais, chaves), execute o fluxo --sign --encrypt --send_smtp e valide os relatórios de entrega.

    • Percepção de desempenho: testes mostram velocidade quase idêntica para a injeção SMTP vs API (~60 ms por mensagem, 200–280 ms para arquivos maiores).

    • Melhores práticas de segurança: armazene chaves privadas e senhas de API em arquivos restritos (chmod 0700), utilize STARTTLS e sessões SMTP autenticadas.

    • Casos de uso: empresas que modernizam sistemas de e-mail legados podem estender a criptografia de ponta a ponta sem abandonar a infraestrutura existente.

Destaques de Perguntas e Respostas

  • Por que adaptar S/MIME para servidores locais em vez de APIs em nuvem?

    Muitas indústrias regulamentadas (setores bancário e de saúde) devem reter correios no local. Essa abordagem mantém o controle sobre o fluxo de mensagens, enquanto adiciona proteção criptográfica moderna.

  • Como funciona a injeção SMTP com PowerMTA ou Momentum?

    Você injeta mensagens S/MIME completamente formadas no listener local (porta 25 ou VLAN privada). Esses MTAs então lidam com a assinatura DKIM e entrega como de costume.

  • S/MIME é compatível com DKIM?

    Sim — DKIM assina a mensagem após a criptografia S/MIME, portanto, as verificações de autenticação e integridade permanecem intactas.

  • Como faço para proteger minhas credenciais e chaves SMTP?

    Exporte variáveis de ambiente apenas em scripts bloqueados e use permissões de arquivo para restringir o acesso a você mesmo (chmod 0700 my_envs.sh).

  • O que eu devo monitorar após a configuração?

    Latência de entrega (API vs SMTP), taxa de sucesso da negociação TLS, resultados de validação DKIM/S-MIME e logs de erro para "revezamento negado" ou autenticação ausente.

  • Quem se beneficia mais com essa configuração?

    Organizações que operam gateways de e-mail auto-hospedados que exigem criptografia de grau de conformidade, mas desejam ferramentas plug-and-play sem reescrever os pipelines de e-mail.

No parte 1, fizemos um tour rápido sobre S/MIME, analisando a assinatura e criptografia de nossos fluxos de mensagens em uma variedade de clientes de email. Para organizações que implementam a criptografia S/MIME, entender como coletar chaves públicas de destinatários de forma eficiente se torna crucial para operações seguras de email em escala. A parte 2 nos levou através de uma ferramenta simples de linha de comando para assinar e criptografar emails, e depois enviá-los através do SparkPost.

Nesta parte, veremos como a ferramenta pode ser adaptada para injetar fluxos de email em plataformas locais, como Port25 PowerMTA e Momentum.

OK – vamos começar!

No parte 1, fizemos um tour rápido sobre S/MIME, analisando a assinatura e criptografia de nossos fluxos de mensagens em uma variedade de clientes de email. Para organizações que implementam a criptografia S/MIME, entender como coletar chaves públicas de destinatários de forma eficiente se torna crucial para operações seguras de email em escala. A parte 2 nos levou através de uma ferramenta simples de linha de comando para assinar e criptografar emails, e depois enviá-los através do SparkPost.

Nesta parte, veremos como a ferramenta pode ser adaptada para injetar fluxos de email em plataformas locais, como Port25 PowerMTA e Momentum.

OK – vamos começar!

No parte 1, fizemos um tour rápido sobre S/MIME, analisando a assinatura e criptografia de nossos fluxos de mensagens em uma variedade de clientes de email. Para organizações que implementam a criptografia S/MIME, entender como coletar chaves públicas de destinatários de forma eficiente se torna crucial para operações seguras de email em escala. A parte 2 nos levou através de uma ferramenta simples de linha de comando para assinar e criptografar emails, e depois enviá-los através do SparkPost.

Nesta parte, veremos como a ferramenta pode ser adaptada para injetar fluxos de email em plataformas locais, como Port25 PowerMTA e Momentum.

OK – vamos começar!

1. Começando

Instalar a ferramenta, obter suas chaves etc. é exatamente a mesma coisa de antes. Quando você está usando um sistema de email local como PowerMTA ou Momentum, você já é responsável por configurar domínios de envio, chaves DKIM etc. Organizações que operam sistemas locais também precisam frequentemente abordar desafios de sistemas de arquivamento de e-mails para conformidade regulatória e requisitos de retenção de dados. O que precisamos fazer agora é fornecer alguma forma de injetar as mensagens S/MIME totalmente formadas em seus servidores.

Instalar a ferramenta, obter suas chaves etc. é exatamente a mesma coisa de antes. Quando você está usando um sistema de email local como PowerMTA ou Momentum, você já é responsável por configurar domínios de envio, chaves DKIM etc. Organizações que operam sistemas locais também precisam frequentemente abordar desafios de sistemas de arquivamento de e-mails para conformidade regulatória e requisitos de retenção de dados. O que precisamos fazer agora é fornecer alguma forma de injetar as mensagens S/MIME totalmente formadas em seus servidores.

Instalar a ferramenta, obter suas chaves etc. é exatamente a mesma coisa de antes. Quando você está usando um sistema de email local como PowerMTA ou Momentum, você já é responsável por configurar domínios de envio, chaves DKIM etc. Organizações que operam sistemas locais também precisam frequentemente abordar desafios de sistemas de arquivamento de e-mails para conformidade regulatória e requisitos de retenção de dados. O que precisamos fazer agora é fornecer alguma forma de injetar as mensagens S/MIME totalmente formadas em seus servidores.

2. Injeção SMTP para Port25 PowerMTA

PowerMTA suporta vários meios de injeção de mensagem, incluindo um diretório de "retirada" de arquivos, SMTP e uma API. SMTP é o método usado aqui.

Para ilustrar a configuração mais simples possível, vamos instalar as ferramentas S/MIME no mesmo servidor que o PowerMTA. Injetamos mensagens no listener, que está aberto por padrão na porta TCP 25, aceitando apenas tráfego local.

export SMTP_HOST=localhost

(Se você esquecer essa etapa, verá: “Variável de ambiente SMTP_HOST não definida – parando” quando tentar executar.)


Já temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) presentes. As primeiras linhas do arquivo de mensagem são:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


Enviamos a mensagem com:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Vemos:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


A mensagem chega rapidamente na caixa de entrada e é relatada no Mac Mail como assinada e criptografada.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Recurso bônus: DKIM com PowerMTA

DKIM é bem fácil de configurar e coexiste alegremente com S/MIME. Os passos são:

  • Use o site do PowerMTA Assistente DKIM para criar a chave privada do domínio de envio (no meu caso, mypmta.thetucks.com.pem) e o conteúdo do registro DNS TXT público.

  • Configure o registro DNS TXT, com um seletor escolhido. Por exemplo, eu usei o seletor pmta201811. Os caracteres válidos para o seletor são definidos aqui.

  • Coloque o arquivo mypmta.thetucks.com.pem no servidor no diretório /etc/pmta .

  • Adicione o seguinte ao meu /etc/pmta/config e reinicie o serviço pmta. (Aqui, essas diretivas estão escritas em escopo global; em um sistema de produção, você pode preferir adicioná-las sob um virtual-mta.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


O registro DNS foi verificado com sucesso via MX Toolbox, e o DKIM agora está ativo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA suporta vários meios de injeção de mensagem, incluindo um diretório de "retirada" de arquivos, SMTP e uma API. SMTP é o método usado aqui.

Para ilustrar a configuração mais simples possível, vamos instalar as ferramentas S/MIME no mesmo servidor que o PowerMTA. Injetamos mensagens no listener, que está aberto por padrão na porta TCP 25, aceitando apenas tráfego local.

export SMTP_HOST=localhost

(Se você esquecer essa etapa, verá: “Variável de ambiente SMTP_HOST não definida – parando” quando tentar executar.)


Já temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) presentes. As primeiras linhas do arquivo de mensagem são:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


Enviamos a mensagem com:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Vemos:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


A mensagem chega rapidamente na caixa de entrada e é relatada no Mac Mail como assinada e criptografada.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Recurso bônus: DKIM com PowerMTA

DKIM é bem fácil de configurar e coexiste alegremente com S/MIME. Os passos são:

  • Use o site do PowerMTA Assistente DKIM para criar a chave privada do domínio de envio (no meu caso, mypmta.thetucks.com.pem) e o conteúdo do registro DNS TXT público.

  • Configure o registro DNS TXT, com um seletor escolhido. Por exemplo, eu usei o seletor pmta201811. Os caracteres válidos para o seletor são definidos aqui.

  • Coloque o arquivo mypmta.thetucks.com.pem no servidor no diretório /etc/pmta .

  • Adicione o seguinte ao meu /etc/pmta/config e reinicie o serviço pmta. (Aqui, essas diretivas estão escritas em escopo global; em um sistema de produção, você pode preferir adicioná-las sob um virtual-mta.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


O registro DNS foi verificado com sucesso via MX Toolbox, e o DKIM agora está ativo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA suporta vários meios de injeção de mensagem, incluindo um diretório de "retirada" de arquivos, SMTP e uma API. SMTP é o método usado aqui.

Para ilustrar a configuração mais simples possível, vamos instalar as ferramentas S/MIME no mesmo servidor que o PowerMTA. Injetamos mensagens no listener, que está aberto por padrão na porta TCP 25, aceitando apenas tráfego local.

export SMTP_HOST=localhost

(Se você esquecer essa etapa, verá: “Variável de ambiente SMTP_HOST não definida – parando” quando tentar executar.)


Já temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) presentes. As primeiras linhas do arquivo de mensagem são:

To: SteveT <steve.tuck@sparkpost.com>
From: Steve <steve@thetucks.com>
Subject: This is a message created using HEML
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Language: en-GB
Content-Transfer-Encoding: 7bit


Enviamos a mensagem com:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Vemos:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds


A mensagem chega rapidamente na caixa de entrada e é relatada no Mac Mail como assinada e criptografada.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.


Recurso bônus: DKIM com PowerMTA

DKIM é bem fácil de configurar e coexiste alegremente com S/MIME. Os passos são:

  • Use o site do PowerMTA Assistente DKIM para criar a chave privada do domínio de envio (no meu caso, mypmta.thetucks.com.pem) e o conteúdo do registro DNS TXT público.

  • Configure o registro DNS TXT, com um seletor escolhido. Por exemplo, eu usei o seletor pmta201811. Os caracteres válidos para o seletor são definidos aqui.

  • Coloque o arquivo mypmta.thetucks.com.pem no servidor no diretório /etc/pmta .

  • Adicione o seguinte ao meu /etc/pmta/config e reinicie o serviço pmta. (Aqui, essas diretivas estão escritas em escopo global; em um sistema de produção, você pode preferir adicioná-las sob um virtual-mta.)


host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>


O registro DNS foi verificado com sucesso via MX Toolbox, e o DKIM agora está ativo.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

3. Injeção SMTP em Direção ao Momentum

Momentum suporta vários meios de injeção de mensagens, incluindo API e SMTP. SMTP é o método utilizado aqui, em direção a um host já rodando o Momentum. Vamos deixar sua configuração inalterada, pois já tem a capacidade de aceitar injeções internas de outros hosts aprovados.

Esta é uma versão menor de uma configuração de produção, onde os nós de “geração” e os nós de MTA são separados, mas estão intimamente acoplados via uma VLAN privada e balanceadores de carga, carregando tráfego de injeção SMTP interno.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


As ferramentas S/MIME estão instaladas como antes, e iremos injetar mensagens no endereço do host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Como antes, temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) já presentes no nó de “geração”. As primeiras linhas do arquivo de mensagem correspondem a esses endereços.

Enviamos a mensagem do nó de “geração” com exatamente o mesmo comando de antes, e a mensagem aparece na caixa de entrada.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Como você esperaria, S/MIME também coexiste felizmente com a assinatura DKIM do Momentum.

Momentum suporta vários meios de injeção de mensagens, incluindo API e SMTP. SMTP é o método utilizado aqui, em direção a um host já rodando o Momentum. Vamos deixar sua configuração inalterada, pois já tem a capacidade de aceitar injeções internas de outros hosts aprovados.

Esta é uma versão menor de uma configuração de produção, onde os nós de “geração” e os nós de MTA são separados, mas estão intimamente acoplados via uma VLAN privada e balanceadores de carga, carregando tráfego de injeção SMTP interno.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


As ferramentas S/MIME estão instaladas como antes, e iremos injetar mensagens no endereço do host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Como antes, temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) já presentes no nó de “geração”. As primeiras linhas do arquivo de mensagem correspondem a esses endereços.

Enviamos a mensagem do nó de “geração” com exatamente o mesmo comando de antes, e a mensagem aparece na caixa de entrada.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Como você esperaria, S/MIME também coexiste felizmente com a assinatura DKIM do Momentum.

Momentum suporta vários meios de injeção de mensagens, incluindo API e SMTP. SMTP é o método utilizado aqui, em direção a um host já rodando o Momentum. Vamos deixar sua configuração inalterada, pois já tem a capacidade de aceitar injeções internas de outros hosts aprovados.

Esta é uma versão menor de uma configuração de produção, onde os nós de “geração” e os nós de MTA são separados, mas estão intimamente acoplados via uma VLAN privada e balanceadores de carga, carregando tráfego de injeção SMTP interno.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


As ferramentas S/MIME estão instaladas como antes, e iremos injetar mensagens no endereço do host SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # set your own MTA / VIP address here

Como antes, temos a chave privada do remetente (steve@thetucks.com.pem) e a chave pública do destinatário (steve.tuck@sparkpost.com.crt) já presentes no nó de “geração”. As primeiras linhas do arquivo de mensagem correspondem a esses endereços.

Enviamos a mensagem do nó de “geração” com exatamente o mesmo comando de antes, e a mensagem aparece na caixa de entrada.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Como você esperaria, S/MIME também coexiste felizmente com a assinatura DKIM do Momentum.

4. Injeção SMTP visando o SparkPost

Na parte 2, usamos a API REST de transmissões do SparkPost para injetar mensagens. Claro, também é possível injetar mensagens no SparkPost usando SMTP. Definimos as variáveis de ambiente assim:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se você estiver usando o serviço hospedado na UE do SparkPost, defina SMTP_HOST como smtp.eu.sparkpostmail.com.
(Veja aqui para mais opções - por exemplo, você pode injetar na porta 2525 em vez de 587.)

A saída abaixo mostra que STARTTLS está sendo usado, junto com o nome de usuário e a senha.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Você verá:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

A senha é impressa com caracteres de substituição ***, então você não está comprometendo a privacidade da sua chave se alguém estiver olhando por cima do seu ombro.

Proteger Suas Credenciais

Note que as variáveis de ambiente podem ser configuradas em um arquivo de script de shell ou similar, para evitar reescrever. Se você fizer isso, por favor, cuide de suas senhas/chaves API limitando o acesso a esse arquivo apenas para você. Por exemplo, se o seu arquivo de configuração de credenciais se chama my_envs.sh, então execute:

chmod 0700 my_envs.sh


Avisos Relacionados ao SMTP que Você Pode Ver

A injeção SMTP do SparkPost é bastante rígida, como você poderia esperar de um serviço público. Se você não definiu o número da porta SMTP, verá um aviso:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Se você não definiu o nome de usuário SMTP ou não definiu a senha, verá:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Essas mensagens de erro são relatadas exatamente como estão, a partir da biblioteca SMTP do Python, daí a formatação.

Na parte 2, usamos a API REST de transmissões do SparkPost para injetar mensagens. Claro, também é possível injetar mensagens no SparkPost usando SMTP. Definimos as variáveis de ambiente assim:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se você estiver usando o serviço hospedado na UE do SparkPost, defina SMTP_HOST como smtp.eu.sparkpostmail.com.
(Veja aqui para mais opções - por exemplo, você pode injetar na porta 2525 em vez de 587.)

A saída abaixo mostra que STARTTLS está sendo usado, junto com o nome de usuário e a senha.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Você verá:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

A senha é impressa com caracteres de substituição ***, então você não está comprometendo a privacidade da sua chave se alguém estiver olhando por cima do seu ombro.

Proteger Suas Credenciais

Note que as variáveis de ambiente podem ser configuradas em um arquivo de script de shell ou similar, para evitar reescrever. Se você fizer isso, por favor, cuide de suas senhas/chaves API limitando o acesso a esse arquivo apenas para você. Por exemplo, se o seu arquivo de configuração de credenciais se chama my_envs.sh, então execute:

chmod 0700 my_envs.sh


Avisos Relacionados ao SMTP que Você Pode Ver

A injeção SMTP do SparkPost é bastante rígida, como você poderia esperar de um serviço público. Se você não definiu o número da porta SMTP, verá um aviso:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Se você não definiu o nome de usuário SMTP ou não definiu a senha, verá:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Essas mensagens de erro são relatadas exatamente como estão, a partir da biblioteca SMTP do Python, daí a formatação.

Na parte 2, usamos a API REST de transmissões do SparkPost para injetar mensagens. Claro, também é possível injetar mensagens no SparkPost usando SMTP. Definimos as variáveis de ambiente assim:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Se você estiver usando o serviço hospedado na UE do SparkPost, defina SMTP_HOST como smtp.eu.sparkpostmail.com.
(Veja aqui para mais opções - por exemplo, você pode injetar na porta 2525 em vez de 587.)

A saída abaixo mostra que STARTTLS está sendo usado, junto com o nome de usuário e a senha.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp


Você verá:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

A senha é impressa com caracteres de substituição ***, então você não está comprometendo a privacidade da sua chave se alguém estiver olhando por cima do seu ombro.

Proteger Suas Credenciais

Note que as variáveis de ambiente podem ser configuradas em um arquivo de script de shell ou similar, para evitar reescrever. Se você fizer isso, por favor, cuide de suas senhas/chaves API limitando o acesso a esse arquivo apenas para você. Por exemplo, se o seu arquivo de configuração de credenciais se chama my_envs.sh, então execute:

chmod 0700 my_envs.sh


Avisos Relacionados ao SMTP que Você Pode Ver

A injeção SMTP do SparkPost é bastante rígida, como você poderia esperar de um serviço público. Se você não definiu o número da porta SMTP, verá um aviso:

{
  'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')
}


Se você não definiu o nome de usuário SMTP ou não definiu a senha, verá:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

Essas mensagens de erro são relatadas exatamente como estão, a partir da biblioteca SMTP do Python, daí a formatação.

Qual é mais rápido – SMTP ou API?

Comparação de desempenho

Aqui está uma rápida visão geral dos testes de desempenho:

Medição

SMTP

API

Notas

Arquivo pequeno (~19 KB)

~60 ms

~60 ms

Desempenho praticamente idêntico

Arquivo grande (~577 KB)

~280 ms

~200 ms

API um pouco mais rápida com cargas maiores

Francamente, S/MIME é improvável que seja um caso de uso de alto volume, mas ter a mesma ferramenta com duas opções de saída era só um convite para corrermos uma corrida!

O arquivo de teste de e-mail “Abacate” usado aqui tem cerca de 19KB. Repetir os testes 10 vezes através de um loop bash mostrou que os tempos médios eram semelhantes para SMTP e API, cerca de 60 milissegundos por mensagem, o que é bastante rápido. Neste caso, nós injetamos de uma instância EC2 média na mesma região de hospedagem que SparkPost.com, o que é uma boa maneira de manter os tempos de ida e volta da rede baixos.

Repetindo isso com um arquivo de teste maior (577KB), a API levou aproximadamente 200 milissegundos, enquanto SMTP levou 280 milissegundos por mensagem – ainda impressionante para um tamanho de arquivo 30x maior. Claro, sua experiência pode variar dependendo da localização, congestão da internet, etc., mas o desempenho é improvável que seja um problema.

Se você realmente precisa de desempenho máximo, um bom ponto de partida seria lançar um número definido de processos/sessões de injeção simultâneas, conforme nossas recomendações de melhores práticas de transmissão – por exemplo, a partir de uma tarefa de supervisão.

Comparação de desempenho

Aqui está uma rápida visão geral dos testes de desempenho:

Medição

SMTP

API

Notas

Arquivo pequeno (~19 KB)

~60 ms

~60 ms

Desempenho praticamente idêntico

Arquivo grande (~577 KB)

~280 ms

~200 ms

API um pouco mais rápida com cargas maiores

Francamente, S/MIME é improvável que seja um caso de uso de alto volume, mas ter a mesma ferramenta com duas opções de saída era só um convite para corrermos uma corrida!

O arquivo de teste de e-mail “Abacate” usado aqui tem cerca de 19KB. Repetir os testes 10 vezes através de um loop bash mostrou que os tempos médios eram semelhantes para SMTP e API, cerca de 60 milissegundos por mensagem, o que é bastante rápido. Neste caso, nós injetamos de uma instância EC2 média na mesma região de hospedagem que SparkPost.com, o que é uma boa maneira de manter os tempos de ida e volta da rede baixos.

Repetindo isso com um arquivo de teste maior (577KB), a API levou aproximadamente 200 milissegundos, enquanto SMTP levou 280 milissegundos por mensagem – ainda impressionante para um tamanho de arquivo 30x maior. Claro, sua experiência pode variar dependendo da localização, congestão da internet, etc., mas o desempenho é improvável que seja um problema.

Se você realmente precisa de desempenho máximo, um bom ponto de partida seria lançar um número definido de processos/sessões de injeção simultâneas, conforme nossas recomendações de melhores práticas de transmissão – por exemplo, a partir de uma tarefa de supervisão.

Comparação de desempenho

Aqui está uma rápida visão geral dos testes de desempenho:

Medição

SMTP

API

Notas

Arquivo pequeno (~19 KB)

~60 ms

~60 ms

Desempenho praticamente idêntico

Arquivo grande (~577 KB)

~280 ms

~200 ms

API um pouco mais rápida com cargas maiores

Francamente, S/MIME é improvável que seja um caso de uso de alto volume, mas ter a mesma ferramenta com duas opções de saída era só um convite para corrermos uma corrida!

O arquivo de teste de e-mail “Abacate” usado aqui tem cerca de 19KB. Repetir os testes 10 vezes através de um loop bash mostrou que os tempos médios eram semelhantes para SMTP e API, cerca de 60 milissegundos por mensagem, o que é bastante rápido. Neste caso, nós injetamos de uma instância EC2 média na mesma região de hospedagem que SparkPost.com, o que é uma boa maneira de manter os tempos de ida e volta da rede baixos.

Repetindo isso com um arquivo de teste maior (577KB), a API levou aproximadamente 200 milissegundos, enquanto SMTP levou 280 milissegundos por mensagem – ainda impressionante para um tamanho de arquivo 30x maior. Claro, sua experiência pode variar dependendo da localização, congestão da internet, etc., mas o desempenho é improvável que seja um problema.

Se você realmente precisa de desempenho máximo, um bom ponto de partida seria lançar um número definido de processos/sessões de injeção simultâneas, conforme nossas recomendações de melhores práticas de transmissão – por exemplo, a partir de uma tarefa de supervisão.

Resumindo ...

Vimos como a ferramenta baseada na API SparkPost usada na Parte 2 foi atualizada para suportar injeção SMTP para suportar MTAs locais, como Port25 PowerMTA e Momentum em uma variedade de configurações, bem como com SparkPost.

Isso é tudo por agora! Boas envios.

Vimos como a ferramenta baseada na API SparkPost usada na Parte 2 foi atualizada para suportar injeção SMTP para suportar MTAs locais, como Port25 PowerMTA e Momentum em uma variedade de configurações, bem como com SparkPost.

Isso é tudo por agora! Boas envios.

Vimos como a ferramenta baseada na API SparkPost usada na Parte 2 foi atualizada para suportar injeção SMTP para suportar MTAs locais, como Port25 PowerMTA e Momentum em uma variedade de configurações, bem como com SparkPost.

Isso é tudo por agora! Boas envios.

Outras notícias

Leia mais desta categoria

A person is standing at a desk while typing on a laptop.

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro

A person is standing at a desk while typing on a laptop.

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro