2017-06-03 28 views
10

Bu question adresinden yola çıkarak, e-postaları ASP.NET.MVC adresinden e-postaların SPAM puanını azaltmak için göndermeye karar verdim, ancak bir yerde hatam var.C# içinde imzalama e-posta adresi #

Kodu: Ben http://www.isnotspam.com üzerine sonucunu kontrol

public void SendEmail(MailMessage mailMessage) 
    { 
     string domain = "kup-nemovitost.cz"; 

     var message = MimeMessage.CreateFromMailMessage(mailMessage); 

     HeaderId[] headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date }; 
     DkimCanonicalizationAlgorithm headerAlgorithm = DkimCanonicalizationAlgorithm.Relaxed; 
     DkimCanonicalizationAlgorithm bodyAlgorithm = DkimCanonicalizationAlgorithm.Relaxed; 

     string dkimPath = Path.Combine(ConfigHelper.GetDataPath(), "DKIM"); 
     string privateKey = Path.Combine(dkimPath, "kup-nemovitost.cz.private.rsa"); 

     DkimSigner signer = new DkimSigner(privateKey, domain, "mail") 
     { 
      SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1, 
      AgentOrUserIdentifier = "@" + domain, 
      QueryMethod = "dns/txt", 
     };   

     message.Prepare(EncodingConstraint.SevenBit); 
     message.Sign(signer, headers, headerAlgorithm, bodyAlgorithm); 

     using (var client = new MailKit.Net.Smtp.SmtpClient()) 
     { 
      client.Connect("localhost", 25, false); 
      client.Send(message); 
      client.Disconnect(true); 
     }   
    } 

, çıktı takip ediyor:

DKIM check details: 
---------------------------------------------------------- 

Result: invalid 
ID(s) verified: [email protected] 
Selector=mail 
domain=kup-nemovitost.cz 
DomainKeys DNS Record=mail._domainkey.kup-nemovitost.cz 

Benim DNS kaydıdır:

@ IN TXT "v=dkim1; s=mail; p=migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdnov2pxnjmghdpxw5wpypk1rf7 kxs+5ouvh6f0hraryncku6wbvq+xovbgxz1kuddcb/s9o8wquftxrlffniik3wbm qc+upm+ndloxcxwy0bb2iktbgnmndjiexm/z0npaviwzebr2k6vqdzbp+lmcuece bwasqgw2fki5ospb4qidaqab" 

GÜNCELLEME:

Ben DNS kayıtlarında bazı sorunları gidermek ve ben hala benim ortak anahtar doğrulama sorununu yüz dkimcore.org

daha iyi çevrimiçi denetleyicisi bulduk. PuttyGen (ppk) kullanarak 1024 RSA oluşturdum ve RSA formatına dönüştürdüm. PuTTYgen orijinal dosyasıdır:

---- BEGIN SSH2 PUBLIC KEY ---- 
Comment: "rsa-key-20170606" 
AAAAB3NzaC1yc2EAAAABJQAAAIEAiyEwx+Idlf/Qp2fTYrQMwV3MuF9W7yaKDMHk 
hzoH+MqWKtNDngQoJcmbyrkMeF0VLYo246ma3gPZh9cDL7i8ygOYKagbyUjgtZFz 
y+et0tY/+G/IZNaHiQp0QuG/J71uZrl4Jlgkq+0s5bZxpRR45aRpcG1HQMIm6Ku7 
lgmOt88= 
---- END SSH2 PUBLIC KEY ---- 

Yani sadece DNS kaydına (yorumladı hatlar hariç) içerik kopyalamak ve denetleyicisi çıktı şu var: yorumlar kısmında anladım gibi

p= AAAAB3NzaC1yc2EAAAABJQAAAIEAiyEwx+Idlf/Qp2fTYrQMwV3MuF9W7yaKDMHkhzoH+MqWKtNDngQoJcmbyrkMeF0VLYo246ma3gPZh9cDL7i8ygOYKagbyUjgtZFzy+et0tY/+G/IZNaHiQp0QuG/J71uZrl4Jlgkq+0s5bZxpRR45aRpcG1HQMIm6Ku7lgmOt88= 
This doesn't seem to be a valid RSA public key: RSA.xs:178: OpenSSL error: wrong tag at blib/lib/Crypt/OpenSSL/RSA.pm (autosplit into blib/lib/auto/Crypt/OpenSSL/RSA/new_public_key.al) line 91. 
+1

Tamam, bir yerde bir hata var. Gerçekte olana göre istenen davranış nedir? – Nkosi

+0

İstenilen davranış, http://www.isnotspam.com'un e-postanın DKIM ile sonuç geçişi ile imzalandığını doğrulamasıdır. – qub1n

+1

SendGrid gibi hizmetler, e-posta alanınızın spam kutularında olmaması nedeniyle yükün çoğunu üstlenecek oldukça cömert bir serbest kademeye sahiptir. –

cevap

3

- Kodun iyi, ama ortak anahtarla ilgili problemlerin var. İlk olarak, sahip olamayacağı dns txt kaydında boşlukları vardır. Ardından, bir ortak anahtar için yanlış biçiminiz var (SSH2). Özel anahtar olarak

--- BEGIN RSA PUBLIC KEY --- 
MII .... 
--- END RSA PUBLIC KEY --- 

Yani, aynı: imzayı doğrulamak Araçları gibi görünmelidir farklı bir biçim (düzenli PEM RSA), bekliyoruz. Sen output.pub SSH2 formatında kamu anahtarıdır

ssh-keygen -f output.pub -m 'PEM' -e > public.pem 

ile PEM SSH2 anahtarını dönüştürebilirsiniz. Böyle bir anahtarla (ve DNS kaydında boşluk olmadan), doğru dns kaydına koyduğunuzu varsayarak iyi çalışmalısınız - key_selector._domainkey.your.domain.