这是我的问题-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;
}
}
}