Ruben
Ruben

Reputation: 155

Adding table using mailto and windows forms

I want to open mail to and inside the body of my email I want to create a table and insert values inside my model. So I execute outlook like this:

 var mail = $"mailto:[email protected]?subject=ProjectListTest&body={finalString}";

My question is, how can I create a table and add to body of mailto?

Table headers: Name, Customer

so inside each row I want to use something like:

var finalString = string.Empty;
foreach(var customer in CustomerList)
 {
      finalString = finalString + customer.Name + customer.CustomerKey
 }

Is it possible to achieve this? what is the correct format to create a table in Outlook. Regards

Upvotes: 0

Views: 2567

Answers (2)

Iliass Akkara
Iliass Akkara

Reputation: 671

pIf the table would be created using the html mail body format, then you can use the following method to generate it:

public string GenerateMailBodyWithTable(List<Customer> customers)
{
    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.Append($"<html>{ Environment.NewLine }<body>{ Environment.NewLine }");

    if (customers.Count > 0)
    {
        stringBuilder.Append($"<table><tr><th>Name</th><th>Key</th></tr>{ Environment.NewLine }");

        foreach (Customer customer in customers)
        {
            stringBuilder.Append($"<tr><th>{ customer._name }</th><th>{ customer._key }</th></tr>{ Environment.NewLine }");
        }

        stringBuilder.Append($"<table>{ Environment.NewLine }");
    }
    else
    {
        stringBuilder.Append($"<p>No customers<p>{ Environment.NewLine }");
    }

    stringBuilder.Append($"</html>{ Environment.NewLine }</body>");

    return stringBuilder.ToString();
}

After generating the html body you can perform the following action to fill the mailbody:

Outlook.Application outlookApp = new Outlook.Application();
        Outlook.MailItem mailMessage = (Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);

        mailMessage.HTMLBody = GenerateMailBodyWithTable(customers);
        mailMessage.Display(true);

Don't forget to place this using statement:

using Outlook = Microsoft.Office.Interop.Outlook;

Upvotes: 1

Gonzalo Bustamante
Gonzalo Bustamante

Reputation: 401

First at all, you have to create your custom HTML:

string finalString = "<table><tr><td><b>Name</b></td><td><b>Customer</b></td></tr>";
foreach(var customer in CustomerList)
{
    finalString += "<tr><td>" + customer.Name + "</td><td>" + customer.CustomerKey + "</td></tr>";
}
finalString += "</table>";

If you are using WinForms and you want to send an email with this body, you can use MailMessage Class from System.Net.Mail and sending it with SmtpClient. This way:

MailMessage mail = new MailMessage("from", "mailto", "Subject", finalString);
mail.IsBodyHtml = true; //Important
SmtpClient smtp = new SmtpClient("serverSMTP");
smtp.EnableSsl = USE_SSL;
smtp.Port = YOUR_PORT;
smtp.Credentials = new System.Net.NetworkCredential("email", "password");
smtp.Send(correo);

If you want to simulate a "mailto" action, you can use:

string command = $"mailto:[email protected]?subject=ProjectListTest&body={finalString}";  
Process.Start(command); 

Regards

Upvotes: 0

Related Questions