2010-03-01 18 views
12

मैं सी # जो बाहर ईमेल भेजता है में एक कार्यक्रम में लिखा है। अब मुझे डोमिनिज़/डीकेआईएम का उपयोग करके आउटबाउंड ईमेल पर हस्ताक्षर करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि इसे कैसे किया जाए।सी # एसएमटीपी क्लाइंट का उपयोग कर डोमेनकी/डीकेआईएम ईमेल हस्ताक्षर कैसे करें?

मैंने सभी चाबियां स्थापित की हैं, लेकिन मुझे नहीं पता कि ईमेल हेडर में उन्हें शामिल करने के लिए उन्हें और hwo कैसे प्राप्त करें।

+0

क्या आपको Windows SMTP सर्वर का उपयोग कर समाधान मिला? – Josh

+0

मेरे स्वीकृत उत्तर की जांच करें .. – Nnp

उत्तर

1

मैं did not इस मुद्दे पर ज्यादा मदद मिल जाए, लेकिन मेरी समस्या smtp कॉन्फ़िगर करके हल किया गया सर्वर। मैं के रूप में मैं 3 पार्टी smtp सर्वर का उपयोग कर रहा है और हर सर्वर अपने स्वयं के विन्यास है नहीं कर सकते उन कदमों के बाद। उचित विन्यास के बाद मेरा smtp स्वचालित रूप से डीएम/डीकेआईएम हस्ताक्षर जोड़ता है।

+0

कौन सा एसएमटीपी सर्वर? – WildJoe

+0

इसकी मजबूत मेल से। – Nnp

2

मैं यह भी जानना चाहते मैं सिर्फ एक DKIM लागू लगता है चाहता हूँ, लेकिन मैं sucessful नहीं चला सकते हैं -_- http://tinisles.blogspot.com/2009/09/sending-dkim-email-from-c.html

+0

हे कूल, यह मेरा ब्लॉग है। यदि आपको किसी चीज़ के साथ हाथ की आवश्यकता है तो ब्लॉग आलेख पर एक टिप्पणी छोड़ दें। – russau

5

https://github.com/dmcgiv/DKIM.Net देखें कि यह नेट सी # में लिखा के लिए एक DomainKeys पहचान मेल (DKIM) कार्यान्वयन है - यह आप MailMessage वस्तुओं हस्ताक्षर करने के लिए सक्षम बनाता है।

+0

यह वर्तमान में बॉक्स से बाहर अपवाद फेंकता है - इसे डीबग करने का प्रयास कर रहा है लेकिन औसत समय – Doug

+0

@ डॉग रीडमे में एक और लाइब्रेरी ढूंढने की सोच रहा हूं। यदि आपको अभी भी समस्याएं हैं तो जिथब साइट पर कोई समस्या बनाएं, कृपया अधिक जानकारी के साथ। –

+0

यह संलग्नक के साथ काम नहीं करता है: -/ –

2

यदि आप मेलमेसेज के शरीर को डीकेआईएम-साइन पर देख रहे हैं तो DKIM.NET बहुत अच्छा है। यदि आप अपने संदेश में वैकल्पिक विचार ढूंढ रहे हैं तो मैं समाधान ढूंढने में सक्षम नहीं था और अपना खुद का (सामान्य अस्वीकरण के साथ खुला स्रोत) लिखा था जो https://github.com/yannispsarras/DKIM-AlternativeViews

मुझे समझ में आता है कि यह एक सुंदर पुराना धागा है लेकिन मैंने सोचा कि यह किसी की मदद कर सकता है।

+0

मैं डाउनवोट को समझ नहीं पा रहा हूं। मैंने एक ओपन सोर्स प्रोजेक्ट भी प्रदान किया है जो कि सभी ... – Yannis

+0

कोई चिंता नहीं है। मैंने उसे हटा दिया है। –

9

System.Net.Mail.MailMessage और System.Net.Mail.SmtpClient के साथ डीकेआईएम हस्ताक्षर करने की कोशिश करने में एक मौलिक समस्या है जो संदेश पर हस्ताक्षर करने के लिए है, आपको SmtpClient के आंतरिक को पोक करने की आवश्यकता है संदेश निकाय को डीकेआईएम-हस्ताक्षर शीर्षलेख उत्पन्न करने में चरणों में से एक के रूप में हैश करने का आदेश। समस्या तब होती है जब आपके पास वैकल्पिक विचार या अनुलग्नक होते हैं क्योंकि SmtpClient प्रत्येक मल्टीपार्ट सीमाएं उत्पन्न करेगा जब हर बार यह संदेश लिखता है जो शरीर हैश को तोड़ता है और इस प्रकार डीकेआईएम-हस्ताक्षर वैधता।

इस हल करने के लिए, आप System.Net.Mail का उपयोग के लिए एक विकल्प ढांचे के रूप में नेट के लिए MimeKit और MailKit खुला स्रोत पुस्तकालयों का उपयोग कर सकते हैं।

MimeKit में किसी संदेश में कोई DKIM हस्ताक्षर जोड़ने के लिए, आप कुछ इस तरह करना होगा:

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

:

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 का उपयोग कर भेजने के लिए, आप कुछ इस तरह करना होगा उम्मीद है की वो मदद करदे।

2

उपयोग http://www.mimekit.org

यह न केवल हस्ताक्षर करने के लिए DKIM उपयोग करने के लिए, यह भी आप S/MIME प्रमाण पत्र, प्रमाण पत्र पीजीपी आदि शामिल हो सकते अनुमति मिल जाएगी। इसके अलावा, यह एक बहुत ही परिपक्व मुक्ति है - केवल एक ही मुझे पता चला है कि विदेशी भाषाओं (अंग्रेजी के अलावा) को सही तरीके से संभालता है, क्योंकि यह पूरी तरह से और पूरी तरह से यूनिकोड के साथ कोडित है।

इसका मुफ़्त और ओपनसोर्स।