Я пытаюсь поговорить с программным обеспечением факс-сервера по электронной почте. Факс-сервер будет принимать форматированные сообщения 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;
}
}
}