我正在尝试使用电子邮件与传真服务器软件交谈。传真服务器将接受格式化的 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;
}
}
}