¿Cómo enviar un correo electrónico con archivos adjuntos en SharePoint 2013?
Pregunta
Estoy usando SharePoint 2013 para implementar una solicitud de flujo de trabajo personalizado.
Durante una de las transiciones estatales, quiero enviar un correo electrónico a las personas que forman parte de un grupo determinado con un archivo zip de documentos cargados en los últimos 5 días.
Sin embargo, no estoy seguro de cuál es la mejor manera de enviar archivos adjuntos en SharePoint.No pude encontrar si está respaldado por la API en sí:
Por favor, sugiera lo que sería una forma recomendada.
Solución
SPUtility.SendEmail
doesn't support sending attachments you will need to use the classes in the System.Net.Mail
namespace.
Below is an example of how to do this, it is not functional as you will need to provide additional code to load your zip file as an SPFile object in order to call the OpenBinaryStream()
method (or provide some other way of opening the zip file as a Stream
). Also it will need additional error checking and such.
using(SPSite site = new SPSite("http://siteurl"))
{
using(SPWeb web = site.OpenWeb())
{
// Check there is an email server configured
if (SPUtility.IsEmailServerSet(web))
{
// Get the web app so we can get the email server SP is configured to use
SPWebApplication webApp = web.Site.WebApplication;
// Get the mail server details
string smtpServerAddress = webApp.OutboundMailServiceInstance.Server.Address;
string fromAddress = webApp.OutboundMailSenderAddress;
var email = new MailMessage();
email.From = new MailAddress(fromAddress);
// Your code to load the zip file as an SPFile
Stream contentStream = spFile.OpenBinaryStream();
var attachment = new Attachment(contentStream, spFile.Name);
email.Attachments.Add(attachment);
email.Subject = "Your email subject";
email.Body = "Your email body text";
// Set up the mail server and sent the email
SmtpClient mailServer = new SmtpClient(smtpServerAddress);
mailServer.Credentials = CredentialCache.DefaultNetworkCredentials;
mailServer.Send(email);
}
}
}
Otros consejos
This should work:
using (SPSite site = new SPSite("http://website.com/sites/site"))
{
using (SPWeb web = site.OpenWeb())
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
writer.Write("Hello its my sample file");
writer.Write(Environment.NewLine);
writer.Write(Environment.NewLine);
writer.Write("Hello its my sample file");
writer.Flush();
SPWebApplication webApp = web.Site.WebApplication;
string smtpServerAddress = webApp.OutboundMailServiceInstance.Server.Address;
string fromAddress = webApp.OutboundMailSenderAddress;
ms.Position = 0; // read from the start of what was written
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain);
MailMessage email = new MailMessage();
email.From = new MailAddress(fromAddress);
email.To.Add("myemail@gmail.com");
email.Attachments.Add(new Attachment(ms, "myfile.txt", "text/txt"));
email.Subject = "Your email subject";
email.Body = "Your email body text";
// Set up the mail server and sent the email
SmtpClient mailServer = new SmtpClient(smtpServerAddress);
mailServer.Credentials = CredentialCache.DefaultNetworkCredentials;
mailServer.Send(email);
writer.Dispose();
ms.Close();
}
}