Mime ReaderCompliance Logger Property
Get or set the logger to use for reporting MIME compliance violations.
Definition
Namespace: MimeKit
Assembly: MimeKit.Core (in MimeKit.Core.dll) Version: 5.0.0
The MIME compliance logger.
Assembly: MimeKit.Core (in MimeKit.Core.dll) Version: 5.0.0
C#
public IMimeComplianceLogger? ComplianceLogger { get; set; }Property Value
IMimeComplianceLoggerThe MIME compliance logger.
Remarks
Gets or sets the logger to use for reporting MIME compliance violations.
When no logger is set, no compliance checks are performed at all. When a logger is set, ComplianceOptions controls which checks are performed and how the violations that they detect are reported.
Example
C#
// IMimeComplianceLogger receives a MimeComplianceIssue for each violation of the MIME
// specifications that the MimeReader (or MimeParser) encounters while parsing.
class ComplianceReport : IMimeComplianceLogger
{
public readonly List<MimeComplianceIssue> Issues = new List<MimeComplianceIssue> ();
public void Log (in MimeComplianceIssue issue)
{
Issues.Add (issue);
}
}
public static MimeMessage ParseAndReportCompliance (string fileName)
{
using (var stream = File.OpenRead (fileName)) {
var report = new ComplianceReport ();
var parser = new MimeParser (stream, MimeFormat.Entity) {
ComplianceLogger = report,
// Messages from a local message store (such as an mbox or Maildir) are not
// subject to the transport requirements (such as line-length limits) and so
// such violations are rated with a lower severity.
ComplianceContext = MimeComplianceContext.Storage,
// When parsing untrusted messages, limit the number of times that each violation
// may be reported to avoid unbounded memory usage.
MaxComplianceIssuesPerViolation = 100
};
var message = parser.ParseMessage ();
foreach (var issue in report.Issues) {
// Each issue includes the location in the stream where the violation was found,
// how severe it is, and a description of the problem.
Console.WriteLine ("[{0}] line {1}, column {2}: {3}", issue.Severity, issue.LineNumber, issue.ColumnNumber, issue.Description);
// The Categories property describes the kinds of risk that the violation poses.
if ((issue.Categories & MimeComplianceCategories.Security) != 0)
Console.WriteLine (" This violation may have security implications: {0}", issue.Remarks);
}
return message;
}
}