internal override void WriteContentTo(MimeWriter writer) { MimeField FldContentType = Fields["Content-Type"]; if (FldContentType != null && FldContentType.ValueContentType.isMultipart) { for (int i = 0; i < _parts.Count; ++i) { writer.WriteBoundary(ContentType.Boundary, false); _parts[i].WriteTo(writer); } writer.WriteBoundary(ContentType.Boundary, true); } else { if (_parts != null && _parts.Count > 0) { throw new MimeException("Part is multipart but content-type is not."); } base.WriteContentTo(writer); } }
protected void ParseMultiPart(MimeContentType contentType, MimeReader reader, StringWriter bodyWriter) { if (contentType is null) { throw new ArgumentNullException(nameof(contentType)); } if (reader is null) { throw new ArgumentNullException(nameof(reader)); } _parts = new MimeParts(); string Boundary = contentType.Boundary; if (Boundary == null) { throw new MimeException("Invalid multipart-mime-message, missing 'Boundary'."); } while (true) { if (!reader.ReadLine(false)) { throw new MimeException("Invalid multipart-mime-message, missing begin-boundary."); } if (reader.TestBoundary(Boundary) == 1) { break; } if (bodyWriter != null) { reader.WriteLineTo(bodyWriter); } } while (reader.TestBoundary(Boundary) != -1) { if (reader.TestBoundary(Boundary) == 1) { MimeFields PartFields = reader.ReadFields(); MimeField FldContentTransferEncoding = PartFields["Content-Transfer-Encoding"]; byte[] PartContent = reader.ReadData(MimePart.StringToMimeEncoding(FldContentTransferEncoding?.Value), Boundary); MimeField FldPartContentType = PartFields["Content-Type"]; MimeContentType PartContentType = FldPartContentType?.ValueContentType; if (PartContentType != null && PartContentType.isMultipart) { _parts.Add(new MimeMultiPart(PartContentType, PartFields, PartContent)); } else { _parts.Add(new MimePart(PartFields, PartContent)); } PartFields.SetCollectionReadOnly(); } else { if (!reader.isLineEmpty) { throw new MimeException("Invalid multipart-mime-message, garbage in between parts."); } if (!reader.ReadLine(false)) { throw new MimeException("Invalid multipart-mime-message, missing end-boundary."); } } } _parts.SetCollectionReadOnly(); }