S/MIME Parte 3: Conectar y jugar para correo electrónico seguro en las instalaciones

Pájaro

1 dic 2019

Correo electrónico

1 min read

S/MIME Parte 3: Conectar y jugar para correo electrónico seguro en las instalaciones

Puntos clave

    • Integración S/MIME para MTAs locales: aprende cómo inyectar flujos de correo electrónico firmados y encriptados en PowerMTA, Momentum o SparkPost SMTP mientras preservas las configuraciones existentes de DKIM y cumplimiento.

    • Modelo de seguridad híbrido: combina encriptación S/MIME + firma DKIM para garantizar tanto la autenticidad del mensaje como la privacidad del contenido en entornos regulados.

    • Flujo de implementación: configura las variables de entorno (SMTP_HOST, credenciales, claves), ejecuta el flujo de trabajo --sign --encrypt --send_smtp, y valida los informes de entrega.

    • Información de rendimiento: las pruebas muestran una velocidad casi idéntica para la inyección SMTP frente a API (~60 ms por mensaje, 200–280 ms para archivos más grandes).

    • Mejores prácticas de seguridad: almacena las claves privadas y las contraseñas de API en archivos restringidos (chmod 0700), usa STARTTLS y sesiones SMTP autenticadas.

    • Casos de uso: las empresas que modernizan sistemas de correo heredados pueden extender la encriptación de extremo a extremo sin abandonar la infraestructura existente.

Destacados de Q&A

  • ¿Por qué adaptar S/MIME para servidores on-prem en lugar de APIs de cloud?

    Muchas industrias reguladas (sectores bancarios y de salud) deben retener el correo en el sitio. Este enfoque mantiene el control sobre el flujo de mensajes al tiempo que añade moderna protección criptográfica.

  • ¿Cómo funciona la inyección SMTP con PowerMTA o Momentum?

    Inyecta mensajes S/MIME completamente formados al oyente local (puerto 25 o VLAN privada). Estos MTAs luego manejan la firma DKIM y la entrega como de costumbre.

  • ¿Es S/MIME compatible con DKIM?

    Sí — DKIM firma el mensaje después del cifrado S/MIME, por lo que las comprobaciones de autenticación e integridad permanecen intactas.

  • ¿Cómo protejo mis credenciales y claves SMTP?

    Exporta variables de entorno solo en scripts bloqueados y utiliza permisos de archivos para restringir el acceso a ti mismo (chmod 0700 my_envs.sh).

  • ¿Qué debería monitorear después de la configuración?

    Latencia de entrega (API vs SMTP), tasa de éxito en el apretón de manos TLS, resultados de validación DKIM/S-MIME y registros de errores para "relaying denied" o falta de autenticación.

  • ¿Quién se beneficia más de esta configuración?

    Organizaciones que operan puertas de enlace de correo autoalojadas que requieren cifrado de calidad conforme pero desean herramientas plug-and-play sin reescribir las canalizaciones de correo.

En la parte 1, hicimos un rápido recorrido por S/MIME, examinando la firma y el cifrado de nuestros flujos de mensajes a través de una variedad de clientes de correo. Para las organizaciones que implementan el cifrado S/MIME, entender cómo recoger claves públicas de destinatarios de manera eficiente se vuelve crucial para operaciones de correo electrónico seguras a escala. La parte 2 nos llevó a través de una sencilla herramienta de línea de comandos para firmar y cifrar correos electrónicos, y luego enviarlos a través de SparkPost.

En esta parte, veremos cómo se puede adaptar la herramienta para inyectar flujos de correo en plataformas locales como Port25 PowerMTA y Momentum.

¡Muy bien, comencemos!

En la parte 1, hicimos un rápido recorrido por S/MIME, examinando la firma y el cifrado de nuestros flujos de mensajes a través de una variedad de clientes de correo. Para las organizaciones que implementan el cifrado S/MIME, entender cómo recoger claves públicas de destinatarios de manera eficiente se vuelve crucial para operaciones de correo electrónico seguras a escala. La parte 2 nos llevó a través de una sencilla herramienta de línea de comandos para firmar y cifrar correos electrónicos, y luego enviarlos a través de SparkPost.

En esta parte, veremos cómo se puede adaptar la herramienta para inyectar flujos de correo en plataformas locales como Port25 PowerMTA y Momentum.

¡Muy bien, comencemos!

En la parte 1, hicimos un rápido recorrido por S/MIME, examinando la firma y el cifrado de nuestros flujos de mensajes a través de una variedad de clientes de correo. Para las organizaciones que implementan el cifrado S/MIME, entender cómo recoger claves públicas de destinatarios de manera eficiente se vuelve crucial para operaciones de correo electrónico seguras a escala. La parte 2 nos llevó a través de una sencilla herramienta de línea de comandos para firmar y cifrar correos electrónicos, y luego enviarlos a través de SparkPost.

En esta parte, veremos cómo se puede adaptar la herramienta para inyectar flujos de correo en plataformas locales como Port25 PowerMTA y Momentum.

¡Muy bien, comencemos!

1. Comenzando

Instalar la herramienta, obtener sus claves, etc., es exactamente lo mismo que antes. Cuando estás utilizando un sistema de correo electrónico on-premises como PowerMTA o Momentum, ya eres responsable de configurar los dominios de envío, las claves DKIM, etc. Las organizaciones que ejecutan sistemas on-premises también suelen necesitar abordar los desafíos del sistema de archivado de correos electrónicos para el cumplimiento normativo y los requisitos de retención de datos. Lo que necesitamos hacer ahora es proporcionar algún modo de inyectar los mensajes S/MIME completamente formados en sus servidores.

Instalar la herramienta, obtener sus claves, etc., es exactamente lo mismo que antes. Cuando estás utilizando un sistema de correo electrónico on-premises como PowerMTA o Momentum, ya eres responsable de configurar los dominios de envío, las claves DKIM, etc. Las organizaciones que ejecutan sistemas on-premises también suelen necesitar abordar los desafíos del sistema de archivado de correos electrónicos para el cumplimiento normativo y los requisitos de retención de datos. Lo que necesitamos hacer ahora es proporcionar algún modo de inyectar los mensajes S/MIME completamente formados en sus servidores.

Instalar la herramienta, obtener sus claves, etc., es exactamente lo mismo que antes. Cuando estás utilizando un sistema de correo electrónico on-premises como PowerMTA o Momentum, ya eres responsable de configurar los dominios de envío, las claves DKIM, etc. Las organizaciones que ejecutan sistemas on-premises también suelen necesitar abordar los desafíos del sistema de archivado de correos electrónicos para el cumplimiento normativo y los requisitos de retención de datos. Lo que necesitamos hacer ahora es proporcionar algún modo de inyectar los mensajes S/MIME completamente formados en sus servidores.

2. SMTP injection hacia Port25 PowerMTA

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de recogida de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más sencilla posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, el cual está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: “Environment var SMTP_HOST not set – stopping” cuando intentes ejecutar.)


Ya tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) presentes. Las primeras líneas del archivo de mensaje son:

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 el mensaje con:

./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


El mensaje llega rápidamente a la bandeja de entrada y se informa en Mac Mail como firmado y encriptado.

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


Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y coexiste felizmente con S/MIME. Los pasos son:

  • Usa el sitio PowerMTA DKIM Wizard para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido del registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, utilicé el selector pmta201811. Los caracteres válidos para el selector se definen aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta.

  • Añade lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)


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


El registro DNS se verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

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

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de recogida de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más sencilla posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, el cual está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: “Environment var SMTP_HOST not set – stopping” cuando intentes ejecutar.)


Ya tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) presentes. Las primeras líneas del archivo de mensaje son:

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 el mensaje con:

./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


El mensaje llega rápidamente a la bandeja de entrada y se informa en Mac Mail como firmado y encriptado.

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


Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y coexiste felizmente con S/MIME. Los pasos son:

  • Usa el sitio PowerMTA DKIM Wizard para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido del registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, utilicé el selector pmta201811. Los caracteres válidos para el selector se definen aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta.

  • Añade lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)


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


El registro DNS se verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

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

PowerMTA admite varios medios de inyección de mensajes, incluyendo un directorio de recogida de archivos, SMTP y una API. SMTP es el método utilizado aquí.

Para ilustrar la configuración más sencilla posible, instalaremos las herramientas S/MIME en el mismo servidor que PowerMTA. Inyectamos mensajes al oyente, el cual está abierto por defecto en el puerto TCP 25, aceptando solo tráfico local.

export SMTP_HOST=localhost

(Si olvidas ese paso, verás: “Environment var SMTP_HOST not set – stopping” cuando intentes ejecutar.)


Ya tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) presentes. Las primeras líneas del archivo de mensaje son:

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 el mensaje con:

./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


El mensaje llega rápidamente a la bandeja de entrada y se informa en Mac Mail como firmado y encriptado.

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


Función adicional: DKIM con PowerMTA

DKIM es bastante fácil de configurar y coexiste felizmente con S/MIME. Los pasos son:

  • Usa el sitio PowerMTA DKIM Wizard para crear la clave privada del dominio de envío (en mi caso, mypmta.thetucks.com.pem) y el contenido del registro DNS TXT público.

  • Configura el registro DNS TXT, con un selector elegido. Por ejemplo, utilicé el selector pmta201811. Los caracteres válidos para el selector se definen aquí.

  • Coloca el archivo mypmta.thetucks.com.pem en el servidor en el directorio /etc/pmta.

  • Añade lo siguiente a mi /etc/pmta/config y reinicia el servicio pmta. (Aquí, estas directivas están escritas a nivel global; en un sistema de producción, podrías preferir agregarlas bajo un virtual-mta en su lugar.)


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


El registro DNS se verifica correctamente a través de MX Toolbox, y DKIM ahora está activo.

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

3. SMTP Injection hacia Momentum

Momentum admite varios medios de inyección de mensajes, incluido API y SMTP. SMTP es el método utilizado aquí, hacia un host que ya ejecuta Momentum. Dejaremos su configuración sin cambios, ya que ya tiene la capacidad de aceptar inyecciones entrantes de otros hosts aprobados.

Esta es una versión más pequeña de una configuración de producción, donde los nodos de "generación" y los nodos MTA están separados, pero estrechamente acoplados a través de un VLAN privado y balanceadores de carga, transportando tráfico interno de inyección SMTP.


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


Las herramientas S/MIME están instaladas como antes, y inyectaremos mensajes a la dirección del host SMTP (MTA):

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

Como antes, tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes en el nodo de "generación". Las primeras líneas del archivo de mensaje coinciden con estas direcciones.

Enviamos el mensaje desde el nodo de "generación" con exactamente el mismo comando que antes, y el mensaje aparece en la inbox.

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

Como cabría esperar, S/MIME también coexistirá felices con el firma DKIM de Momentum.

Momentum admite varios medios de inyección de mensajes, incluido API y SMTP. SMTP es el método utilizado aquí, hacia un host que ya ejecuta Momentum. Dejaremos su configuración sin cambios, ya que ya tiene la capacidad de aceptar inyecciones entrantes de otros hosts aprobados.

Esta es una versión más pequeña de una configuración de producción, donde los nodos de "generación" y los nodos MTA están separados, pero estrechamente acoplados a través de un VLAN privado y balanceadores de carga, transportando tráfico interno de inyección SMTP.


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


Las herramientas S/MIME están instaladas como antes, y inyectaremos mensajes a la dirección del host SMTP (MTA):

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

Como antes, tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes en el nodo de "generación". Las primeras líneas del archivo de mensaje coinciden con estas direcciones.

Enviamos el mensaje desde el nodo de "generación" con exactamente el mismo comando que antes, y el mensaje aparece en la inbox.

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

Como cabría esperar, S/MIME también coexistirá felices con el firma DKIM de Momentum.

Momentum admite varios medios de inyección de mensajes, incluido API y SMTP. SMTP es el método utilizado aquí, hacia un host que ya ejecuta Momentum. Dejaremos su configuración sin cambios, ya que ya tiene la capacidad de aceptar inyecciones entrantes de otros hosts aprobados.

Esta es una versión más pequeña de una configuración de producción, donde los nodos de "generación" y los nodos MTA están separados, pero estrechamente acoplados a través de un VLAN privado y balanceadores de carga, transportando tráfico interno de inyección SMTP.


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


Las herramientas S/MIME están instaladas como antes, y inyectaremos mensajes a la dirección del host SMTP (MTA):

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

Como antes, tenemos la clave privada del remitente (steve@thetucks.com.pem) y la clave pública del destinatario (steve.tuck@sparkpost.com.crt) ya presentes en el nodo de "generación". Las primeras líneas del archivo de mensaje coinciden con estas direcciones.

Enviamos el mensaje desde el nodo de "generación" con exactamente el mismo comando que antes, y el mensaje aparece en la inbox.

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

Como cabría esperar, S/MIME también coexistirá felices con el firma DKIM de Momentum.

4. Inyección SMTP hacia SparkPost

En parte 2, utilizamos la API REST de transmisiones de SparkPost para inyectar mensajes. Por supuesto, también es posible inyectar mensajes en SparkPost utilizando SMTP. Configuramos las variables de entorno de esta manera:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Si estás utilizando el servicio hospedado en la UE de SparkPost, entonces configura SMTP_HOST como smtp.eu.sparkpostmail.com.
(Ver aquí para más opciones – por ejemplo, puede inyectar en el puerto 2525 en lugar de 587.)

La salida a continuación muestra que se utiliza STARTTLS, junto con el nombre de usuario y la contraseña.

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


Verás:

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

La contraseña se imprime con caracteres sustitutos *** para que no comprometas la privacidad de tu clave si alguien está mirando por encima de tu hombro.

Protegiendo Tus Credenciales

Ten en cuenta que las variables de entorno podrían configurarse en un archivo de script de shell o similar, para evitar volver a escribirlas. Si lo haces, cuida tus contraseñas/claves de API limitando el acceso a ese archivo solo a ti. Por ejemplo, si tu archivo de configuración de credenciales se llama my_envs.sh, entonces ejecuta:

chmod 0700 my_envs.sh


Advertencias Relacionadas con SMTP que Puede Ver

La inyección SMTP de SparkPost es bastante estricta, como cabría esperar de un servicio público. Si no has configurado el número de puerto SMTP, verás una advertencia:

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


Si no has configurado el nombre de usuario SMTP o no has configurado la contraseña, verás:

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

Estos mensajes de error se informan tal cual desde la biblioteca SMTP de Python, de ahí el formato.

En parte 2, utilizamos la API REST de transmisiones de SparkPost para inyectar mensajes. Por supuesto, también es posible inyectar mensajes en SparkPost utilizando SMTP. Configuramos las variables de entorno de esta manera:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Si estás utilizando el servicio hospedado en la UE de SparkPost, entonces configura SMTP_HOST como smtp.eu.sparkpostmail.com.
(Ver aquí para más opciones – por ejemplo, puede inyectar en el puerto 2525 en lugar de 587.)

La salida a continuación muestra que se utiliza STARTTLS, junto con el nombre de usuario y la contraseña.

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


Verás:

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

La contraseña se imprime con caracteres sustitutos *** para que no comprometas la privacidad de tu clave si alguien está mirando por encima de tu hombro.

Protegiendo Tus Credenciales

Ten en cuenta que las variables de entorno podrían configurarse en un archivo de script de shell o similar, para evitar volver a escribirlas. Si lo haces, cuida tus contraseñas/claves de API limitando el acceso a ese archivo solo a ti. Por ejemplo, si tu archivo de configuración de credenciales se llama my_envs.sh, entonces ejecuta:

chmod 0700 my_envs.sh


Advertencias Relacionadas con SMTP que Puede Ver

La inyección SMTP de SparkPost es bastante estricta, como cabría esperar de un servicio público. Si no has configurado el número de puerto SMTP, verás una advertencia:

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


Si no has configurado el nombre de usuario SMTP o no has configurado la contraseña, verás:

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

Estos mensajes de error se informan tal cual desde la biblioteca SMTP de Python, de ahí el formato.

En parte 2, utilizamos la API REST de transmisiones de SparkPost para inyectar mensajes. Por supuesto, también es posible inyectar mensajes en SparkPost utilizando SMTP. Configuramos las variables de entorno de esta manera:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

Si estás utilizando el servicio hospedado en la UE de SparkPost, entonces configura SMTP_HOST como smtp.eu.sparkpostmail.com.
(Ver aquí para más opciones – por ejemplo, puede inyectar en el puerto 2525 en lugar de 587.)

La salida a continuación muestra que se utiliza STARTTLS, junto con el nombre de usuario y la contraseña.

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


Verás:

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

La contraseña se imprime con caracteres sustitutos *** para que no comprometas la privacidad de tu clave si alguien está mirando por encima de tu hombro.

Protegiendo Tus Credenciales

Ten en cuenta que las variables de entorno podrían configurarse en un archivo de script de shell o similar, para evitar volver a escribirlas. Si lo haces, cuida tus contraseñas/claves de API limitando el acceso a ese archivo solo a ti. Por ejemplo, si tu archivo de configuración de credenciales se llama my_envs.sh, entonces ejecuta:

chmod 0700 my_envs.sh


Advertencias Relacionadas con SMTP que Puede Ver

La inyección SMTP de SparkPost es bastante estricta, como cabría esperar de un servicio público. Si no has configurado el número de puerto SMTP, verás una advertencia:

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


Si no has configurado el nombre de usuario SMTP o no has configurado la contraseña, verás:

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

Estos mensajes de error se informan tal cual desde la biblioteca SMTP de Python, de ahí el formato.

¿Cuál es más rápido: SMTP o API?

Comparación de rendimiento

Aquí se presenta un desglose rápido de las pruebas de rendimiento:

Medición

SMTP

API

Notas

Archivo pequeño (~19 KB)

~60 ms

~60 ms

Rendimiento casi idéntico

Archivo grande (~577 KB)

~280 ms

~200 ms

API ligeramente más rápido con cargas útiles más grandes

Francamente, S/MIME probablemente no sea un caso de uso de alto volumen, pero tener la misma herramienta con dos opciones de salida nos pedía correr una carrera.

El archivo de prueba de correo electrónico “Avocado” usado aquí es de aproximadamente 19KB. Repetir las pruebas 10 veces mediante un bucle bash mostró que los tiempos promedio son similares para SMTP y API, alrededor de 60 milisegundos por mensaje, lo cual es bastante rápido. En este caso, inyectamos desde una instancia EC2 mediana en la misma región de alojamiento que SparkPost.com, lo cual es una buena manera de mantener bajos los tiempos de viaje de ida y vuelta de la red.

Repitiendo esto con un archivo de prueba más grande (577KB), la API tomó aproximadamente 200 milisegundos, mientras que SMTP tomó 280 milisegundos por mensaje – todavía impresionante para un tamaño de archivo 30 veces más grande. Por supuesto, los resultados pueden variar dependiendo de la ubicación, la congestión de internet, etc., pero es improbable que el rendimiento sea un problema.

Si realmente necesitas el máximo rendimiento, un buen punto de partida sería iniciar un número establecido de procesos/sesiones de inyección concurrentes según nuestras recomendaciones de mejores prácticas de transmisión – por ejemplo, desde una tarea supervisora.

Comparación de rendimiento

Aquí se presenta un desglose rápido de las pruebas de rendimiento:

Medición

SMTP

API

Notas

Archivo pequeño (~19 KB)

~60 ms

~60 ms

Rendimiento casi idéntico

Archivo grande (~577 KB)

~280 ms

~200 ms

API ligeramente más rápido con cargas útiles más grandes

Francamente, S/MIME probablemente no sea un caso de uso de alto volumen, pero tener la misma herramienta con dos opciones de salida nos pedía correr una carrera.

El archivo de prueba de correo electrónico “Avocado” usado aquí es de aproximadamente 19KB. Repetir las pruebas 10 veces mediante un bucle bash mostró que los tiempos promedio son similares para SMTP y API, alrededor de 60 milisegundos por mensaje, lo cual es bastante rápido. En este caso, inyectamos desde una instancia EC2 mediana en la misma región de alojamiento que SparkPost.com, lo cual es una buena manera de mantener bajos los tiempos de viaje de ida y vuelta de la red.

Repitiendo esto con un archivo de prueba más grande (577KB), la API tomó aproximadamente 200 milisegundos, mientras que SMTP tomó 280 milisegundos por mensaje – todavía impresionante para un tamaño de archivo 30 veces más grande. Por supuesto, los resultados pueden variar dependiendo de la ubicación, la congestión de internet, etc., pero es improbable que el rendimiento sea un problema.

Si realmente necesitas el máximo rendimiento, un buen punto de partida sería iniciar un número establecido de procesos/sesiones de inyección concurrentes según nuestras recomendaciones de mejores prácticas de transmisión – por ejemplo, desde una tarea supervisora.

Comparación de rendimiento

Aquí se presenta un desglose rápido de las pruebas de rendimiento:

Medición

SMTP

API

Notas

Archivo pequeño (~19 KB)

~60 ms

~60 ms

Rendimiento casi idéntico

Archivo grande (~577 KB)

~280 ms

~200 ms

API ligeramente más rápido con cargas útiles más grandes

Francamente, S/MIME probablemente no sea un caso de uso de alto volumen, pero tener la misma herramienta con dos opciones de salida nos pedía correr una carrera.

El archivo de prueba de correo electrónico “Avocado” usado aquí es de aproximadamente 19KB. Repetir las pruebas 10 veces mediante un bucle bash mostró que los tiempos promedio son similares para SMTP y API, alrededor de 60 milisegundos por mensaje, lo cual es bastante rápido. En este caso, inyectamos desde una instancia EC2 mediana en la misma región de alojamiento que SparkPost.com, lo cual es una buena manera de mantener bajos los tiempos de viaje de ida y vuelta de la red.

Repitiendo esto con un archivo de prueba más grande (577KB), la API tomó aproximadamente 200 milisegundos, mientras que SMTP tomó 280 milisegundos por mensaje – todavía impresionante para un tamaño de archivo 30 veces más grande. Por supuesto, los resultados pueden variar dependiendo de la ubicación, la congestión de internet, etc., pero es improbable que el rendimiento sea un problema.

Si realmente necesitas el máximo rendimiento, un buen punto de partida sería iniciar un número establecido de procesos/sesiones de inyección concurrentes según nuestras recomendaciones de mejores prácticas de transmisión – por ejemplo, desde una tarea supervisora.

Resumiendo …

Hemos visto cómo la herramienta basada en SparkPost API utilizada en Parte 2 se actualiza para admitir la inyección SMTP para soportar MTAs locales como Port25 PowerMTA y Momentum en una variedad de configuraciones, así como con SparkPost.

¡Eso es todo por ahora! Feliz envío.

Hemos visto cómo la herramienta basada en SparkPost API utilizada en Parte 2 se actualiza para admitir la inyección SMTP para soportar MTAs locales como Port25 PowerMTA y Momentum en una variedad de configuraciones, así como con SparkPost.

¡Eso es todo por ahora! Feliz envío.

Hemos visto cómo la herramienta basada en SparkPost API utilizada en Parte 2 se actualiza para admitir la inyección SMTP para soportar MTAs locales como Port25 PowerMTA y Momentum en una variedad de configuraciones, así como con SparkPost.

¡Eso es todo por ahora! Feliz envío.

Otras noticias

Leer más de esta categoría

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

La plataforma completa AI-native que escala con tu negocio.

© 2025 Bird

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

La plataforma completa AI-native que escala con tu negocio.

© 2025 Bird