Pregunta

Parece que hay algunas grandes bibliotecas por ahí que hacer DomainKeys firma de mensajes de correo electrónico en C # /. NET, pero estoy teniendo un momento muy difícil encontrar el mismo tipo de soporte para PHP. Tal vez no estoy buscando en el lugar correcto?

El único encontrado que es http://php-dkim.sourceforge.net/ ; se ve muy hacky y soportes Php4 solamente. Teniendo en cuenta la popularidad de PHP es, y cómo son DomainKeys crítico para la clasificación de correo electrónico como no spam, esperaría mejores herramientas; ¿Sabes de alguno? Cualesquiera otros trucos que le recomienda?

Información adicional:. Estoy usando un proveedor de SMTP externo porque tengo que enviar miles de correos electrónicos por día

¿Fue útil?

Solución

Me gustaría recomendar el apoyo DKIM a nivel MTA por lo que todo el correo electrónico de su servidor generada para un dominio dado se firma por defecto. (A menos que tenga una muy buena razón para no firmar todo el correo electrónico generado por el servidor de un dominio).

El punto de partida mejor en mi googlear para obtener una configuración DKIM en la lámpara con dkim-milter y Sendmail (en CentOS 5.2 en mi caso) era después de Jeff Atwood sobre el envío de correos electrónicos a través de código .

Yo estaría de acuerdo con él en que las 2 primeras cosas que debe hacer frente son registro PTR reversa y firma DKIM.

También es muy importante:

  1. dirección IP de la caja de correo electrónico de envío no está ya en la lista negra.
  2. Asegúrese postmaster@emailsendingdomain.com es una casilla de correo electrónico válida
  3. si sus necesidades de correo electrónico generados por el servidor a parecen provenir de otro lugar (como un formulario de contacto necesitan venir de nombre / correo electrónico proporcionada en una forma) siguen estas directrices para los encabezados de correo electrónico .

Aquí está el correo electrónico dirección IP corrector lista negra que he usado.

Estos 5 cosas van a resolver tal vez el 95% de sus problemas de entrega de correo electrónico.

Guía para Fedora / DKIM-milter / postfix también es muy bueno.

La biblioteca PHP mail que utilizo para mi aplicación es PHPMailer 5.1, que cuenta con el apoyo de DKIM (y es PHP 5 solamente), pero después de hacer la investigación, decidí implementar a nivel sendmail era una solución mejor. Como se puede ver, incluso el autor de PHPMailer 5.1 no sugiere DKIM en el nivel de la biblioteca de correo PHP es la mejor solución http: / /dkim.worxware.com/ .

Lo mejor de las suertes a usted.

Otros consejos

Este es uno que ha estado en mi radar durante un tiempo y no podía encontrar una respuesta definitiva a la pregunta original en este hilo en cualquier lugar en la web. Ahora he podido poner en práctica el envío de correo electrónico SMTP DKIM firmado con PHP / pera. A continuación se presentan los pasos necesarios.

  1. I encontró una versión modificada de la DKIM de http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being -marcado-como-spam / (se puede descargar a través de http: // www. ra726.net/php-dkim.zip ). Si ya ha implementado DKIM y sólo hay que hacer que funcione con SMP electrónico entonces todo lo que necesita de esto es el archivo dkim.php que, como dice el blog, se ha modificado ligeramente a las cabeceras de mango pasados ??como una matriz. En mi código, he nombrado dkimNEW.php.

  2. Asegúrese de incluir la mayoría de las cabeceras de manera que el MTA no modifica el mensaje después de haber firmado. En mi investigación limitada, las cabeceras más agregados son las cabeceras de fecha y Message-ID, por lo tanto, mis cabecera de matriz es similar al siguiente: Nota: He utilizado este para el envío de un correo electrónico HTML, el cambio de traje! Además, agregue su dominio como la última parte del identificador del mensaje

    $headers = array(
        'Subject' => $subject,
        'From' => $from,
        'To' => $to,
        'MIME-Version' => '1.0',
        'Date' => date('r'),
        'Message-ID' => '<'.sha1(microtime(true)).'@yourdomain.com>',
        'Content-Type' => 'text/html',
        'Content-Transfer-Encoding' => 'quoted-printable',
    ); // end $headers
    
  3. A continuación, obtener al utilizar el dkim.php modificado mencionado anteriormente para firmar su correo electrónico y añadir la firma a la matriz cabeceras, alias

    require 'dkimNEW.php';
    $dkim = AddDKIM($headers, $subject, $body);
    $headers['DKIM-Signature'] = $dkim;
    

El resto del código es el código normal para enviar correo electrónico a través de SMTP con PHP / pera. El código completo de trabajo es:

<?php
    require_once 'Mail.php';
    require_once 'Mail/mime.php';
  // set all of the parameters
    $subject = 'Test of DKIM';
    $from = 'My Name <myname@mydomain.com>';
    $to = 'First Recipient <recipient1@domain.com>';
    $pbody ='<html><head></head><body><h1>Done! DKIM test</h1>Result, next?</body></html>';
    $text = strip_tags($pbody);

    // create the headers
    $headers = array(
        'Subject' => $subject,
        'From' => $from,
        'To' => $to,
        'MIME-Version' => '1.0',
        'Date' => date('r'),
        'Message-ID' => '<'.sha1(microtime(true)).'@mydomain.com>',
        'Content-Type' => 'text/html',
        'Content-Transfer-Encoding' => 'quoted-printable',
    ); // end $headers


    // create the message
    $mime = new Mail_mime("\n");
    $mime->setTXTBody($text);
    $mime->setHTMLBody($pbody);

    // always call these methods in this order
    $body = $mime->get();
    $headers = $mime->headers($headers);

    require 'dkimNEW.php' ;
    $dkim = AddDKIM($headers, $subject, $body);
    $headers['DKIM-Signature'] = $dkim;

    // create the smtp mail object
    $smtp_params = array(
        'host' => 'mail.mydomain.com',
        'auth' => true,
        'username' => 'myUserName',
        'password' => 'myPassWord',
    ); // end $smtp_params
    $smtp = Mail::factory('smtp', $smtp_params);

    // send the message

    $recipients = array('recipient1@domain.com', 'recipient2@domain.com');
    $mail = $smtp->send($recipients, $headers, $body);

?>

PS. En caso de que no se dio cuenta, reemplazar los valores con su propio!

Por lo tanto, todo lo que es esencialmente necesario para hacer DKIM a trabajar con el correo electrónico SMTP (o incluso el correo PHP) es asegurar que especifica todas las cabeceras que se agregan a su correo electrónico por su MTA, a continuación, firmar los encabezados, sujeto y el cuerpo del mensaje, y, finalmente, incluye la porción firmado con su cabecera.

¿Usted se trate: phpMailDomainSigner Soporta DKIM-Signature y DomainKey-Firma en el estilo orientado a objetos.

Aquí algunos ejemplos:

// Create mailDomainSigner Object
include_once './lib/class.mailDomainSigner.php';

$mds = &new mailDomainSigner($domain_priv,$domain_d,$domain_s);
$new_data = $mds->sign(
                $mail_data,
                "Message-ID:Subject:From:Content-Type:MIME-Version:Content-Transfer-Encoding:Received:To:Date",
                true,true,false);

Una clase únicamente para DKIM que es un spin-off de PHPMailer, pero con mejoras en cuanto al respeto de la RFC y agradable y limpio-código:

https://sourceforge.net/projects/dkim-class-php/

Ejemplo:

include_once('dkim.class.php');
$dkim = new DKIM();
$dkim_header = $dkim -> get_DKIM_header($to, $subject, $message, $headers);
mail($to, $subject, $message, $dkim_header.$headers);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top