2010-05-09 11 views
21

ऐसा लगता है कि डोमेन नाम पर सी #/.NET पर ईमेल पर हस्ताक्षर करने के लिए कुछ महान पुस्तकालय हैं, लेकिन मुझे एक ही तरह का मुश्किल समय मिल रहा है PHP के लिए समर्थन का। शायद मैं सही जगह पर नहीं देख रहा हूँ?PHP- आधारित SMTP क्लाइंट में डोमेनकेज़/डीकेआईएम सेट करना

मुझे मिला केवल एक ही है http://php-dkim.sourceforge.net/; यह अविश्वसनीय रूप से हैकी दिखता है और केवल PHP4 का समर्थन करता है। यह ध्यान में रखते हुए कि PHP कितना लोकप्रिय है, और गैर-स्पैम के रूप में ईमेल वर्गीकरण के लिए डोमेनकी कितनी महत्वपूर्ण हैं, मैं बेहतर टूल की अपेक्षा करता हूं; किसी के बारे में पता है? कोई अन्य चाल जो आप सिफारिश करेंगे?

अतिरिक्त जानकारी: मैं एक बाहरी एसएमटीपी प्रदाता का उपयोग कर रहा हूं क्योंकि मुझे प्रति दिन हजारों ईमेल भेजने की आवश्यकता है।

+0

वोट \t यहाँ नीचे उदाहरण कार्यों है कैसे DKIM और php मेल() फ़ंक्शन के साथ ईमेल भेजने के लिए: https://github.com/breakermind/PHP-DKIM –

उत्तर

21

मैं एमटीए स्तर पर डीकेआईएम समर्थन की सिफारिश करता हूं ताकि किसी दिए गए डोमेन के लिए आपके सभी सर्वर जेनरेट किए गए ईमेल डिफ़ॉल्ट रूप से हस्ताक्षरित हों। (जब तक आपके पास डोमेन के लिए सभी सर्वर जेनरेट किए गए ईमेल पर हस्ताक्षर न करने का वास्तव में अच्छा कारण है)।

डीकिम-मिलटर और सेंडमेल (मेरे मामले में सेंटोस 5.2 पर) के साथ एलएएमपी पर डीकेआईएम सेटअप प्राप्त करने के लिए मेरे गुगल में सबसे अच्छा प्रारंभिक बिंदु Jeff Atwood's post about sending emails through code था।

मैं उससे सहमत हूं कि आपको पहले 2 चीजों को संबोधित करना चाहिए, जो पीटीआर रिकॉर्ड और डीकेआईएम हस्ताक्षर रिवर्स हैं।

भी बहुत महत्वपूर्ण:

    ईमेल भेजने के लिए पहले से ही काली सूची में डाल नहीं किया जा रहा
  1. आईपी बॉक्स से पता।
  2. यकीन [email protected] एक मान्य ईमेल बॉक्स
  3. है अपने सर्वर जेनरेट किया गया ईमेल follow these guidelines for email headers (एक संपर्क फ़ॉर्म नाम/ईमेल एक रूप में प्रदान से आने के लिए की आवश्यकता होगी, की तरह) कहीं और से आने के लिए प्रकट करने के लिए आवश्यक है या नहीं बनाते हैं।

यहां उपयोग किया गया email ip address blacklist checker है।

उन 5 चीजें आपके ईमेल वितरण योग्यता के मुद्दों का शायद 95% हल हो जाएंगी।

यह Guide for Fedora/dkim-milter/postfix भी बहुत अच्छा है।

मैं अपने ऐप के लिए उपयोग की जाने वाली PHP मेल लाइब्रेरी PHPMailer 5.1 है जिसमें डीकेआईएम समर्थन है (और केवल PHP 5 है), लेकिन शोध करने के बाद, मैंने तय किया कि प्रेषण स्तर पर कार्यान्वयन का एक बेहतर समाधान था। जैसा कि आप देख सकते हैं, यहां तक ​​कि PHPMailer 5.1 के लेखक का सुझाव नहीं है कि PHP मेल लाइब्रेरी स्तर पर डीकेआईएम सबसे अच्छा समाधान http://dkim.worxware.com/ है।

आपको शुभकामनाएं।

+0

उपयोगी जानकारी है, लेकिन नहीं मेरे लिए, माफ़ कीजिये। मैं एक बाहरी एसएमटीपी ईमेल प्रदाता का उपयोग कर रहा हूं और उनके कोड पर कोई नियंत्रण नहीं है। मुझे उनका उपयोग करना है क्योंकि मैं हजारों ईमेल भेज रहा हूं। शेष सुझाव सीधे मेरे प्रश्न पर लागू नहीं होते हैं। –

+0

@Alex: मैं PHP के लिए अपने स्वयं के डीकेआईएम कार्यान्वयन को कोड करने वाला था लेकिन मैं jigglee के साथ हूँ: एमटीए इसे संभालना चाहिए। कल्पना करें कि एमटीए ईमेल सामग्री को बदलता/सुधारता है, PHP के बारे में जानने के लिए कोई रास्ता नहीं है और इससे निजी/सार्वजनिक कुंजी अलग हो जाएंगी, इससे प्रतिकूल प्रभाव पड़ेगा। –

+0

अद्यतन: मुझे तब से एक बेहतर संयोजन मिला है: postfix + opendkim। मुझे पता है कि यह अभी भी एलेक्स के बाहरी एसएमटीपी प्रदाता के मुद्दे को संबोधित नहीं करता है, लेकिन मैं उन लोगों को जानता हूं जो इस धागे को खोजते हैं कि मेल सर्वर पर रूट कौन है। [यह ब्लॉग पोस्ट] (http://blog.calmblue.net/2010/05/opendkim-postfix-centos/) इसे सेट अप करने के लिए एक उत्कृष्ट मार्गदर्शिका है। – codercake

11

क्या आपने कोशिश की है: phpMailDomainSigner यह ऑब्जेक्ट ओरिएंटेड स्टाइल में डीकेआईएम-हस्ताक्षर और डोमेनके-हस्ताक्षर का समर्थन करता है।

यहाँ कुछ उदाहरण:

// 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); 
+0

यह आपको नवीनतम संस्करण के लिए डाउनलोड में ले जाएगा: http://code.google.com/a /apache-extras.org/p/phpmailer/downloads/list इसके अलावा, PHPMailer के लिए मूल प्रोजेक्ट व्यवस्थापक ने PHPMailer के साथ ईमेल पर हस्ताक्षर करने के लिए आवश्यक डीकेआईएम फ़ाइलों को बनाने के लिए ए वेबसाइट बनाई: http://dkim.worxware.com/ – Cameron

10

DKIM के लिए पूरी तरह एक वर्ग जो PHPMailer से स्पिन-ऑफ है, लेकिन आरएफसी और अच्छा और साफ कोड के संबंध के बारे में सुधार के साथ:

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

उदाहरण:

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); 
+0

परियोजना गिटहब में चली गई: https://github.com/louisameline/php-mail-ignatureature – Gerald

13

यह वह है जो मेरे रडार पर थोड़ी देर के लिए रहा है और वेब पर कहीं भी इस धागे में मूल प्रश्न का एक निश्चित उत्तर नहीं मिला। अब मैं PHP/नाशपाती के साथ डीकेआईएम हस्ताक्षरित एसएमटीपी ईमेल भेजने को लागू करने में सक्षम हूं। नीचे आवश्यक कदम हैं।

  1. मैं (आप http://www.ra726.net/php-dkim.zip के माध्यम से इसे डाउनलोड कर सकते हैं) http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being-marked-as-spam/ से DKIM का एक संशोधित संस्करण पाया। यदि आपने पहले से ही डीकेआईएम लागू किया है और इसे एसएमपी मेल के साथ काम करने की ज़रूरत है तो आपको इसकी आवश्यकता है dkim.php फ़ाइल, जैसा कि ब्लॉग कहता है, सरणी को सरणी के रूप में पारित करने के लिए थोड़ा संशोधित किया जाता है। मेरे कोड में, मैंने इसे dkimNEW.php नाम दिया है।

  2. सुनिश्चित करें कि आप अधिकतर शीर्षलेख शामिल करते हैं ताकि एमटीए इस पर हस्ताक्षर करने के बाद संदेश को संशोधित न करे। मेरे सीमित शोध में, सबसे अधिक जोड़ा गया शीर्षलेख दिनांक और संदेश-आईडी शीर्षलेख हैं, इस प्रकार मेरा हेडर सरणी इस तरह दिखता है: नोट: मैंने इसे HTML ईमेल भेजने के लिए उपयोग किया, सूट में बदलाव किया! इसके अलावा, संदेश- 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. फिर आप उर्फ ​​

    अपने ईमेल पर हस्ताक्षर और हेडर सरणी के लिए हस्ताक्षर जोड़ने के लिए, जैसा कि ऊपर उल्लेख संशोधित dkim.php उपयोग करने के लिए मिल जाएगा
    require 'dkimNEW.php'; 
    $dkim = AddDKIM($headers, $subject, $body); 
    $headers['DKIM-Signature'] = $dkim; 
    

कोड के बाकी PHP/नाशपाती के साथ SMTP के माध्यम से ईमेल भेजने के लिए सामान्य कोड है। पूर्ण काम कर कोड है:

<?php 
    require_once 'Mail.php'; 
    require_once 'Mail/mime.php'; 
    // set all of the parameters 
    $subject = 'Test of DKIM'; 
    $from = 'My Name <[email protected]>'; 
    $to = 'First Recipient <[email protected]>'; 
    $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('[email protected]', '[email protected]'); 
    $mail = $smtp->send($recipients, $headers, $body); 

?> 

पी एस। बस अगर आपने नोटिस नहीं किया है, तो अपने आप के साथ मूल्यों को प्रतिस्थापित करें!

इसलिए, डीकेआईएम को एसएमटीपी ईमेल (या वास्तव में PHP मेल) के साथ काम करने के लिए अनिवार्य रूप से आवश्यक सभी चीजों को यह सुनिश्चित करना है कि आप अपने एमटीए द्वारा अपने ईमेल में जोड़े गए सभी शीर्षलेख निर्दिष्ट करें, फिर हेडर पर हस्ताक्षर करें, संदेश का विषय और निकाय, और अंततः आपके शीर्षलेख के साथ हस्ताक्षरित भाग शामिल करें।

संबंधित मुद्दे