Hi,
I’m using Aspose.Words 14.5.0.0 to take a word document and covert it to a .mhtml file. I then am using Aspose.Email 4.1.0 to create an email whose body is the mhtml file and and send to a customer. The email send code is below:
// emailBodyFile = .mhtml file created from Aspose.Words
// multiple email addresses may be delimited by EMAIL_DELIMITER = "$$"
private void SendEmail(string emailFrom, string emailTo, string emailCC, string emailBCC, string subject, string body, string emailBodyFile, List<string> attachments, string host)
{
string fromEmail = emailFrom;
string toEmail = emailTo;
using (Aspose.Email.Mail.MailMessage msg = Aspose.Email.Mail.MailMessage.Load(emailBodyFile))
{
msg.From = fromEmail;
string[] toAddresses = toEmail.Split(new string[] { EMAIL_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
foreach (string toAddress in toAddresses)
{
msg.To.Add(new Aspose.Email.Mail.MailAddress(toAddress));
}
if (!String.IsNullOrEmpty(emailCC))
{
string[] ccAddresses = emailCC.Split(new string[] { EMAIL_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
foreach (string ccAddress in ccAddresses)
{
msg.CC.Add(new Aspose.Email.Mail.MailAddress(ccAddress));
}
}
if (!String.IsNullOrEmpty(emailBCC))
{
string[] bccAddresses = emailBCC.Split(new string[] { EMAIL_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
foreach (string bccAddress in bccAddresses)
{
msg.Bcc.Add(new Aspose.Email.Mail.MailAddress(bccAddress));
}
}
msg.Subject = subject;
foreach (string attachment in attachments)
{
msg.AddAttachment(new Aspose.Email.Mail.Attachment(attachment));
}
Aspose.Email.Mail.SmtpClient client = new Aspose.Email.Mail.SmtpClient(host);
client.Send(msg);
}
}
In some cases at the highlighted line above we get an exception:
The specified string is not in the form required for an e-mail address.
System.FormatException: The specified string is not in the form required for an e-mail address.
at ..[1](String data, Int32& offset, String& displayName, Boolean checkAddress)
at Aspose.Email.Mail.MailAddress.[1](String )
at Aspose.Email.Mail.MailAddress.[1](String )
at MIPS.UserControls.ProposalPopupControl.SendEmail(String emailFrom, String emailTo, String emailCC, String emailBCC, String subject, String body, String emailBodyFile, List`1 attachments, String host)
at MIPS.UserControls.ProposalPopupControl.uxDeliverButton_Click(Object sender, EventArgs e)
As best I can tell, the emails used that produce the error in SendEmail() are valid - there is only one from address and one to address (no bcc or cc). I have also validated that the email address strings are not being corrupted somehow, ie, (no spaces, punctuation OK, no missing @, no missing domain, etc).
To test this further, I created another function to validate the email addresses. I got the basic code off your web site (Programming Email Verification|Documentation):
protected void uxValidateEmailAddress_Click(object sender, EventArgs e)
{
List<string> addresses = new List<string>();
addresses.Add("client@druginfo.com");
addresses.Add("hk1234@columbia.edu");
Aspose.Email.Verify.EmailValidator ev = new Aspose.Email.Verify.EmailValidator();
Aspose.Email.Verify.ValidationResult result;
StringBuilder sb = new StringBuilder();
if (addresses.Count > 0)
{
foreach (string address in addresses)
{
ev.Validate(address, out result);
if (result.ReturnCode == Aspose.Email.Verify.ValidationResponseCode.ValidationSuccess)
{
sb.Append(String.Format("[{0}] email address is valid.", address) + "\n");
}
else
{
sb.Append(String.Format("[{0}] email address is invalid: {1} ", address, result.Message) + "\n");
}
ev.Validate(address, Aspose.Email.Verify.ValidationPolicy.SyntaxOnly, out result);
if (result.ReturnCode == Aspose.Email.Verify.ValidationResponseCode.ValidationSuccess)
{
sb.Append(String.Format("SyntaxOnly -> [{0}] email address is valid.", address) + "\n");
}
else
{
sb.Append(String.Format("SyntaxOnly -> [{0}] email address is invalid: {1} ", address, result.Message) + "\n");
}
ev.Validate(address, Aspose.Email.Verify.ValidationPolicy.MailServer, out result);
if (result.ReturnCode == Aspose.Email.Verify.ValidationResponseCode.ValidationSuccess)
{
sb.Append(String.Format("MailServer -> [{0}] email address is valid.", address) + "\n");
}
else
{
sb.Append(String.Format("MailServer -> [{0}] email address is invalid: {1} ", address, result.Message) + "\n");
}
ev.Validate(address, Aspose.Email.Verify.ValidationPolicy.SyntaxAndDomain, out result);
if (result.ReturnCode == Aspose.Email.Verify.ValidationResponseCode.ValidationSuccess)
{
sb.Append(String.Format("SyntaxAndDomain -> [{0}] email address is valid.", address) + "\n");
}
else
{
sb.Append(String.Format("SyntaxAndDomain -> [{0}] email address is invalid: {1} ", address, result.Message) + "\n");
}
}
}
}
Results are below:
[hk1234@columbia.edu] email address is invalid: Domain error found in the email validation Last Exception: Access denied
SyntaxOnly -> [hk1234@columbia.edu] email address is valid.
MailServer -> [hk1234@columbia.edu] email address is invalid: Domain error found in the email validation Last Exception: Access denied
SyntaxAndDomain -> [hk1234@columbia.edu] email address is invalid: Domain error found in the email validation Last Exception: Access denied
[client@druginfo.com] email address is invalid: Domain error found in the email validation Last Exception: Access denied
SyntaxOnly -> [client@druginfo.com] email address is valid.
MailServer -> [client@druginfo.com] email address is invalid: Domain error found in the email validation Last Exception: Access denied
SyntaxAndDomain -> [client@druginfo.com] email address is invalid: Domain error found in the email validation Last Exception: Access denied
Based on the validation tests, the email addresses are valid syntax, but domain/mail server validation fails. I guess my question is, in the first code block where I’m sending .mhtl based emails, why do some email addresses work and others that are apparently valid, do not? Are you guys doing additional domain/mail server checks in client.Send(msg); that would cause an email address exception?
Unfortunately, the failing email addresses always occur with client emails so we really don’t have a test email address that fails.
Thanks,
Scott