Sending mail
Mutt talks SMTP
Mutt has had its own SMTP client since version 1.5.15, so for most people sending mail is one line of configuration:
set smtp_url = "smtps://you@example.com@smtp.example.com/"
Mutt will connect to that server itself and hand over the message. Authentication works exactly as it does for IMAP, and is covered in the mail accounts section - if reading your mail works, sending it almost certainly will too.
Check your build has it by looking for +USE_SMTP in the output of:
mutt -v
That is the whole story for a laptop or a workstation talking to a provider. The rest of this page is about the older arrangement, which is still the right answer on a server, or when you want mail queued rather than sent immediately.
/usr/sbin/sendmail
The traditional way to get a Unix-like system to send mail is to pipe a fully composed message, headers and all, through a local mail transfer agent. Usually this program is at /usr/sbin/sendmail. If $smtp_url is unset, this is what mutt does.
See if you have something installed to answer to that name:
whereis sendmail
You can compare this to where mutt thinks sendmail is located, by entering this query into mutt:
:set ?sendmail
If the file paths disagree, point mutt at the right one:
set sendmail = "/usr/sbin/sendmail -oem -oi"
The -oem and -oi flags are mutt’s own defaults, so keep them if you change the path.
The advantage of going through a local agent is that mutt hands the message over instantly and something else takes responsibility for delivering it. If your network is intermittent, or you send from scripts and cron jobs as well as from mutt, that queueing is worth having.
msmtp
If you want the sendmail interface without running a mail server, msmtp is the standard answer. It is a small relay-only client with a sendmail-compatible command line, configured in ~/.msmtprc :
account default
host smtp.example.com
port 587
tls on
from you@example.com
auth on
user you@example.com
passwordeval "gpg --batch -dq ~/.msmtp-password.gpg"
Then tell mutt to use it instead of its own SMTP client:
set sendmail = "/usr/bin/msmtp"
msmtp ships msmtpq , a wrapper that queues mail when the network is down and flushes the queue later - which is the main reason to prefer this over mutt’s built-in SMTP. The Arch Wiki msmtp page has worked examples for the common providers.
Other small relay-only agents doing much the same job are nullmailer and dma, the DragonFly Mail Agent, which several distributions now install by default.
Full mail transfer agents
If the machine genuinely needs to accept and route mail, rather than just relay it, you want a real MTA: Postfix is the usual choice, with Exim a well-supported alternative. Sendmail itself is still maintained but is no longer a sensible thing to start with. Configuring any of these is well beyond this guide.
Tweaking mutt
You may find that your message envelopes have a Sender different to the From: field in your email. If this Sender is an address that doesn’t exist, then some mail will be stopped by spam filters and bounce-notices won’t be returned to you. The envelope_from setting will try to fix this:
set envelope_from = yes
If your messages have the wrong From: field, set the realname , hostname and from variables. If you send from more than one address, set alternates too, so that mutt recognises mail addressed to any of them.
Sending readable mail
Mutt sends plain text, which is the right thing to do. One setting makes it play better with everybody else’s mailer:
set text_flowed = yes
This produces format=flowed messages, described in RFC 3676, which lets a recipient’s mailer rewrap your paragraphs to fit their window instead of showing hard-wrapped lines mangled to half width. If you set it, let your editor insert soft line breaks rather than hard ones.
Last updated 31 August 2026.