Я пытаюсь связаться с программным обеспечением факс-сервера по электронной почте. Факс-сервер будет принимать форматированные сообщения SMTP, преобразовывать их в факсы и отправлять их на номер факса, указанный в адресе «Кому». Это было проверено вручную путем отправки электронного письма из Outlook через тот же сервер.
Вот моя проблема - System.Net.Mail выдает исключение System.FormatException: The specified string is not in the form required for an e-mail address.
из-за формата адреса электронной почты, который я пытаюсь отправить
Есть ли способ отключить / изменить эту проверку, потому что адрес электронной почты может не соответствовать 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;
}
}
}