Pergunta

Eu tenho um Sistema.Líquida.Correio objeto MailMessage e quer guardá-lo para uma documentset após o envio.Este objeto contém o remetente, para, cc, corpo em Html e anexos.

Como posso guardá-lo para uma documentset?

Eu encontrei algumas maneiras de usar o "salvar"para salvar Methodes mas todos eles só apoio caminho local como este no CodePlex.

No final eu só quero uma .eml ou .msg na minha pasta.

Graças a sua resposta, eu tenho isso funcionando bem:

MemoryStream stream = new MemoryStream();

Assembly assembly = typeof(SmtpClient).Assembly;
Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");

ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
sendMethod.Invoke(msg, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true }, null);

string emailTitle = string.Concat(documentSet.Folder.ServerRelativeUrl, name, ".eml");

stream.Seek(0, SeekOrigin.Begin);
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

SPFile file = documentSet.Folder.Files.Add(emailTitle, data, true);
file.Update();
Foi útil?

Solução

Julgando a partir do link que você relatou, a Guardar as chamadas de método de um objeto FileStream.Sendo uma sequência, o FileStream pode ser substituído por um MemoryStream.

// Create MemoryStream object
MemoryStream stream = new MemoryStream();

// Get reflection info for MailWriter contructor
// [omitted for brevity]

// Construct MailWriter object with our MemoryStream
object _mailWriter = _mailWriterContructor.Invoke(new object[] { stream });

Então, é apenas uma questão de salvar este fluxo para o conjunto de documentos, como este:

SPFolder ds = web.GetFolder("http://server/documentsetname");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length); //make sure this is reliable, otherwise find other ways to convert to a byte array
ds.Files.Add("http://server/shared%20documents/documentsetname/your.msg", data);
ds.Update();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top