Mime Compliance OptionsEnabled Validators Property
Get or set the validators that should be run.
Definition
Namespace: MimeKit
Assembly: MimeKit.Core (in MimeKit.Core.dll) Version: 5.0.0
The enabled validators.
Assembly: MimeKit.Core (in MimeKit.Core.dll) Version: 5.0.0
C#
public MimeComplianceValidators EnabledValidators { get; set; }Property Value
MimeComplianceValidatorsThe enabled validators.
Remarks
Gets or sets the validators that should be run. The default is All.
Each validator inspects a particular kind of content more deeply than the structural checks that the MimeReader always performs. Disabling a validator stops the violations that it detects from being reported, but has no effect on how the message is parsed.
This exists so that a validator can be switched off without having to disable compliance reporting altogether, for example if it turns out to be too expensive for, or to misbehave on, the messages that a particular deployment sees.
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;
}
}