현재 보내는 메일에 IIS SMTP를 사용하고 있는 기존 Windows 서버에 DKIM을 추가하려고 합니다.
이것을 사용하면이 작업을 수행 할 수있을 것 같습니다.이메일릴레이. 불행히도 E-Mailrelay에서 DKIM을 정확하게 구성하는 방법에 대한 참조를 찾을 수 없습니다.
문서나 이 작업을 수행하는 방법을 설명하는 타사 튜토리얼에서 제가 놓친 내용이 있습니까?
답변1
여기: https://sourceforge.net/projects/dkimsigningfilter/files/latest/download 위의 수정된 코드를 기반으로 컴파일된 앱입니다. 설치 프로그램은 도메인, 선택기 및 키 경로를 ./config 위치에 있는 config.txt 파일에 저장합니다. 이 프로그램은 E-Mailrelay에 대한 필터 역할을 합니다.
답변2
E-MailRelay에서 필터 역할을 하기 위해 C#/NET 6을 사용하여 간단한 명령줄 앱을 구현했습니다.
using System.IO;
using System.Text;
using MimeKit;
using MimeKit.Cryptography;
namespace E_MailRelay.DKIM.Filter;
/// <summary>
/// Reads an e-mail message, adds a Hardcoded DKIM signature and and writes
the updated message back to disk
/// Note that this requires the installation MailKit to work.
/// </summary>
internal class Program
{
private const string DKIMSelector = "ENTER_YOUR_DKIM_SELECTOR_HERE";
private const string _DKIMDomain = "ENTER_YOUR_DOMAIN_NAME_HERE";
private const string DKIMPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n"
+ @"ENTER_YOUR_PRIVATE_KEY_HERE"
+ "\r\n-----END RSA PRIVATE KEY-----";
private static int Main(string[] args)
{
LoadSignAndRewriteMail(args);
return 102;
}
private static void LoadSignAndRewriteMail(string[] args)
{
var emailMessage = MimeMessage.Load(args[0]);
if (!emailMessage.Headers.Contains(HeaderId.DkimSignature)
&& !emailMessage.Headers.Contains(HeaderId.DomainKeySignature))
{
SignMail(emailMessage);
}
emailMessage.WriteTo(args[0]);
}
private static void SignMail(MimeMessage emailMessage)
{
var pk = DKIMPrivateKey;
MemoryStream stream = new(Encoding.UTF8.GetBytes(pk));
{
stream.Position = 0;
}
var dkimSigner = new DkimSigner(stream, _DKIMDomain, DKIMSelector);
HeaderId[] dkimSignHeaders =
{
HeaderId.To, HeaderId.Cc, HeaderId.Subject, HeaderId.From, HeaderId.Date, HeaderId.MessageId, HeaderId.Body,
HeaderId.Date, HeaderId.MimeVersion, HeaderId.Sender, HeaderId.ReplyTo, HeaderId.ContentTransferEncoding,
HeaderId.ContentId, HeaderId.ContentDescription, HeaderId.ResentDate, HeaderId.ResentFrom,
HeaderId.ResentSender, HeaderId.ResentTo, HeaderId.ResentCc, HeaderId.ResentMessageId, HeaderId.InReplyTo,
HeaderId.References
};
dkimSigner.Sign(FormatOptions.Default, emailMessage, dkimSignHeaders);
}
}