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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.



