2010-03-01 25 views
12

Tôi đã viết một chương trình bằng C# gửi email. Bây giờ tôi có một yêu cầu để ký email gửi đi bằng cách sử dụng Dominkeys/DKIM, nhưng tôi không chắc chắn làm thế nào để làm điều đó.Làm thế nào để đăng ký email Domainkeys/DKIM bằng ứng dụng khách C# SMTP?

Tôi đã thiết lập tất cả các khóa, nhưng tôi không biết cách lấy các khóa đó và hwo để đưa chúng vào tiêu đề email.

+0

Bạn có tìm thấy giải pháp bằng cách sử dụng Windows SMTP Server không? – Josh

+0

kiểm tra câu trả lời được chấp nhận của tôi .. – Nnp

Trả lời

1

i didnt tìm sự giúp đỡ nhiều về vấn đề này, nhưng vấn đề của tôi đã giải quyết bằng cách cấu hình smtp máy chủ. tôi không thể đăng các bước như tôi đang sử dụng máy chủ SMTP bên thứ ba và mỗi máy chủ có cấu hình riêng của họ. sau khi cấu hình đúng, smtp của tôi sẽ tự động thêm chữ ký DM/DKIM.

+0

Máy chủ SMTP nào? – WildJoe

+0

từ strongMail. – Nnp

5

xem https://github.com/dmcgiv/DKIM.Net đó là triển khai Thư được xác định từ khóa miền (DKIM) cho. Net được viết bằng C# - nó cho phép bạn ký các đối tượng MailMessage.

+0

Điều này hiện đang ném ngoại lệ ra khỏi hộp - cố gắng gỡ lỗi nhưng đang nghĩ đến việc tìm một thư viện khác trong thời gian trung bình – Doug

+0

@Doug readme đã được cập nhật. Nếu bạn vẫn gặp sự cố, hãy tạo sự cố trên trang web github, vui lòng cung cấp thêm thông tin chi tiết. –

+0

nó không hoạt động với các tệp đính kèm: -/ –

2

Nếu bạn đang tìm kiếm DKIM-ký phần thân của MailMessage thì DKIM.NET thật tuyệt. Nếu bạn đang tìm cách có các quan điểm thay thế trong thông điệp của bạn thì tôi không thể tìm ra giải pháp và viết (giải mã nguồn mở với các tuyên bố từ chối trách nhiệm thông thường) của mình có thể được tìm thấy tại https://github.com/yannispsarras/DKIM-AlternativeViews

Tôi hiểu đây là một chủ đề khá cũ nhưng tôi nghĩ nó có thể giúp ai đó.

+0

Tôi không hiểu ý kiến. Tôi thậm chí đã cung cấp một dự án mã nguồn mở làm tất cả những điều đó ... – Yannis

+0

Đừng lo lắng. Tôi đã loại bỏ anh ta downvote. –

9

Có một vấn đề cơ bản khi cố gắng thực hiện chữ ký DKIM với System.Net.Mail.MailMessage và System.Net.Mail.SmtpClient đó là để ký thông báo, bạn cần phải ping nội bộ của SmtpClient vào để băm nội dung thư là một trong các bước tạo tiêu đề Chữ ký DKIM. Sự cố xảy ra khi bạn có các chế độ xem hoặc tệp đính kèm thay thế vì SmtpClient sẽ tạo ra các ranh giới đa mới mỗi khi nó viết ra thông điệp phá vỡ giá trị băm cơ thể và do đó giá trị DKIM-Signature.

Để giải quyết vấn đề này, bạn có thể sử dụng các thư viện mã nguồn mở MimeKitMailKit mã nguồn mở .NET làm khung thay thế để sử dụng System.Net.Mail.

Để thêm một chữ ký DKIM vào một tin nhắn trong MimeKit, bạn sẽ làm một cái gì đó như thế này:

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

Để gửi tin nhắn sử dụng MailKit, bạn sẽ làm một cái gì đó như thế này:

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

Hy vọng rằng sẽ giúp.

2

Sử dụng http://www.mimekit.org

Nó không chỉ cho phép sử dụng DKIM cho ký, bạn cũng có thể bao gồm giấy chứng nhận S/MIME, chứng chỉ PGP và nhiều hơn nữa. Ngoài ra, nó là một lib rất trưởng thành - chỉ có một tôi đã tìm thấy rằng xử lý các ngôn ngữ nước ngoài (ngoài tiếng Anh) một cách chính xác, kể từ khi mã hóa hoàn toàn và triệt để với unicode trong tâm trí.

Nguồn mở và miễn phí của nó.

Các vấn đề liên quan