【问题标题】:Send email with gridview using Microsoft.Office.Interop.Outlook in c#.net在 c#.net 中使用 Microsoft.Office.Interop.Outlook 使用 gridview 发送电子邮件
【发布时间】:2016-05-22 03:56:34
【问题描述】:

我想使用asp:button从我的 Exchange (outlook) 帐户通过电子邮件发送GridView

我的代码运行良好,但电子邮件中的 GridView 松散了格式(颜色、列粗细等)。

这是代码:

using System.Net;
using Outlook = Microsoft.Office.Interop.Outlook;

protected void Send_Click(object sender, EventArgs e)
        {
            try
            {
                // Create a Outlook Application and connect to outlook 
                Outlook.Application OutlookApplication = new Outlook.Application();

                // create the MailItem which we want to send 
                Outlook.MailItem message = (Outlook.MailItem)OutlookApplication.CreateItem(Outlook.OlItemType.olMailItem);

                MailAddress toAddress = new MailAddress("myemail@gmail.com");
                MailAddress ccAddress = new MailAddress("myemail@mycompany.com");

                message.To = toAddress.ToString();
                message.CC = ccAddress.ToString();
                message.Subject = "Mail Subject";
                message.HTMLBody = GridViewToHtml(HourlyReportGV1);
                message.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;

                //Send email
                message.Send();
            }
            catch (System.Exception ex)
            {
                Aviso.Text = ex.ToString();
            }
        }

        private string GridViewToHtml(GridView gv)
        {
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            gv.RenderControl(hw);
            return sb.ToString();
        }

        public override void VerifyRenderingInServerForm(Control control)
        {
            /* Verifies that the control is rendered */
        }

看起来是这样的:

你知道如何让“Email View”和“Web View”一模一样吗?

<asp:GridView style="margin:0 auto; margin-bottom:50px;" HeaderStyle-CssClass="tituloshandoff" RowStyle-CssClass="contenidohandoffbatch" ID="HourlyReportGV1" runat="server" AutoGenerateColumns="False" DataSourceID="Vacio">
            <Columns>
                <asp:BoundField DataField="IDBatch" HeaderText="ID" SortExpression="IDBatch" HeaderStyle-CssClass="TituloInvisible" ItemStyle-CssClass="TituloInvisible"/>
                <asp:BoundField DataField="DealerCodigo" HeaderText="CODE" SortExpression="DealerCodigo"/>
                <asp:BoundField DataField="DealerDescripcion" HeaderText="NAME" SortExpression="DealerDescripcion"/>
                <asp:TemplateField HeaderText="00:00"><ItemTemplate><asp:TextBox runat="server" ID="Cero" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="01:00"><ItemTemplate><asp:TextBox runat="server" ID="Una" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="02:00"><ItemTemplate><asp:TextBox runat="server" ID="Dos" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="03:00"><ItemTemplate><asp:TextBox runat="server" ID="Tres" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="04:00"><ItemTemplate><asp:TextBox runat="server" ID="Cuatro" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="05:00"><ItemTemplate><asp:TextBox runat="server" ID="Cinco" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="06:00"><ItemTemplate><asp:TextBox runat="server" ID="Seis" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="07:00"><ItemTemplate><asp:TextBox runat="server" ID="Siete" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="08:00"><ItemTemplate><asp:TextBox runat="server" ID="Ocho" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="09:00"><ItemTemplate><asp:TextBox runat="server" ID="Nueve" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="10:00"><ItemTemplate><asp:TextBox runat="server" ID="Diez" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="11:00"><ItemTemplate><asp:TextBox runat="server" ID="Once" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
            </Columns>
        </asp:GridView>

【问题讨论】:

  • 你能给我们看看GridView的标记吗?
  • 你的意思是代码吗?对不起,我来自阿根廷,我不知道你在说什么“标记”。编辑:我现在正在阅读“GridView Skins”。我不知道。
  • 您的更新就是我所说的(ASPX 文件中的 HTML 或伪 HTML 代码)。至于您的问题,CSS 样式(tituloshandoffcontenidohandoffbatch)未在电子邮件中发送,因此无法在邮件中应用它们的格式选项。您可以尝试在标记中设置单个属性,以查看消息是否可以使用它们(例如HeaderStyle-BackColor="Orange" RowStyle-Height="24")。
  • 明白。让我试试,我会告诉你的。谢谢!
  • 我尝试了你的推荐,它工作正常。我在这里只需要一个帮助: - gridview 正在显示来自数据库的信息。要使用它,我需要为 GridView 中的每个项目提取“ID”。这就是我使用“ID”列的原因。但我需要它在网络表单和电子邮件中是不可见的。我可以在网络表单中不可见,但使用 css。电子邮件不包含 css 信息,然后显示此列。我该如何解决?

标签: c# asp.net email gridview outlook


【解决方案1】:

GridView 使用的 CSS 样式类(HeaderStyle-CssClass="tituloshandoff"RowStyle-CssClass="contenidohandoffbatch")不包含在gv.RenderControl(hw) 生成的 HTML 代码中。因此,它们的样式属性不能应用于电子邮件中的 GridView 表。

您可以在 GridView 标记中设置单独的样式属性(例如HeaderStyle-BackColor="Silver"RowStyle-Height="24")。然后这些样式属性将嵌入到 GridView HTML 输出中,电子邮件应用程序将有机会兑现它们。

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2011-12-03
    • 2016-04-17
    • 2012-02-25
    • 2010-10-01
    相关资源
    最近更新 更多