Каким образом функция «Отправить страницу по электронной почте» в Internet Explorer выбирает отправку в качестве тела письма или вложения? - PullRequest
20 голосов
/ 07 июня 2011

При использовании функции «Отправить страницу по электронной почте» в Internet Explorer для страниц в нашем приложении, которые включают в себя средство просмотра Crystal Reports ASP.Net, оно перетаскивает электронную почту в Outlook с веб-страницей как вложение, а не как тело электронной почты.

В предыдущей версии платформы (v1.1) и связанной программе просмотра отчетов Crystal это было не так. Учитывая, что эти старые версии теперь не поддерживаются, я хотел бы знать, можно ли каким-либо образом «побудить» функцию «Отправить страницу по электронной почте» в Internet Explorer отправлять мою страницу ASP.Net как тело, а не как вложение

Для справки, источник для зрителя просто:

<%@ 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>

В следующем коде мы просто имеем:

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

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Это может быть не прямой ответ на ваш вопрос, но Я предлагаю сделать ваше решение не слишком зависимым от функции браузера, которая может не поддерживаться или не поддерживаться в будущих версиях предпочитаемого вами браузера.

Если ваше веб-приложение поддерживает что-то вроде постоянного URL-адреса для каждого конкретного отчета, вам должно быть достаточно электронной почты с URL-адресом в качестве ссылки.

Другим вариантом будет представление отчета в формате PDF (или XLS), чтобы получить моментальный снимок, который можно безопасно прикрепить к вашей электронной почте.

Еще один вариант - не зависеть от возможностей клиента электронной почты в браузере, а отправлять электронные письма самим веб-приложением через SMTP-сервер.

Вот пример того, как отправить электронное письмо с вложением в VB.NET

В случае, если все вышеперечисленное не подходит вам , в некоторых случаях я успешно удалялся в IE, чтобы изменить его поведение "угадай, как обрабатывать содержимое страницы", отправив дополнительный http заголовок (как определено в http://www.ietf.org/rfc/rfc2183.txt)

content-disposition: inline против content-disposition: attachment

Пример (C #) для размещения перед окончательным отображением отчета

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");
0 голосов
/ 16 июня 2011

Это определяется протоколом (файл или HTTP) и содержанием веб-страницы.

Веб-страницы, к которым вы обращаетесь по протоколу «file: //» (например, файлы на локальном компьютере или в локальной сети), отправляются в виде вложений с расширением .htm.Веб-страницы, к которым вы обращаетесь по протоколу "http://", отправляются в виде вложений с расширением .txt, если перед тегом HTML-файл содержит большой комментарий.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...