【问题标题】:Sending e-mail from default Email Client (ex. Outlook,.. ) using c# from an ASP.NET web site使用来自 ASP.NET 网站的 c# 从默认电子邮件客户端(例如 Outlook,..)发送电子邮件
【发布时间】:2012-09-16 17:01:10
【问题描述】:

我正在处理我的第一个项目,我需要添加一个函数作为 button_click 事件。函数应该打开默认电子邮件客户端的“发送新电子邮件”表单,为空,没有任何目的地、主题或正文,仅带有附件。

我在 stackoverflow 和 codeproject 上浏览了许多类似的教程,但无法解决。我发现类似的函数可以从代码发送消息,但不仅仅是打开一个空的电子邮件表单并附加所需的文件。但无法成功修改。

我相信也有人在寻找这种解决方案。

到目前为止我尝试的是:

protected void btnSend_Click(object sender, EventArgs e)
{
    string value;
    value = lstpdfList.SelectedItem.Text;
    string file = "W:/" + value + ".pdf";

    MailMessage message = new MailMessage();
    Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
    ContentDisposition disposition = data.ContentDisposition;
    disposition.CreationDate = System.IO.File.GetCreationTime(file);
    disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
    disposition.ReadDate = System.IO.File.GetLastWriteTime(file);
    message.Attachments.Add(data);
}

【问题讨论】:

  • MailMessage 是 System.Net.Mail 命名空间中的一个 .Net 类,实际上是一个没有 UI 的电子邮件客户端。如果要操作外部程序,则需要与其 API 进行交互。如果您指定支持哪些电子邮件包,通常会容易得多 - 这是您想要使用 Outlook 执行的操作的示例:stackoverflow.com/questions/6148639/…
  • 哦。您的编辑显着改变了问题。您需要在浏览器中有一些客户端代码才能打开邮件包并附加文件。这有几个问题 - 例如,如果您访问了一个网站,然后继续打开您的电子邮件客户端并将文件附加到它,您会很高兴吗?这就是在默认的<a href="mailto:"> 链接之外很难通过网络提供此功能的原因之一。
  • 这将是一个供公司内部使用的网络应用程序(asp.net 网站)。列表框中有一个手册列表,当他们选择一个时,他们应该能够将其作为附件添加到 Outlook 中的新电子邮件表单中。你可以帮帮我吗 ?真的很重要..谢谢你
  • 您的最后一条评论在我看来是一个不可能的要求。在 Web 应用程序中最接近此的方法是从服务器发送电子邮件,而不涉及任何一端的 Outlook。在这种情况下,只需按照msdn.microsoft.com/en-us/library/… 上的说明进行操作即可
  • 这不是不可能,但也不是很愉快。如果您在 Intranet 环境中,您可以执行以下操作:social.msdn.microsoft.com/Forums/pl-PL/netfxjscript/thread/… 但它不太可能与 Internet Explorer 以外的任何东西一起使用。

标签: c# asp.net email attachment


【解决方案1】:

您不能将文件从 ASP.net 附加到 Outlook,这是一个安全问题。

如果您有权访问 Exchange Web 服务,则可以直接与 Exchange 交互,以从该用户帐户发送带有附件等的电子邮件。

您可能必须委派对用于执行 ASP.NET 请求的用户帐户的访问权限才能成功与 Exchange Server 服务交互,您也可以使用 ASP.net 模拟。

查看文档:

http://msdn.microsoft.com/en-us/library/exchange/bb409286(v=exchg.140).aspx

【讨论】:

  • 为什么要这样做呢? SmtpClient 是 2-3 行代码,支持用户要求的一切。完全不需要使用 EWS。
  • 这只是另一种选择,因为它是一个 Intranet 站点,它计划扩展以使用 EWS 可能更有用。
【解决方案2】:

您无法通过 Web 应用程序在客户端自动执行 Outlook。而且您不应该在服务器上调用 Outlook。

但是,您可以做的是从 Web 服务器发送一封电子邮件,而不涉及 Outlook。

为此,只需关注example on MSDN for SmtpClient.Send()

还有一个以编程方式创建带有附件hereMailMessage 的示例。

public static void CreateTestMessage2(string server)
{
    string to = "jane@contoso.com";
    string from = "ben@contoso.com";
    MailMessage message = new MailMessage(from, to);
    message.Subject = "Using the new SMTP client.";
    message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";
    SmtpClient client = new SmtpClient(server);
    // Credentials are necessary if the server requires the client  
    // to authenticate before it will send e-mail on the client's behalf.
    client.UseDefaultCredentials = true;

    try 
    {
        client.Send(message);
    }  
    catch (Exception ex) 
    {
        Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", ex.ToString() );           
    }              
}

【讨论】:

  • 这是假设他不想以用户身份使用表单发送电子邮件。
  • 不一定。根据邮件服务器设置,from 可以设置为使用 Web 应用程序的用户的电子邮件地址。然后该消息将显示为来自用户。
  • MailMessageSmtpClient 对象都需要在 using 块中。
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2014-07-11
  • 2014-06-02
  • 1970-01-01
  • 2012-07-07
相关资源
最近更新 更多