Example #1
0
 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;
     }
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 public void EndContent()
 {
     this.AssertOpen();
     if (encodedPartContent == null)
         return;
     encodedPartContent.Dispose();
     encodedPartContent = null;
     contentWritten = true;
     if (partContent == null)
         return;
     partContent.Dispose();
     partContent = null;
 }