jstedfast/MailKit · error · InvalidOperationException

No sender has been specified.

Error message

No sender has been specified.

What it means

Validation in SmtpClient.ValidateArguments (shared by Send/SendAsync): the MimeMessage has no sender — neither a Resent-Sender/Sender header nor a From address could be resolved via GetMessageSender. SMTP requires a sender for the MAIL FROM command, so InvalidOperationException is thrown.

Solutions

  1. Set message.From before send.
  2. Use explicit-sender overload.

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

if (message.Sender == null && !message.From.Mailboxes.Any())
	throw new InvalidOperationException("missing From");

Type guard

bool HasSender(MimeMessage m) => m.Sender != null || m.From?.Mailboxes.Any() == true;

Try / catch

catch (InvalidOperationException ex) when (ex.Message == "No sender has been specified.") { /* set From and retry */ }

Prevention

When it happens

Trigger: MimeMessage without From/Sender passed to Send(message).

Common situations: Templates missing From header.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jstedfast/MailKit@9d3859a785 (2026-09-15). Data as JSON: /api/errors/a773038f5fd95ea6. Report an issue: GitHub.

Appendix: source

Thrown at MailKit/Net/Smtp/SmtpClient.cs:2520

				operation.SetError (ex);

				Disconnect (uri.Host, uri.Port, GetSecureSocketOptions (uri), false);
				throw;
			}
		}

		static void ValidateArguments (FormatOptions options, MimeMessage message, out MailboxAddress sender, out IList<MailboxAddress> recipients)
		{
			if (options == null)
				throw new ArgumentNullException (nameof (options));

			if (message == null)
				throw new ArgumentNullException (nameof (message));

			var mailbox = GetMessageSender (message);

			if (mailbox == null)
				throw new InvalidOperationException ("No sender has been specified.");

			sender = mailbox;
			recipients = GetMessageRecipients (message);

			if (recipients.Count == 0)
				throw new InvalidOperationException ("No recipients have been specified.");
		}

		/// <summary>
		/// Send the specified message.
		/// </summary>
		/// <remarks>
		/// <para>Sends the specified message.</para>
		/// <para>The sender address is determined by checking the following
		/// message headers (in order of precedence): Resent-Sender,
		/// Resent-From, Sender, and From.</para>
		/// <para>If either the Resent-Sender or Resent-From addresses are present,
		/// the recipients are collected from the Resent-To, Resent-Cc, and

View on GitHub (pinned to 9d3859a785)