protected virtual void Dispose(bool disposing) { if (data == null) return; try { if (!disposing) return; while (partDepth != 0) this.EndPart(); this.FlushWriteQueue(); if (lineTermination == LineTerminationState.CRLF) return; if (lineTermination == LineTerminationState.CR) data.Write(MimeString.CrLf, 1, 1); else data.Write(MimeString.CrLf, 0, MimeString.CrLf.Length); lineTermination = LineTerminationState.CRLF; } finally { if (disposing) { if (encodedPartContent != null) encodedPartContent.Dispose(); if (partContent != null) partContent.Dispose(); data.Dispose(); } state = MimeWriteState.Complete; encodedPartContent = null; partContent = null; data = null; } }
public void EndPart() { this.AssertOpen(); switch (state) { case MimeWriteState.Initial: case MimeWriteState.Complete: throw new System.InvalidOperationException(Resources.Strings.CannotEndPartHere); case MimeWriteState.StartPart: case MimeWriteState.Headers: case MimeWriteState.Parameters: case MimeWriteState.Recipients: case MimeWriteState.GroupRecipients: this.FlushHeader(); if (!foundMimeVersion) { if (forceMime && partDepth == 1) this.WriteMimeVersion(); else currentPart.IsMultipart = false; } this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length); break; case MimeWriteState.PartContent: if (encodedPartContent != null) { encodedPartContent.Dispose(); encodedPartContent = null; } if (partContent != null) { partContent.Dispose(); partContent = null; } contentWritten = true; break; } state = MimeWriteState.EndPart; if (currentPart.IsMultipart) { this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length); this.WriteBoundary(currentPart.Boundary, true); } this.PopPart(); if (partDepth != 0) return; state = MimeWriteState.Complete; }
public System.IO.Stream GetRawContentWriteStream() { this.AssertOpen(); if (contentWritten) throw new System.InvalidOperationException(Resources.Strings.ContentAlreadyWritten); switch (state) { case MimeWriteState.Initial: case MimeWriteState.Complete: case MimeWriteState.EndPart: throw new System.InvalidOperationException(Resources.Strings.CannotWritePartContentNow); case MimeWriteState.StartPart: case MimeWriteState.Headers: case MimeWriteState.Parameters: case MimeWriteState.Recipients: case MimeWriteState.GroupRecipients: this.FlushHeader(); if (!foundMimeVersion) { if (forceMime && partDepth == 1) this.WriteMimeVersion(); else currentPart.IsMultipart = false; } if (MimeWriteState.StartPart != state) this.Write(MimeString.CrLf, 0, MimeString.CrLf.Length); break; case MimeWriteState.PartContent: return partContent; } if (currentPart.IsMultipart) throw new System.InvalidOperationException(Resources.Strings.MultipartCannotContainContent); state = MimeWriteState.PartContent; partContent = new WriterContentStream(this); return partContent; }
public void EndContent() { this.AssertOpen(); if (encodedPartContent == null) return; encodedPartContent.Dispose(); encodedPartContent = null; contentWritten = true; if (partContent == null) return; partContent.Dispose(); partContent = null; }