Domanda

Sembra che ci sono alcuni grandi librerie là fuori a fare DomainKeys firma di e-mail su C # /. NET, ma sto avendo un momento davvero difficile trovare lo stesso tipo di supporto per PHP. Forse io non sto cercando nel posto giusto?

L'unico che ho trovato è http://php-dkim.sourceforge.net/ ; sembra incredibilmente hacky e supporti PHP4 solo. Considerando quanto popolare PHP è, e come DomainKeys critica sono per la classificazione di posta elettronica come non spam, mi aspetto strumenti migliori; Ne conosci qualcuno? Eventuali altri trucchi che ci consiglia?

Info extra:. Sto usando un provider SMTP esterno perché ho bisogno di inviare migliaia di email al giorno

È stato utile?

Soluzione

mi consiglia sostegno DKIM a livello MTA in modo che tutti e-mail del server generato per un dato dominio è firmato per impostazione predefinita. (A meno che non si dispone di una buona ragione per non firmare tutte le email generate server per un dominio).

Il miglior punto di partenza della mia googling per ottenere l'installazione DKIM su LAMP con DKIM-milter e sendmail (su CentOS 5.2 nel mio caso) è stato post di Jeff Atwood circa l'invio di messaggi di posta elettronica tramite il codice .

Sono d'accordo con lui che i primi 2 cose che si dovrebbe affrontare sono record PTR inversa e DKIM firma.

Inoltre, molto importante:

  1. indirizzo IP della scatola per inviare e-mail, non già in lista nera.
  2. Assicurati che postmaster@emailsendingdomain.com è una casella di posta elettronica valido
  3. se le vostre esigenze e-mail generati dal server al sembrano provenire da qualche altra parte (come un modulo di contatto che necessitano di venire da nome / e-mail fornito in una forma) seguire queste linee guida per le intestazioni di posta elettronica .

Questa è la email indirizzo IP lista nera pedina che ho usato.

Queste 5 cose risolveranno forse il 95% dei vostri problemi di deliverability e-mail.

Guida per Fedora / DKIM-milter / postfix è anche molto buona.

La libreria PHP di posta che uso per la mia app è PHPMailer 5.1, che ha il supporto DKIM (ed è PHP 5 solo), ma dopo aver fatto ricerche, ho deciso attuazione a livello di sendmail è stata una soluzione migliore. Come si può vedere, anche l'autore di PHPMailer 5.1 non suggerisce DKIM a livello della libreria PHP mail è la soluzione migliore http: / /dkim.worxware.com/ .

Buona fortuna a voi.

Altri suggerimenti

Questo è uno che è stato sul mio radar per un po 'e non riusciva a trovare una risposta definitiva alla domanda iniziale in questo ovunque discussione sul web. Sono stati in grado di implementare l'invio di e-mail DKIM firmato SMTP con PHP / PEAR. Qui di seguito sono i passaggi necessari.

  1. Ho trovato una versione modificata del DKIM da http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being segnata con-as-spam / (si può scaricare tramite http: // www. ra726.net/php-dkim.zip ). Se è già stato implementato DKIM e solo bisogno di farlo funzionare con SMP mail, quindi tutto ciò che serve da questo è il file dkim.php che, come dice il blog, è leggermente modificato per le intestazioni manico passati come un array. Nel mio codice, ho chiamato esso dkimNEW.php.

  2. Assicurati di includere la maggior parte delle intestazioni in modo che il MTA non modifica il messaggio dopo che l'ha firmata. Nella mia ricerca limitata, le intestazioni più aggiunti sono le intestazioni Data e Message-ID, così la mia intestazione aspetto di array come questo: Nota: Ho usato questo per l'invio di una e-mail HTML, passare alla tuta! Inoltre, aggiungere il dominio come l'ultima parte del Message-ID

    $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. Sarà quindi arrivare a utilizzare il dkim.php modificata di cui sopra per firmare la tua email e aggiungere la firma alla matrice intestazioni, alias

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

Il resto del codice è il codice normale per inviare e-mail via SMTP con PHP / PEAR. Il codice di lavoro completo è:

<?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. Nel caso in cui non se ne accorse, sostituire i valori con i vostri!

Quindi, tutto ciò che è essenzialmente necessario per rendere DKIM al lavoro con e-mail SMTP (o addirittura la posta PHP) è quello di assicurarsi di specificare tutte le intestazioni che vengono aggiunti alla tua e-mail dal vostro MTA, poi firmare le intestazioni, soggetto e il corpo del messaggio, e, infine, comprende quella porzione firmato con l'intestazione.

Avete provare: phpMailDomainSigner Sostiene DKIM-Signature e DomainKey-Signature in Object Oriented stile.

Ecco alcuni esempi:

// 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 classe solo per DKIM che è uno spin-off da PHPMailer, ma con miglioramenti per quanto riguarda il rispetto della RFC e piacevole-e-clean codice:

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

Esempio:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top