Enviar algo por correo electrónico

Hay dos hechizos para hacer un sitio web en China: el primero es que no se reciben los correos electrónicos registrados.

¿Por qué lo haces tú mismo?

Hay dos hechizos mágicos para hacer un sitio web en China que no puedes escapar.

El primero es que los correos electrónicos registrados no siempre son recibidos por los usuarios; el otro es que DDOS es inmediatamente famoso.

Para evitar la primera maldición, compramos a los usuarios pagos de SendCloud antes.

Todos los días, decenas a cientos de usuarios registrados piensan que son muy confiables. Hasta que se revisó la página de inicio, colocamos un teléfono de servicio al cliente en la página de información rápida enviada por correo electrónico.

Luego, cada tres o cinco, hubo una queja telefónica por parte del cliente de que no se alcanzó el correo electrónico de activación. Estábamos muy deprimidos. Utilizamos el "mejor proveedor de servicios de correo del Hemisferio Oriental".

Más tarde, no podía soportar reenviar los correos electrónicos a mano todos los días. Luo Fei dijo, usemos WebHook para hacer un rebote. Una vez que la entrega no tiene éxito, enviaremos automáticamente un correo electrónico a nuestro personal de operaciones.

Como resultado, encontramos que Hook también devolvió algunos correos electrónicos enviados con éxito. Entonces Luo Fei colapsó T__T.

De hecho, no estoy aquí para vomitar, SendCloud sigue siendo la primera opción de los proveedores de servicios de correo nacionales, después de todo, esta es la única.

El fin de semana pasado, analicé cuidadosamente el siguiente problema e intenté encontrar una solución, escribirla y compartirla con todos.

Demanda

En primer lugar, nuestras necesidades son algo especiales. Los solicitantes de empleo no necesitan registrarse en JobDeer, cargar currículums directamente y el consultor abre una cuenta; mientras que los reclutadores, requerimos que use los buzones de la empresa, y no se permiten los buzones públicos como QQ.

Los buzones corporativos de muchas empresas tienen habilitado el correo no deseado de IP, y muchos correos electrónicos no deseados se envían mediante SendCloud y Mailgun: comparten IP de manera predeterminada, por lo que ingresaron rápidamente en la lista negra de IP.

La mayoría de los clientes de SendCloud envían cartas a los buzones públicos, así que solo solicite a QQ, Gmail y 163 que se agreguen a la lista blanca. Pero este no es necesariamente el caso con los buzones corporativos.

Es por eso que creemos que la plataforma común para compartir IP para compartir IP no es efectiva. No necesariamente correcto, solo nuestro pensamiento.

Solución

Entonces, ¿cómo resolverlo? Cambiar la IP independiente.

sendcloud

La IP independiente de SendCloud es demasiado cara para dañarla. Se dice que debido a que los recursos públicos de PI disponibles son limitados, solo pueden limitar el precio. Como estudiante que ha trabajado en la nube, expreso mi comprensión, pero aún no puedo pagarla después de comprender.

Así que fui a ver el precio de Mailgun- $ 59 por mes, que era apenas aceptable. Pero dado nuestro pequeño volumen de correo, siempre nos sentimos incómodos.

Finalmente, decidí construir un MTA yo mismo, que es un servidor de transferencia de correo. Los motivos son los siguientes:

  • El buzón corporativo no debe agregar una lista negra al nuevo nombre de dominio e IP. Enviamos correos electrónicos de registro y suscripción con contenido regular, por lo que la regla de la lista negra no se activará.
  • Nuestro volumen de envío general está en los miles de niveles por día, esta cantidad no activará la prohibición de los buzones públicos
  • Tenemos varios VPS con IP públicas en Meituan Cloud, solo compílelos directamente sin comprar IP adicionales.

Build Postfix

Como ex programador PHP con miedo al mantenimiento del sistema operativo, generalmente uso Ubuntu. Instalar Postfix en Ubuntu es muy fácil.

Después de apt-get install, se puede seleccionar y configurar una interfaz de caracteres. Elegí Internet con SmartHost.

El proceso de instalación específico puede referirse aquí:  https://www.digitalocean.com/community/tutorials/how-to-install-and-setup-postfix-on-ubuntu-14-04

Cabe señalar que Postfix solo está abierto al cliente de la IP local de forma predeterminada, porque usamos PHP para llamar a Postfix para enviar, por lo que no hay modificación.

Configurar PHP

En php.ini, modifique sendmail_path a / usr / sbin / sendmail -t -i para que la función de correo de PHP pueda enviar correo normal.

Enviar directamente con la función Correo será un pequeño problema, además de codificar, escribirá desde [email protected]. No encontré nada que cambiar, así que lo envié directamente con PHPMailer.

$ mail = $ GLOBALS ['LP_MAILER']; 
$ mail-> CharSet = 'UTF-8'; 
$ mail-> Encoding = 'base64'; 
$ mail-> MessageID = $ mid. '@'. c ('mail_domain'); 

$ mail-> SetFrom (c ('mail_from')); 
$ mail-> AddReplyTo (c ('mail_from')); 

$ mail-> Asunto = $ asunto; 
$ mail-> WordWrap = 50; 
$ mail-> MsgHTML ($ body); 
$ mail-> AddAddress ($ a); 

if (! $ mail-> Send ()) 
{ 
    $ GLOBALS ['LP_MAILER_ERROR'] = $ mail-> ErrorInfo; 
    falso retorno; 
} 
else 
{ 
    $ mail-> ClearAddresses (); 
    volver verdadero; 
}

Al enviar en PHPMailer, puede especificar desde a voluntad, pero no esté contento, cuando desde es diferente del usuario real de envío, el correo se marcará como spam en muchos sistemas.

Al mismo tiempo, enviar correos electrónicos es una operación que consume mucho tiempo y no debe permitir que los procesos web esperen mucho tiempo. De lo contrario, se bloqueará un poco de servidores concurrentes. Que hacer Haz colas en tiempo real.

Cola de Redis

No uses cron para colas, suciedad. De hecho, Redis proporciona un servicio Pub / Sub que bloquea la lectura de una determinada versión. Esto es muy útil para colas en tiempo real. Para mejorar esta cola, se recomienda encarecidamente instalar la extensión phpredis pecl.

La lógica del servicio Pub / Sub es simple. Use la línea de comando para iniciar un PHP, suscríbase a un canal, este PHP ha estado esperando. Mientras el programa web use Redis para publicar los datos en el mismo canal, la línea de comando PHP obtendrá los datos y activará la función de devolución de llamada.

En el código, los suscriptores:

ini_set ('default_socket_timeout', -1); 

$ redis = nuevo Redis (); 
$ redis-> connect ('127.0.0.1', 6379); 
$ channelname = c ('mail_channel'); 
pruebe 
{ 
    $ redis-> subscribe (array ($ channelname), 'mailsend'); 
} catch (Exception $ e) 
{ 
echo $ e-> getMessage (); 
}

Por cierto, default_socket_timeout, si desea utilizar PHP para conectarse al socket durante mucho tiempo, debe establecer este valor, de lo contrario se romperá.

El código anterior mantendrá este PHP ejecutándose todo el tiempo y no terminará. Es por eso que recomiendo la extensión pecl. No necesita escribir mientras lo procesará solo, y cuando haya datos, devolverá la función de envío de correo.

función mailsend ($ instancia, $ channelName, $ mensaje) 

La función mailsend puede obtener los parámetros anteriores, de los cuales $ message es el más importante. Generalmente, después de serializar la matriz, pásala a través de publicar. A continuación se muestra el código del editor:

$ redis = nuevo Redis (); 
$ redis-> connect ('127.0.0.1', 6379); 

$ info = matriz (); 
$ info ['a'] = $ to; 
$ info ['subject'] = $ subject; 
$ info ['contenido'] = $ contenido; 

if ($ ret = $ redis-> Publish (c ('mail_channel'), serialize ($ info))) 
{ 
return send_result ('send to'. $ to. 'add to queue'); 
} 
else 
    return send_error ($ ret);

Es muy simple y muy conveniente de usar.

Como se mencionó anteriormente, dado que el usuario que llama a la función de correo es www-data, el buzón real es [email protected], y desea mostrarlo como [email protected]. Para garantizar que la coherencia sea muy simple, solo use usuarios fáciles para iniciar el suscriptor PHP.

su easy 
nohup php sub.php &

Adapte aún más las reglas antispam

Para evitar que otros usen su dirección de correo electrónico para enviar cartas a los buzones públicos, puede habilitar SPF y DKIM.

Si solo envía una carta, SPF no necesita instalar nada, simplemente agregue un registro TXT al DNS del nombre de dominio de envío. El formato es probablemente así:

v = spf1 ip4: 106.3.32.60 ~ todos 

Esta oración le dice al servidor receptor que si el buzón con este nombre de dominio no se envía desde 106.3.32.60, se marca directamente como correo no deseado.

DKIM es relativamente complicado: firmará el contenido del correo electrónico y luego el servidor receptor obtendrá la clave pública a través de DNS y verificará si la firma es correcta.

La operación específica es agregar un filtro de contenido a Postfix. Para obtener instrucciones detalladas, consulte aquí: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy

Una vez hecho todo esto, será difícil para otros robar el spam que usted mismo envió. Siempre que se limpie, puede pasar las reglas antispam sin problemas.

Contenido Anti-Spam

Durante la prueba, descubrí que mi buzón de prueba entró en la papelera de Gmail. Una de las ventajas de Gmail es que indicará por qué el correo entrará en la papelera. Esto es útil para que ajustemos el contenido del correo electrónico. En términos generales, es más confiable escribir el contenido completo en el texto tanto como sea posible que el accesorio óptico del cabello. También hay algunas palabras publicitarias de uso común en el correo no deseado, que deben evitarse.

Pensar más

Después de completar la función de correo postal de Postfix, Luo Fei y yo discutimos la poca confiabilidad de los servicios en la nube. Creemos que los servicios en la nube deben considerarse poco confiables, siempre habrá momentos en los que falle, incluidos los servicios que creamos nosotros mismos.

¿Cómo construir un soporte comercial confiable en una nube poco confiable? Ir soltero. Sí, la nube también debe verse como un punto único. Si superponemos el mismo tipo de servicios en la nube, cuando el servicio de la primera capa está inactivo y el servicio de la segunda capa se habilita automáticamente, la posibilidad de afectar al negocio debido a la inestabilidad de la nube se reducirá considerablemente.

Debido a que 0.1% * 0.1% = 0.0001%, la posibilidad de que dos servicios fallen al mismo tiempo se reduce considerablemente.

Bajo esta línea de pensamiento, hicimos el "Gato de Nueve Colas". Proporciona un mecanismo para garantizar que el proveedor de servicios en espera se activará automáticamente después de que el proveedor de servicios principal cuelgue. Al igual que con las nueve vidas del gato, mientras el proveedor de servicios no cuelgue, el negocio en sí no lo hará.

El gato de nueve colas tiene varios conceptos centrales

  • Servicio: servicio en la nube, ahora solo correo
  • Método: proveedores de servicios, hay dos capas de Mailgun y Postfix, y enviarán SendCloud en el futuro (espere a que arreglen Hook y compren una IP semi-independiente para probar suerte), el servicio de correo Sina (sí, Sina también lo ha hecho, es a pequeña escala Prueba) y el acceso SMTP entran.
  • Nivel: Prioridad, a cada Método se le asigna una prioridad. Cuando se cuelga el nivel 1, encontrará automáticamente el nivel 2 para procesar y acumular a su vez, hasta el nivel 9. El nivel de cada proveedor de servicios se puede ajustar de acuerdo con la calidad del servicio.

El gato de nueve colas es un pequeño intento nuestro, que sirve principalmente internamente, y está escrito principalmente para compartir ideas con usted. Con esta idea, la nube confiable se puede encapsular en servicios poco confiables, como el envío de SMS y el análisis de reanudación. Lo optimizaremos lentamente y consideraremos proporcionar servicios externos cuando sea apropiado.

Publicado 57 artículos originales · elogiado 0 · visitas 2169

Supongo que te gusta

Origin blog.csdn.net/zhidc/article/details/105333650
Recomendado
Clasificación