Я пытаюсь поговорить с программным обеспечением факс-сервера по электронной почте.Факс-сервер будет принимать отформатированные SMTP-письма, преобразовывать их в факсы и отправлять на номер факса, указанный в адресе.Это было вручную проверено путем отправки электронного письма из Outlook через тот же сервер.
Вот моя проблема - System.Net.Mail выдает исключение System.FormatException: The specified string is not in the form required for an e-mail address.
из-за формата адреса электронной почты, который я пытаюсьотправить на
Можно ли как-нибудь отключить / изменить эту проверку, потому что адрес электронной почты может не соответствовать RFC, но он будет работать, если письмо будет отправлено
, т.е. я хочу отправитьto [RFax: Пользователь @ / FN = 0123456789], включая квадратные скобки
Вы можете отправить на него в качестве адреса электронной почты в Outlook
Cheers Chris
EDIT
Это урезанная версия класса, который я использую для обхода проверки.Есть два способа сделать это - один переопределив конструктор и непосредственно установив внутренний атрибут, другой используя внутренний конструктор.Они имеют несколько иной эффект, если в адресе электронной почты есть пробелы
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;
}
}
}