Мой брандмауэр блокирует ссылку kusek, но я уверен, что это то, что нужно. По случайному совпадению я только что разработал это вчера, поэтому могу поделиться основными моментами.
Файл функции
Эта функция настраиваемого действия добавляет пункт меню ко всем библиотекам документов. Настройте тип содержимого, если необходимо ограничить это только определенными документами.
<?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}&ListId={ListId}" />
</CustomAction>
</Elements>
Страница приложения
Я разработал страницу приложения, используя превосходную ссылку Карин Бош о элементах управления SharePoint , чтобы спроектировать и создать страницу приложения, чтобы она выглядела красиво и «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();