How To Use Email Within Emacs: Step-By-Step Guide For Beginners
Setting Up Email in Emacs
Emacs, a powerful and versatile text editor, can be configured to manage your emails efficiently. This guide will walk you through the steps to set up email within Emacs, focusing on the popular mu4e
and smtpmail
configurations.
Installing Necessary Tools
To start using email in Emacs, you need to install a few tools:
- mu: A tool for dealing with email messages stored in the Maildir format on Unix-like systems.
- mu4e: An Emacs-based client built on top of
mu
. - mbsync: An IMAP client that synchronizes your emails between your remote email server and a local folder on your computer.
You can install these tools using your package manager. For example, on Debian-based systems, you can use:
sudo apt-get install mu4e mbsync
Configuring mu4e
-
Initialize mu4e:
- Create a configuration file for
mu4e
in your Emacs configuration directory. Typically, this is~/.emacs.d/init.el
or~/.emacs
. - Add the following lines to your configuration file to set up
mu4e
:(require 'mu4e) (setq mu4e-maildir "~/Maildir") ; Path to your Maildir (setq mu4e-get-mail-command "mbsync --config ~/.emacs.d/.mbsyncrc nameaccount") (setq mu4e-update-interval 300) ; Update interval in seconds
- Create a configuration file for
-
Configure mbsync:
- Create a configuration file for
mbsync
(e.g.,~/.emacs.d/.mbsyncrc
) with the following content:
“`ini
IMAPAccount account
Host imap.example.com
User username@example.com
PassCmd "gpg2 -q –for-your-eyes-only –no-tty –decrypt ~/.emacs.d/.mbsync-pass.gpg"
SSLType IMAPS
SSLCertCheck yes
IMAPStore account-remote
Account accountMaildirStore account-local
Path ~/Maildir/
Inbox ~/Maildir/INBOXChannel account
Master :account-remote:
Slave :account-local:
Patterns * !Trash !Spam !Junk
Create Both
Expunge Both
Sync All
SyncState 1 - Create a configuration file for
-
Indexing Emails:
- To index your emails, you need to run
mu index
periodically. You can automate this by adding a hook to your Emacs configuration:(add-hook 'after-init-hook (lambda () (mu4e t)))
Setting Up SMTP for Sending Emails
-
Configure SMTP:
- To send emails from Emacs, you need to configure the SMTP settings. Add the following lines to your Emacs configuration file:
(setq user-mail-address "[email protected]" user-full-name "Your Full Name") (setq mail-user-agent 'message-user-agent) (setq message-send-mail-function 'smtpmail-send-it smtpmail-stream-type 'starttls smtpmail-smtp-server "smtp.example.com" smtpmail-smtp-service 587)
- To send emails from Emacs, you need to configure the SMTP settings. Add the following lines to your Emacs configuration file:
-
Create .authinfo File:
- Create an
.authinfo
file in your home directory to store your SMTP credentials securely:touch ~/.authinfo chmod 600 ~/.authinfo
- Add the following line to your
.authinfo
file:machine smtp.example.com login [email protected] port 587 password #REPLACE-ME#
Replace
#REPLACE-ME#
with your email account's app password.
- Create an
Composing and Sending Emails
-
Start mu4e:
- To start
mu4e
, pressM-x mu4e
or bind it to a key in your Emacs configuration:(global-set-key (kbd "<f2>") 'mu4e)
- To start
-
Compose an Email:
- Once in the
mu4e
dashboard, pressC
to compose a new email. You will be prompted to select the email account to use if you have multiple accounts configured.
- Once in the
-
Sending Emails:
- After composing your email, press
C-c C-c
to send it. Emacs will use the configured SMTP settings to send the email.
Handling Email Offline
-
Using a Local SMTPD:
- For offline email handling, consider using a local SMTP daemon like Exim. This allows emails to be queued and sent when you have an internet connection:
sudo apt-get install exim4
Configure Exim to queue emails and send them when the network is available. This approach avoids the complexities of handling email queues within Emacs itself.
- For offline email handling, consider using a local SMTP daemon like Exim. This allows emails to be queued and sent when you have an internet connection:
-
Using smtpmail.el:
- Alternatively, you can use
smtpmail.el
to queue emails within Emacs. This method allows you to runsmtpmail.el
in a separate Emacs process to attempt to deliver queued emails periodically:(setq smtpmail-queue-dir "~/Maildir/queue/") (run-with-timer 0 300 'smtpmail-try-to-send-queued-messages)
- Alternatively, you can use
Customizing and Enhancing mu4e
-
Desktop Notifications:
- To enable desktop notifications for new emails, you can use the
mu4e-alert
package:(use-package mu4e-alert :ensure t :init (defun perso--mu4e-notif () "Display both mode line and desktop alerts for incoming new emails." (interactive) (mu4e-update-mail-and-index 1) (mu4e-alert-enable-mode-line-display) (mu4e-alert-enable-notifications)) (defun perso--mu4e-refresh () "Refresh emails every 300 seconds and display desktop alerts." (interactive) (mu4e t) (run-with-timer 0 300 'perso--mu4e-notif)) :after mu4e :bind ("<f2>" . perso--mu4e-refresh) :config (add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display) (mu4e-alert-set-default-style 'libnotify) (add-hook 'after-init-hook #'mu4e-alert-enable-notifications) (setq mu4e-alert-interesting-mail-query (concat "flag:unread maildir:/INBOX" " AND NOT flag:trashed")))
- To enable desktop notifications for new emails, you can use the
-
HTML Email Handling:
- To handle HTML-formatted emails, you can configure
mu4e
to use a text converter likew3m
:(setq mu4e-html2text-command "w3m -T text/html")
- To handle HTML-formatted emails, you can configure
By following these steps, you can set up a robust email client within Emacs, leveraging the power of mu4e
and smtpmail
to manage your emails efficiently.