سؤال

يبدو أن هناك بعض المكتبات الرائعة لتوقيع Domainkeys على رسائل البريد الإلكتروني على شبكة C#/. ، لكنني أواجه صعوبة كبيرة في العثور على نفس النوع من الدعم لـ PHP. ربما لا أنظر في المكان المناسب؟

الوحيد الذي وجدته هو http://php-dkim.sourceforge.net/; ؛ يبدو اختراق بشكل لا يصدق ويدعم php4 فقط. بالنظر إلى مدى شعبية PHP ، ومدى أهمية Domainkeys لتصنيف البريد الإلكتروني على أنها غير مربحة ، أتوقع أدوات أفضل ؛ هل تعرف أي؟ أي حيل أخرى توصي بها؟

معلومات إضافية: أنا أستخدم مزود SMTP خارجي لأنني بحاجة إلى إرسال آلاف رسائل البريد الإلكتروني يوميًا.

هل كانت مفيدة؟

المحلول

أوصي بدعم DKIM على مستوى MTA بحيث يتم توقيع جميع بريدك الإلكتروني الذي تم إنشاؤه من الخادم لنطاق معين افتراضيًا. (ما لم يكن لديك سبب وجيه حقًا لعدم توقيع جميع بريد إلكتروني تم إنشاؤه بواسطة الخادم لنطاق).

كانت أفضل نقطة انطلاق في googling الخاصة بي للحصول على إعداد DKIM على المصباح مع DKIM-Milter و sendmail (على CentOS 5.2 في حالتي) منشور جيف أتوود حول إرسال رسائل البريد الإلكتروني من خلال الرمز.

أتفق معه على أن أول شيئين يجب أن تعالجهما هما عكس سجل PTR وتوقيع DKIM.

أيضا مهم جدا:

  1. عنوان IP الخاص بالمربع لإرسال بريد إلكتروني لا يجري بالفعل في القائمة السوداء.
  2. تأكد من postmaster@emailsendingdomain.com هو صندوق بريد إلكتروني صالح
  3. إذا احتاج بريدك الإلكتروني الذي تم إنشاؤه الخادم إلى مكان آخر (مثل نموذج جهة اتصال يحتاج إلى أن يأتي من الاسم/البريد الإلكتروني المقدم في نموذج) اتبع هذه الإرشادات لرؤوس البريد الإلكتروني.

ها هو البريد الإلكتروني عنوان IP مدقق القائمة السوداء التي استخدمتها.

هذه الأشياء الخمسة سوف تحل ربما 95 ٪ من مشكلات تسليم البريد الإلكتروني الخاصة بك.

هذه دليل Fedora/DKIM-Milter/postfix هو أيضا جيد جدا.

مكتبة بريد PHP التي أستخدمها في تطبيقي هي Phpmailer 5.1 التي لديها دعم DKIM (وهو PHP 5 فقط) ، ولكن بعد إجراء البحث ، قررت التنفيذ على مستوى SendMail كان حلاً أفضل. كما ترون ، حتى مؤلف Phpmailer 5.1 لا يقترح DKIM على مستوى مكتبة البريد PHP هو أفضل حل http://dkim.worxware.com/.

حظا سعيدا لك.

نصائح أخرى

هذا هو الذي كان على رادار بلدي لفترة من الوقت ولم يتمكن من العثور على إجابة نهائية على السؤال الأصلي في هذا الموضوع في أي مكان على الويب. لقد تمكنت الآن من تنفيذ إرسال بريد إلكتروني SMTP الموقّع DKIM مع PHP/Pear. فيما يلي الخطوات المطلوبة.

  1. لقد وجدت نسخة معدلة من DKIM من http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being-marked-as-spam/ (يمكنك تنزيله عبر http://www.ra726.net/php-dkim.zip). إذا كنت قد قمت بالفعل بتطبيق DKIM وتحتاج فقط إلى جعلها تعمل مع SMP Mail ، فكل ما تحتاجه من هذا هو ملف dkim.php الذي ، كما تقول المدونة ، تم تعديله قليلاً للتعامل مع الرؤوس التي تم تمريرها كصفيف. في الكود الخاص بي ، قمت بتسميته dkimnew.php.

  2. تأكد من تضمين معظم الرؤوس بحيث لا تقوم MTA بتعديل الرسالة بعد تسجيلها. في بحثي المحدود ، فإن الرؤوس الأكثر إضافة هي تاريخ تاريخ المعرفة ، وبالتالي يبدو صفيف الرأس الخاص بي مثل هذا: ملاحظة: لقد استخدمت هذا لإرسال بريد إلكتروني HTML ، تغيير لتلائم! أيضًا ، أضف مجالك كجزء آخر من معرف الرسالة

    $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;
    

ما تبقى من الرمز هو الرمز العادي لإرسال البريد الإلكتروني عبر SMTP مع PHP/Pear. رمز العمل الكامل هو:

<?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);

?>

ملاحظة. فقط في حال لم تلاحظ ، استبدل القيم الخاصة بك!

لذلك ، كل ما هو مطلوب بشكل أساسي لجعل DKIM للعمل مع SMTP البريد الإلكتروني (أو بالفعل بريد PHP) هو التأكد الرسالة ، وأخيراً تتضمن هذا الجزء الموقع مع رأسك.

هل حاولت: phpmaildomainsigner تدعم التوقيع DKIM وتوقيع المجال في النمط الموجهة للكائن.

هنا بعض الأمثلة:

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

فئة فقط لـ DKIM التي هي عرضية من Phpmailer ، ولكن مع تحسينات فيما يتعلق باحترام RFC ورمز NICE-Clean:

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top