Convert to MHTML and Send Email

Hi
I am using ASPOSE.Words to convert word document to mhtml stream as in your given example
‘Convert a Word Document to MHTML and Email’
in Documentation.
Now there I want to use MailMessage object of System.Net to send mail. So for that I have done following coding

Aspose.Words.Document doc = new Aspose.Words.Document(Server.MapPath("~/Sample.doc"));
doc.MailMerge.Execute(new string[] { "Name" }, new object[] { "Hardik" }); 
System.IO.Stream stream = new System.IO.MemoryStream();
doc.Save(stream, Aspose.Words.SaveFormat.Mhtml);

Now for sending mail using System.Net.MailMessage Object done following coding

stream.Position = 0;
System.IO.StreamReader readStream = new System.IO.StreamReader(stream);
readStream.BaseStream.Position = 0;
string strMailContent = readStream.ReadToEnd();
MailMessage message = new MailMessage();
message.To.Add(new MailAddress(strToEmailId, strToEmailName));
message.Subject = strSubject;
message.IsBodyHtml = true;
message.Body = strMailContent;
smtpClient.Send(message);

Now the mail which I got doesn’t contain Html Format instead its some content as below
MIME-Version: 1.0 Content-Type: text/html; charset=“utf-8” Content-Transfer-Encoding: quoted-printable Content-Location: document.html =EF=BB=BF
Dear Hardik,
instead of
Dear Hardik,
Pleae help me What should I do to get correct mhtml format content

Hello!
Thank you for your interest in Aspose.Words.
What you are getting is MHTML format. You can compare it with output from web browser when you save any page in MHTML format.
Would you like to send plain HTML? Okay, you should specify SaveFormat.Html. Let me know if your message should also contain images or other supplementary data and you are experiencing difficulties with them. There are some tricks.
Regards,

Hi,
Thank you for quick reply,
Yes my message also contain images and thats why I was converting it into mhtml
Please help me if you have any solution

Hi
Thanks for your inquiry. Using standard MailMessage you can’t specify MHTML content of message. That’s why in the sample code we use Aspose.Network. This tool allow you to use MHTML content.
As a workaround you can use HTML content, but in this case you also need to embed images into the mail message. You can achieve this using “cid”. Please see the following code example.

public void Example001()
{
    // Create temporary folder.
    string tempDir = Path.Combine(Path.GetTempPath(), "AsposeMail");
    if (!Directory.Exists(tempDir))
        Directory.CreateDirectory(tempDir);
    // Open word document.
    Document doc = new Document(@"C:\Temp\in.doc");
    // Specify folder where images will be saved.
    doc.SaveOptions.ExportImagesFolder = tempDir;
    // Save html to stream.
    MemoryStream htmlStream = new MemoryStream();
    doc.Save(htmlStream, SaveFormat.Html);
    // Read all text from stream.
    string htmlText = Encoding.UTF8.GetString(htmlStream.GetBuffer());
    htmlStream.Close();
    // Get array of image names
    string[] fileNames = Directory.GetFiles(tempDir);
    // Rempace all image names like "myImage.jpg" with "cid:myImage".
    // This is needed because images will be storead in the mail message as embedded objects.
    for (int imgIndex = 0; imgIndex < fileNames.Length; imgIndex++)
    {
        string imgName = fileNames[imgIndex];
        string replacement = string.Format("cid:{0}", Path.GetFileNameWithoutExtension(fileNames[imgIndex]));
        htmlText = htmlText.Replace(imgName, replacement);
    }
    // Save proccessed html into the temporary folder.
    Stream htmlFile = new FileStream(Path.Combine(tempDir, "Message.html"), FileMode.Create);
    StreamWriter htmlWriter = new StreamWriter(htmlFile);
    htmlWriter.Write(htmlText);
    htmlWriter.Close();
    htmlFile.Close();
    // Information that is needed to send email message
    string smtp = "smtp.mail.ru"; //Your smtp server
    string emailFrom = "youremail@mail.ru"; //Your email 
    string password = "yourpassword"; //Your password
    string emailTo = "recipientemail@gmail.com"; //Recipient email
    string subject = "Aspose.Words email message test."; //Subject
                                                            // Create maildefination
    System.Web.UI.WebControls.MailDefinition mail = new System.Web.UI.WebControls.MailDefinition();
    mail.IsBodyHtml = true;
    mail.BodyFileName = Path.Combine(tempDir, "Message.html");
    mail.From = emailFrom;
    mail.Subject = subject;
    // Add images as embedded objects to email message
    for (int imgIndex = 0; imgIndex < fileNames.Length; imgIndex++)
    {
        string imgFullName = fileNames[imgIndex];
        string imgName = Path.GetFileNameWithoutExtension(fileNames[imgIndex]);
        mail.EmbeddedObjects.Add(new System.Web.UI.WebControls.EmbeddedMailObject(imgName, imgFullName));
    }
    // Create email message
    MailMessage mess = mail.CreateMailMessage(emailTo, new ListDictionary(), new System.Web.UI.Control());
    // Create smtp client
    SmtpClient sender = new SmtpClient(smtp);
    // Set credentials
    sender.Credentials = new NetworkCredential(emailFrom, password);
    // Send email message
    sender.Send(mess);
    mess.Dispose();
    // Delete the temporary folder
    Directory.Delete(tempDir, true);
}

I hope this could help you.
Best regards.

Hi,
Thanks for reply and this code.
This would help me a lot.
Now I have one more query.
Take case in which I want to take Html Document as input template for mail merge instead of word document.
Now for word document fields we are using '<> ’
what should I use for Html Docuement?
Could you please help me out?
Thanks

Hi
Thanks for your inquiry. This is impossible to use HTML document as input template for mail merge. So you should use Word document as a template and convert output document to HTML.
Best regards,