문제

i System.Net.Mail MailMessage 개체가 있고 전송 한 후 DocessionSet에 저장하려고합니다. 이 객체에는 보낸 사람, CC, HTML 본문 및 첨부 파일이 들어 있습니다.

어떻게 문서 설정을 저장할 수 있습니까?

"저장"- 메티드를 사용하는 방법을 찾았지만 모든 것이 코드중 .

결국 내 폴더에 .EML 또는 .msg를 원합니다.

답변 덕분 에이 작업이 잘 작동합니다 :

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();
.

도움이 되었습니까?

해결책

Judging from the link you reported, the Save method calls a FileStream object. Being a stream, the FileStream can be replaced by a 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 });

Then, it is just a matter of saving this stream to your document set, like this:

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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top