كيفية توقيع البريد الإلكتروني DOMAINKEYS/DKIM باستخدام عميل C# SMTP؟

StackOverflow https://stackoverflow.com/questions/2358095

سؤال

لقد كتبت برنامجًا في C# يرسل رسائل البريد الإلكتروني. الآن لدي شرط للتوقيع على رسائل البريد الإلكتروني المتجهة باستخدام Dominkeys/DKIM ، لكنني لست متأكدًا من كيفية القيام بذلك.

لقد قمت بإعداد جميع المفاتيح ، لكنني لا أعرف كيف أحصل على هذه المفاتيح وأدرجها في رأس البريد الإلكتروني.

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

المحلول 6

لم أجد الكثير من المساعدة في هذه المشكلة ، ولكن تم حل مشكلتي عن طريق تكوين SMTP Server. لا يمكنني نشر هذه الخطوات لأنني أستخدم خادم SMTP من طرف ثالث وكل خادم لديه تكوين خاص به. بعد التكوين الصحيح ، يضيف SMTP تلقائيًا توقيع DM/DKIM.

نصائح أخرى

هناك مشكلة أساسية في محاولة القيام بتوقيعات DKIM باستخدام System.net.mail.mailmessage و system.net.mail.smtpclient وهو أنه من أجل التوقيع على الرسالة ، تحتاج إلى كزات SmtpClient من أجل hash رسالة جسم كواحدة من الخطوات في توليد رأس التوقيع DKIM. تأتي المشكلة عندما يكون لديك طرق عرض أو مرفقات بديلة لأن SMTPClient ستولد حدود جديدة متعددة في كل مرة تكتب فيها الرسالة التي تكسر تجزئة الجسم وبالتالي صحة التوقيع DKIM.

للعمل حول هذا ، يمكنك استخدام mimekit و MailKit مكتبات المصادر المفتوحة لـ .NET كإطار بديل لاستخدام System.net.mail.

لإضافة توقيع DKIM إلى رسالة في Mimekit ، ستفعل شيئًا كهذا:

MimeMessage message = MimeMessage.CreateFromMailMessage(mailMessage);
HeaderId[] headersToSign =  new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };

string domain = "example.net";
string selector = "brisbane";

DkimSigner signer = new DkimSigner ("C:\my-dkim-key.pem", domain, selector) 
{
   SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1,
   AgentOrUserIdentifier = "@eng.example.com",
   QueryMethod = "dns/txt",      
};

// Prepare the message body to be sent over a 7bit transport (such as 
// older versions of SMTP). This is VERY important because the message
// cannot be modified once we DKIM-sign our message!
//
// Note: If the SMTP server you will be sending the message over 
// supports the 8BITMIME extension, then you can use
// `EncodingConstraint.EightBit` instead.
message.Prepare (EncodingConstraint.SevenBit);

message.Sign (signer, headersToSign, 
    DkimCanonicalizationAlgorithm.Relaxed, 
    DkimCanonicalizationAlgorithm.Simple);

لإرسال الرسالة باستخدام MailKit ، ستفعل شيئًا كهذا:

using (var client = new MailKit.Net.Smtp.SmtpClient ()) {
    client.Connect ("smtp.gmail.com", 465, true);
    client.Authenticate ("username", "password");
    client.Send (message);
    client.Disconnect (true);
}

امل ان يساعد.

يرى https://github.com/dmcgiv/dkim.net إنه تنفيذ Mail (DKIM) الذي تم تحديده (DKIM) لـ .NET مكتوب في C# - يمكّنك من توقيع كائنات MailMessage.

أريد أن أعرف أيضًا أنني أجد تطبيق DKIM فقط ، لكن لا يمكنني تشغيل الناجح -_-http://tinisles.blogspot.com/2009/09/sending-dkim-email-from-c.html

يستخدمhttp://www.mimekit.org

لا يسمح فقط باستخدام DKIM للتوقيع ، بل يمكنك أيضًا تضمين شهادات S/MIME وشهادات PGP والمزيد. أيضًا ، إنه ليب ناضج للغاية - الوحيد الذي وجدته يتولى اللغات الأجنبية (بصرف النظر عن اللغة الإنجليزية) بشكل صحيح ، لأنه مشفر تمامًا وشامل مع وضع Unicode في الاعتبار.

إنه مجاني ويفتح.

إذا كنت تتطلع إلى توقيع جسم mailmessage ، فإن dkim.net رائع. إذا كنت تتطلع إلى وجود طرق عرض بديلة في رسالتك ، فلن أتمكن من العثور على حل وكتبت (مفتوح المصدر مع إخلاء المسئولية المعتادة) التي يمكن العثور عليها في https://github.com/yannispsarras/dkim-alternativeViews

أفهم أن هذا موضوع قديم جدًا لكنني اعتقدت أنه قد يساعد شخصًا ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top