2009-07-16 88 views

回答

1

我的防火墙阻止了kusek的链接,但我相信这是一个好去处。巧合的是我昨天刚刚开发这个,所以可以分享亮点。

特性文件

custom action feature增加了一个菜单选项,所有文档库。如果您需要将其限制为仅限某些文档,请调整内容类型。

<?xml version="1.0" encoding="utf-8" ?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <CustomAction 
     Id="OpenInMailClient" 
     RegistrationType="ContentType" 
     RegistrationId="0x0101" 
     Location="EditControlBlock" 
     Sequence="500" 
     ImageUrl="/_layouts/images/iceml.gif" 
     Title="Send As Attachment"> 
     <UrlAction Url="~site/_layouts/Custom/SendMail.aspx?ItemId={ItemId}&amp;ListId={ListId}" /> 
    </CustomAction> 
</Elements> 

应用页面

我开发使用的应用程序页面卡林纳博世的优秀reference of SharePoint controls设计和创建应用程序页面,以便它看起来不错,“SharePointy”。我还使用了一个丰富的HTML框,以便用户可以将丰富的文本输入到似乎正在工作的正文中。

发送消息

这是相当标准的.NET。唯一的半酷部分是使用SharePoint中设置的发送邮件服务器来发送邮件。请注意,有一种方法可以在SharePoint API中发送邮件,但它似乎不支持附件,我无法看到使用它的好处。

// Prepare message 
MailMessage message = new MailMessage 
    { 
     Subject = txtSubject.Text, 
     Body = txtBody.Text, 
     IsBodyHtml = true, 
     From = new MailAddress(txtFromAddress.Text) 
    }; 
message.To.Add(txtToAddress.Text); 
if (!String.IsNullOrEmpty(txtCCAddress.Text)) 
    message.CC.Add(txtCCAddress.Text); 
message.Bcc.Add(txtBCCAddress.Text); 

// Prepare attachment 
Stream stream = chosenItem.File.OpenBinaryStream(); 
Attachment attachment = new Attachment(stream, chosenItem.Name, "application/octet-stream"); 
message.Attachments.Add(attachment); 

// Send message 
string server = SPContext.Current.Site.WebApplication.OutboundMailServiceInstance.Server.Address; 
SmtpClient client = new SmtpClient(server); 
client.Send(message); 

// Clean up 
stream.Dispose(); 
attachment.Dispose(); 
message.Dispose(); 
1

您可以使用自定义操作和布局页面来完成此操作。有关更多详情,请参阅this链接。格式化链接是不整洁的,但这是你需要遵循的方法。您可能需要做的另一件事是以某种方式将电子邮件ID设置为在上述文章中发送的电子邮件ID,以便他们从用户那里获取电子邮件。你可能需要发送一个以及querystring参数。

相关问题