webbrowser visual studio software net microsoft internet hkey_current_user featurecontrol feature_browser_emulation feature control asp.net internet-explorer outlook crystal-reports-2008

asp.net - visual - ¿Cómo elige la función "enviar página por correo electrónico" en Internet Explorer como el cuerpo de un correo electrónico o como un archivo adjunto?



visual studio 2015 webbrowser control ie version (2)

Cuando se utiliza la función "Enviar página por correo electrónico" en Internet Explorer para páginas dentro de nuestra aplicación que incluyen un visor de ASP.Net de Crystal Reports, redacta el correo electrónico en Outlook con la página web como un archivo adjunto, en lugar de como el cuerpo del correo electrónico. .

Con una versión anterior del marco (v1.1) y el visor de informes Crystal asociado, este no fue el caso. Dado que esas versiones anteriores ahora no son compatibles, me gustaría saber si hay alguna manera de "alentar" la función "Enviar página por correo electrónico" de Internet Explorer para enviar mi página ASP.Net como el cuerpo en lugar de como un archivo adjunto. ?

Para referencia, la fuente para el espectador es simplemente:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="GeneralReport.aspx.vb" Inherits="MyApplication.GeneralReportForm"%> <%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title></title> <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR"> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> <LINK href="Styles.css" type="text/css" rel="stylesheet"> </HEAD> <body> <form id="Form1" method="post" runat="server"> <div id="contentstart">&nbsp;</div> <DIV><CR:CRYSTALREPORTVIEWER id="CrystalReportViewer" runat="server" DisplayToolbar="False" SeparatePages="False" HasDrillUpButton="False" EnableDrillDown="False" DisplayGroupTree="False" HasSearchButton="False" HasZoomFactorList="False" HasGotoPageButton="False" Visible="False" Height="50px" Width="350px"></CR:CRYSTALREPORTVIEWER> </DIV> <br> <asp:label id="lblError" runat="server" Width="743px" Font-Size="Larger" ForeColor="Red"></asp:label> </form> </body> </HTML>

En el código de atrás, simplemente tenemos:

Dim rpt As New MyReport() rpt.SetDataSource(ds) CrystalReportViewer.ReportSource = rpt CrystalReportViewer.Visible = True


Es posible que esta no sea una respuesta directa a su pregunta, pero le sugiero que su solución no sea demasiado dependiente de una función del navegador que puede no ser compatible de manera diferente en futuras versiones de su navegador preferido.

Si su aplicación web admite algo así como una URL permanente para cada representación de informe específica, un correo electrónico con la URL como un enlace debería ser suficiente.

Otra opción sería presentar su informe como PDF (o XLS) para obtener una instantánea que se puede adjuntar de forma segura a su correo electrónico.

Otra opción más es no depender del navegador del cliente ni la capacidad de correo electrónico, sino de enviar correos electrónicos desde la propia aplicación web a través de un servidor SMTP.

Aquí hay un ejemplo de cómo enviar un correo electrónico con un archivo adjunto en VB.NET

En caso de que todo lo anterior no sea una opción para usted , en algunos casos tuve éxito al cambiar IE para cambiar su comportamiento de adivinar cómo manejar el contenido de la página mediante el envío de un encabezado http adicional (como se define en http://www.ietf.org/rfc/rfc2183.txt )

content-disposition: inline versus content-disposition: attachment

Ejemplo (C #) para poner antes de la presentación del informe final

HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ContentType = "text/html"; HttpContext.Current.Response.AddHeader("content-disposition", "inline; filename=report.htm");


Está determinado por el protocolo (archivo o HTTP) y el contenido de la página web.

Las páginas web a las que accede mediante el protocolo "archivo: //" (por ejemplo, archivos en su computadora local o red de área local) se envían como archivos adjuntos con una extensión .htm. Las páginas web a las que accede mediante el protocolo "http: //" se envían como archivos adjuntos con una extensión .txt si el archivo HTML contiene un comentario grande antes de la etiqueta.

http://support.microsoft.com/kb/304694