Почта SMTP: как привязать значения таблицы данных к HTML-шаблону C # - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в c # и WEB Api, я хочу отправлять почту после каждой покупки продукта.Почта будет содержать все детали, связанные с приобретенным продуктом.

Здесь у меня есть код, который работает нормально при отправке строковых данных в виде почты.

Я не знаю, как добавить данныезначения таблицы в шаблон HTML и отправить его по почте.

HTML

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <h4 style="color:   #00CED1">Purchase Details<hr></h4>

    <table style="width:100%;border: 1px solid black;">
        <tr>
            <th>Item(s)<hr></th>
            <th>Details<hr></th>
            <th>Amount(Tax.Inc)<hr></th>
        </tr>

        <tr>
            <td align="center"><img src="https://dummyimage.com/80x80/000/fff" /></td>
            <td>
                <table style="width:100%;margin-left:15px">
                    <tr>
                        <td align="left">Product Name :</td>
                        <td align="left" style="color:#32CD32;font-weight:bold;">Red chilly powder</td>
                    </tr>
                    <tr>
                        <td align="left">Product UOM :</td>
                        <td align="left" style="color:#696969;font-weight:bold;">PKT 500</td>
                    </tr>
                    <tr>
                        <td align="left">Quantity :</td>
                        <td align="left" style="color:#778899;font-weight:bold;">5</td>
                    </tr>
                    <tr>
                        <td align="left">Unit Price :</td>
                        <td align="left" style="color:#483D8B;font-weight:bold;">30 $
                        <td>
                    </tr>
                </table>
            </td>
            <td align="center" style="font-size:20px;font-weight:bold;color:#1E90FF">150 $</td>
        </tr>

    </table>
    <hr>
    <table style="width:100%;">
        <tr>
            <td align="right" style="font-size:22px;font-weight:bold;">Total Amount :
            <td align="right" style="color:#0000CD;font-size:22px;font-weight:bold;">150 $</td></td>
        </tr>
    </table>
    <hr>

</body>
</html>

API

 foreach (DataRow Row in Tables[0].Rows)
    {
     //Here I want to iterate the table rows.
    }
sendMail(string mMailBody);

Я искал в SO, но могу найти только отправкустрока как SMTP mail.can кто-нибудь помочь мне решить эту проблему.

1 Ответ

0 голосов
/ 19 декабря 2018

Если у вас есть куча разных шаблонов, я бы предложил выбрать продвинутое решение, такое как StringTemplate или RazorEngine , но если это единственный случай, который вам нужно охватить, вы можете сделать что-нибудьпросто разделите ваш HTML-шаблон на две части - почтовое тело и строку таблицы, создайте коллекцию строк таблицы и вставьте ее в почтовое тело.

Почтовое тело

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <h4 style="color:   #00CED1">Purchase Details<hr></h4>

    <table style="width:100%;border: 1px solid black;">
        <tr>
            <th>Item(s)<hr></th>
            <th>Details<hr></th>
            <th>Amount(Tax.Inc)<hr></th>
        </tr>

        {0}

    </table>
    <hr>
    <table style="width:100%;">
        <tr>
            <td align="right" style="font-size:22px;font-weight:bold;">Total Amount :
            <td align="right" style="color:#0000CD;font-size:22px;font-weight:bold;">{1}</td></td>
        </tr>
    </table>
    <hr>

</body>
</html>

Строка таблицы

<tr>
    <td align="center"><img src="https://dummyimage.com/80x80/000/fff" /></td>
    <td>
        <table style="width:100%;margin-left:15px">
            <tr>
                <td align="left">Product Name :</td>
                <td align="left" style="color:#32CD32;font-weight:bold;">{0}</td>
            </tr>
            <tr>
                <td align="left">Product UOM :</td>
                <td align="left" style="color:#696969;font-weight:bold;">{1}</td>
            </tr>
            <tr>
                <td align="left">Quantity :</td>
                <td align="left" style="color:#778899;font-weight:bold;">{2}</td>
            </tr>
            <tr>
                <td align="left">Unit Price :</td>
                <td align="left" style="color:#483D8B;font-weight:bold;">{3}<td>
            </tr>
        </table>
    </td>
    <td align="center" style="font-size:20px;font-weight:bold;color:#1E90FF">{4}</td>
</tr>

Тогда код

// Retrieve the templates and store them into mailBodyTemplate and tableRowTemplate
// For example,
var mailBodyTemplate = File.ReadAllText("mailBody.html");
var tableRowTemplate = File.ReadAllText("tableRow.html");

var tableRows = new StringBuilder();
var totalPrice = 0;
foreach (DataRow Row in Tables[0].Rows)
{
    totalPrice += Convert.ToInt32(Row["Price"]);
    tableRows.AppendFormat(tableRowTemplate, Row["Name"], Row["UOM"], Row["Quantity"], Row["UnitPrice"], Row["Price"]);
}
var mailBody = string.Format(mailBodyTemplate, tableRows.ToString(), totalPrice);
// Send your mail body
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...