{"record":{"id":"bca0ad9d3e3744fb","repo":"jstedfast/MailKit","slug":"cannot-search-an-empty-header-field-name","errorCode":null,"errorMessage":"Cannot search an empty header field name.","messagePattern":"Cannot search an empty header field name\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"MailKit/Search/HeaderSearchQuery.cs","lineNumber":60,"sourceCode":"\t\t/// Creates a new header search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"field\">The header field name.</param>\n\t\t/// <param name=\"value\">The value to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"field\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"value\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"field\"/> is empty.\n\t\t/// </exception>\n\t\tpublic HeaderSearchQuery (string field, string value) : base (SearchTerm.HeaderContains)\n\t\t{\n\t\t\tif (field == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (field));\n\n\t\t\tif (field.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search an empty header field name.\", nameof (field));\n\n\t\t\tif (value == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\tField = field;\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the header field name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the header field name.\n\t\t/// </remarks>\n\t\t/// <value>The header field.</value>\n\t\tpublic string Field {\n\t\t\tget; private set;\n\t\t}","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/jstedfast/MailKit/blob/9d3859a7855e3e17582c07fd01972b8e262bf176/MailKit/Search/HeaderSearchQuery.cs#L42-L78","documentation":"MailKit's HeaderSearchQuery constructor validates that the header field name used for a search (e.g. Subject, From) is a non-empty string. An empty string can never match a real IMAP header field, so the library throws ArgumentException immediately instead of producing a useless or invalid search command.","triggerScenarios":"Calling new HeaderSearchQuery(\"\", value) or HeaderSearchQuery.Contains(\"\", text) with an empty field name.","commonSituations":"Building search queries from user input or configuration where the header name was read from an empty config value, a split string, or a variable that defaulted to string.Empty instead of null.","solutions":["Provide a valid non-empty header field name (e.g. \"Subject\", \"From\", custom X- headers).","Validate/trim the field name at the call site before constructing the query.","Fall back to a different search query type (e.g. SearchSubject) when no header name is available."],"exampleFix":"// before\nvar query = new HeaderSearchQuery(headerName, searchText);\n// after\nvar query = string.IsNullOrEmpty(headerName)\n    ? SearchQuery.SubjectContains(searchText)\n    : new HeaderSearchQuery(headerName, searchText);","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(field))\n    throw new ArgumentException(\"Header field name is required.\", nameof(field));","typeGuard":"bool IsValidHeaderField(string? field) => !string.IsNullOrWhiteSpace(field);","tryCatchPattern":"try\n{\n    var query = new HeaderSearchQuery(field, value);\n}\ncatch (ArgumentException)\n{\n    query = SearchQuery.SubjectContains(value);\n}","preventionTips":["Validate header names at the input/config boundary before building queries.","Trim user-supplied field names and reject empty results.","Prefer typed helpers like SearchQuery.SubjectContains when a fixed header is intended."],"tags":["mailkit","search","argument-validation"],"backgroundTag":"empty-required-field","analyzedSha":"9d3859a7855e3e17582c07fd01972b8e262bf176","analyzedAt":"2026-09-15T15:46:11.592Z","contentChangedAt":"2026-09-15T15:46:11.592Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}