Pro / dkim-exchange

DKIM Signing Agent for Microsoft Exchange Server
Other
409 stars 143 forks source link

Latest Version Issues #27

Closed networkthinking closed 10 years ago

networkthinking commented 10 years ago

Hello, I downloaded the latest version and it was not signing my email. I checked eventlog and found this below. I decided to roll-back to an older version and it worked fine.

Let me know if you need anything. Not sure how to check what version I installed but if you tell me how, I will check. The older version made me choose the version of Exchange.

The description for Event ID 0 from source Exchange DKIM cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event:

Signing a mail item according to DKIM failed with an exception. Check the logged exception for details. System.FormatException: The specified string is not in the form required for an e-mail address. at System.Net.Mail.MailAddress.ParseValue(String address) at System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding) at Exchange.DkimSigner.DefaultDkimSigner.CanSign(Stream inputStream) at Exchange.DkimSigner.DkimSigningRoutingAgent.SignMailItem(MailItem mailItem) at Exchange.DkimSigner.DkimSigningRoutingAgent.WhenMessageCategorized(CategorizedMessageEventSource source, QueuedMessageEventArgs e)

the message resource is present but the message is not found in the string/message table

AlexLaroche commented 10 years ago

The problem is with the MailAddress class. I saw the problem with a non conventionnal email addresss when I implemented DKIM relaxed canonicalization.

MSDN documention : MailAddress Constructor (Exception FormatException) => http://msdn.microsoft.com/en-us/library/591bk9e8%28v=vs.110%29.aspx

By example, this address will generate a exception: check-auth-jsmith=yourdomain.com@verifier.port25.com.

I was thinking that the email address don't respect the rfc.

networkthinking commented 10 years ago

That is interesting. I was sending from joe_smith@xxmanagement.com. Is the underscore the problem?

AlexLaroche commented 10 years ago

You should use the version 1.5.2 for the moment, the problem have been added with RecipientRule and SenderRule support.

I need to make the test to check if the problem is the underscore in the email address... but it's a interesting case to try.

networkthinking commented 10 years ago

I will try to reload the new version tonight and test again with a non underscore email address.

AlexLaroche commented 10 years ago

Sorry, I didn't receive any error with the email address test_test@rhezo.com. With version of the Dkim Signer, are you using? With version of Exchange server?

But if a try to send to auth-jsmith=yourdomain.com@rhezo.com...

Signing a mail item according to DKIM failed with an exception. Check the logged exception for details. System.FormatException: La chaîne spécifiée n'est pas de la forme requise pour une adresse de messagerie. à System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset, String& displayName) à System.Net.Mail.MailAddress.ParseValue(String address) à System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding) à Exchange.DkimSigner.DefaultDkimSigner.CanSign(Stream inputStream) à Exchange.DkimSigner.DkimSigningRoutingAgent.SignMailItem(MailItem mailItem) à Exchange.DkimSigner.DkimSigningRoutingAgent.WhenMessageCategorized(CategorizedMessageEventSource source, QueuedMessageEventArgs e)

AlexLaroche commented 10 years ago

@Pro Why the .pdb file are no more locate in the release folder of each DKIM Signer version (Exchange 2007, 2010, 2013)?

AlexLaroche commented 10 years ago

@networkthinking Can you said me what is the email address of your recipient? The problem isn't with the sending email address.

networkthinking commented 10 years ago

wally.hass@gmail.com

Pro commented 10 years ago

@AlexLaroche I just added the .pdb files (they were never there :) ) @networkthinking I uploaded a new version which has a fallback and doesn't throw an exception, if the email address is invalid. Can you please try the new version and post the error message. To install it copy the .dll AND .pdb to your server (the .pdb gives more debug infos).

Pro commented 10 years ago

@networkthinking Btw: you can check the version by Right click on the .dll -> Properties -> Details -> File Version

networkthinking commented 10 years ago

1.5.2.0 from 1/18 is working fine

Should I just download from the home page or someplace special?

AlexLaroche commented 10 years ago

Work for me... The exception is catch a new entry is created in the eventlog.

`Couldn't parse to address: ' "auth-jsmith=yourdomain.com@test.local"

Ignoring recipient rule ` But the email no more signed... By default, the email was signed before the rules was implemented. Is this is the desired behavior?
Pro commented 10 years ago

@AlexLaroche indeed, that's not correct. It should sign. Just fixed the signing. Is this exactly the error message which you got? Because it seems there's the closing ' missing? The E-Mail adress is then `"auth-jsmith=yourdomain.com@test.local"

` including the newline? Can you debug into the code and check if there's a newline. @networkthinking You can take the current master branch: https://github.com/Pro/dkim-exchange/archive/master.zip
Pro commented 10 years ago

@AlexLaroche I just wrote a short app to validate the function of MailAddress. It parses the mail address above just fine... Can you tell me the exact charaters which cause MailAddress to fail?

AlexLaroche commented 10 years ago

May be, I remove some characters bu error when I pass the error message from eventlog. I remove some text before "Ignoring recipient rule" because it wasn't in English for sure.

The bad char is "=". The recipient email address is "auth-jsmith=yourdomain.com@test.local". I didn't not have time now to test your modification. I will try to get some time tonight...

Pro commented 10 years ago

@AlexLaroche Please post error messages by using backticks: http://superuser.com/questions/254076/how-do-i-type-the-tick-and-backtick-characters-on-windows and https://help.github.com/articles/github-flavored-markdown#syntax-highlighting This makes sure the message is posted without missing chars

Also this email address works fine, I used the following console app to validate it:

string addr = "auth-jsmith=yourdomain.com@test.local";
MailAddress a = null;
try
{
    a = new MailAddress(addr);
}
catch (System.FormatException ex)
{
    Console.WriteLine(ex.Message);
}
if (a != null)
{
    Console.WriteLine("OK: " + a.User + "@" + a.Host);
}
Console.ReadKey();
AlexLaroche commented 10 years ago

screenshot screenshot2 screenshot3

AlexLaroche commented 10 years ago

exchange_eventlog

AlexLaroche commented 10 years ago

I am oblige to confirm that your code work in .net 4.5.1. I will try with .net 3.5...

Pro commented 10 years ago

I just tested \"auth-jsmith=yourdomain.com@test.local\"\r\n\t<auth-jsmith=yourdomain.com@test.local>\r\n Result: in .NET 4.5 it works, but 3.5 there's the exact same exception. So this is related to 3.5 (Exchange 2007 & 2010)

AlexLaroche commented 10 years ago

Same result! This is a very interesting problem... :)

Pro commented 10 years ago

The problem for .NET 3.5 is the newline between the first (name) part and the second (address). If I replace it with space, also .NET 3.5 recognizes it correctly.

AlexLaroche commented 10 years ago

We should look the two MailAddress class difference between .net 3.5 and .net 4.5 to be sure to avoid any others problems...

Here the source code for 4.5.1 : http://referencesource.microsoft.com/#System/net/System/Net/mail/MailAddress.cs#b23cf10c5d2b82f1

Pro commented 10 years ago

QuickFix (for now): https://github.com/Pro/dkim-exchange/commit/a1a145b50aff6c17b492355bcde8d6322cbfee6e

Pro commented 10 years ago

@networkthinking You can use version 1.8.3 now: https://github.com/Pro/dkim-exchange/releases/tag/v1.8.3

@AlexLaroche if you find the source code for 3.5 we can look for differences, but please create a new Issue for that. Thanks for your help!!