2012-09-25 53 views
1

我正在处理我的第一个项目,并且需要添加一个函数作为button_click事件。功能应该打开默认电子邮件客户端的“发送新电子邮件”表单,为空,没有任何目的地,主题或正文,只需附加文件。使用c#从ASP.NET网站发送默认电子邮件客户端(例如Outlook,..)的电子邮件

我经历了很多类似的教程在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); 
} 
+2

是System.Net.Mail命名空间中的.NET类和程序是一个有效的电子邮件客户端没有UI。如果你想操纵一个外部程序,你需要与它的API进行交互。如果您规定支持哪些电子邮件包,通常会更容易 - 下面是您想要使用Outlook执行的示例:http://stackoverflow.com/questions/6148639/how-to-open-outlook-new-mail-窗户 - c-sharp – dash

+0

D'oh。你的编辑显着改变了这个问题。您需要在浏览器中有一些客户端代码才能打开邮件包并附加文件。这有几个问题 - 例如,如果您访问了一个网站,然后开始打开您的电子邮件客户端并将文件附加到该网站,您会非常高兴吗?这是该功能很难通过默认的链接之外的网络提供的原因之一。 – dash

+0

它将成为公司内部使用的Web应用程序(asp.net网站)。在列表框中有一份手册列表,当他们选择一个时,他们应该能够将其作为附件添加到Outlook中的新电子邮件表单中。你可以帮帮我吗 ?非常重要..谢谢你 –

回答

-1

你不能从一个Web应用程序客户端自动化Outlook。而且您不应该在服务器上调用Outlook。

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

要做到这一点,只需按照example on MSDN for SmtpClient.Send()

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

public static void CreateTestMessage2(string server) 
{ 
    string to = "[email protected]"; 
    string from = "[email protected]"; 
    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());   
    }    
} 
+0

这是假设他不想以使用表单的用户的身份发送电子邮件。 –

+0

不一定。根据邮件服务器设置,可以使用Web应用程序将'from'设置为用户的电子邮件地址。该消息将显示为来自用户。 – tomfanning

+0

“MailMessage”和“SmtpClient”对象都需要位于“使用”块中。 –

1

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

如果你有访问Exchange Web服务可以直接与交流互动,从用户帐户中有附件等发送电子邮件

您可能需要代理访问用于执行的用户帐户ASP.NET请求成功地能够与Exchange Server服务交互,您也可以使用ASP.net模拟。

退房的文档:

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

MAILMESSAGE
+0

为什么要这样做呢? SmtpClient是2-3行代码,并支持用户要求的所有内容。完全没有必要使用EWS。 – tomfanning

+0

这只是另一种选择,因为它是一个内部网站,它可能更有用,它计划扩展使用EWS。 –

相关问题