Могу ли я отключить проверку адреса электронной почты в System.Net.Mail?

Я пытаюсь поговорить с программным обеспечением факс-сервера по электронной почте. Факс-сервер будет принимать форматированные сообщения SMTP, преобразовывать их в факсы и отправлять их на номер факса, указанный в адресе «Кому». Это было проверено вручную путем отправки электронного письма из Outlook через тот же сервер.

Вот моя проблема - System.Net.Mail бросает System.FormatException: указанная строка не в форме, необходимой для адреса электронной почты. исключение из-за формата адреса электронной почты, который я пытаюсь отправить на

. Есть ли способ отключить / изменить эту проверку, потому что адрес электронной почты может не соответствовать RFC, но он будет работать, если письмо будет отправлено

т.е. Я хочу отправить на [RFax: User @ / FN = 0123456789], включая квадратные скобки

. Вы можете отправить это как адрес электронной почты в Outlook.

Ура Крис

ИЗМЕНИТЬ

Это урезанная версия класса, который я использую для обхода проверки. Это можно сделать двумя способами: один путем переопределения конструктора и непосредственной установки внутреннего атрибута, другой - с помощью внутреннего конструктора. Они имеют несколько иной эффект, если в адресе электронной почты есть пробелы

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;
        }
    }
}
8
задан Chris Gill 3 June 2011 в 07:13
поделиться