I'm trying to talk to Fax server software using an email. The fax server will accept formatted SMTP mails and covert them to faxes and send them to the fax number defined in the to address. This has been manually tested by sending an email from Outlook via the same server.
Here's my problem - System.Net.Mail is throwing an
System.FormatException: The specified string is not in the form required for an e-mail address.
exception due to the format of the email address that I am trying to send to
Is there any way I can turn off/change this validation because the email address may not be RFC compliant but it will work if the email gets sent
i.e. I want to send to [RFax:User@/FN=0123456789] including the square brackets
You can send to this as an e-mail address in Outlook
Cheers Chris
EDIT
This is a cut-down version of the class I'm using to bypass the validation. There are two ways of doing it - one by overriding the constructor and setting the internal attribute directly, the other using an internal constructor. They have slightly different effects if there are spaces in the email address
using System;
using System.Reflection;
namespace Mail
{
public class UnverifiedEmailAddress : System.Net.Mail.MailAddress
{
/// <summary>
/// Constructor to bypass the validation of MailAddress
/// </summary>
/// <param name="address">Email address to create</param>
public UnverifiedEmailAddress(string address)
: base("a@a")
{
FieldInfo field = typeof(System.Net.Mail.MailAddress).GetField("address", BindingFlags.Instance | BindingFlags.NonPublic);
field.SetValue(this, address);
}
/// <summary>
/// Static method to create an unverifed email address bypassing the address validation
/// </summary>
/// <param name="address">Email address to create</param>
/// <param name="displayName">Display name for email address</param>
/// <returns></returns>
private static System.Net.Mail.MailAddress GetUnverifiedEmailAddress(string address, string displayName)
{
ConstructorInfo cons = typeof(System.Net.Mail.MailAddress).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic,
null,
new Type[] { typeof(string), typeof(string), typeof(UInt32) },
null);
object obj = cons.Invoke(new object[] { address, displayName, UInt32.MinValue });
System.Net.Mail.MailAddress toAddressObj = (System.Net.Mail.MailAddress)obj;
return toAddressObj;
}
}
}