How to Use the Command 'mail' (with Examples)
The mail
command is a powerful utility that operates within the command-line interface to interact with the user’s mailbox and send emails directly from the terminal. Whether you want to quickly check your emails without opening a full-fledged email client, or send a simple message or complex file as an attachment, the mail
command offers a variety of options. This article illustrates several use cases of the mail
command, demonstrating its versatility and explaining each example.
Use case 1: Open an Interactive Prompt to Check Personal Mail
Code:
mail
Motivation:
Using the simple mail
command without any arguments is the quickest way to open an interactive email prompt in your terminal. This is especially useful for users who want to check and manage their emails directly from the command line without leaving their workflow. It’s a lightweight alternative to graphical email clients and can be easily integrated into scripts for automation.
Explanation:
mail
: This command on its own will access your system’s mail spool directory to check and manage the emails received in your personal mailbox. Once executed, it provides an interactive interface to read unread messages, delete, save, or reply to existing emails.
Example Output: Upon execution, you might see something like the following:
Mail version 8.1 6/6/93. Type ? for help.
"/var/mail/username": 3 messages 3 new
>N 1 From user@example.com Mon Oct 1 08:00 16/500 "Subject: Test email"
N 2 From notifications@example.com Tue Oct 2 09:15 14/600 "Subject: Action Required"
N 3 From team@example.com Wed Oct 3 10:30 12/400 "Subject: Meeting Reminder"
Use case 2: Send a Typed Email Message with Optional CC
Code:
mail --subject="subject line" to_user@example.com --cc="cc_email_address"
Motivation: This command is perfect for sending emails directly from the terminal, especially when you need to send a quick message and possibly include additional recipients in CC. It is excellent for system admins or developers who need to communicate swiftly within a command-line environment without shifting focus from their tasks.
Explanation:
--subject="subject line"
: Specifies the subject of the email, making it easier for the recipient to understand the context.to_user@example.com
: The intended recipient’s email address is specified directly, ensuring that the email is delivered to the right inbox.--cc="cc_email_address"
: (Optional) This argument adds another recipient to the email, allowing them to be included without being the main recipient.
Example Output: When the command is executed, the following interactive prompt might appear for composing the message:
Subject: subject line
To: to_user@example.com
Cc: cc_email_address
Hello,
This is a test message sent from the command line.
Thanks.
Press <Ctrl>-D
Use case 3: Send an Email that Contains File Content
Code:
mail --subject="$HOSTNAME filename.txt" to_user@example.com < path/to/filename.txt
Motivation: In some instances, you might need to send the contents of a file directly in the body of an email. This command is particularly beneficial when sharing log files, system reports, or any other text-based data without attaching it as a separate file. It serves IT professionals who automate the sharing of system/process information.
Explanation:
--subject="$HOSTNAME filename.txt"
: The subject line is dynamically set to include the host’s name and the filename, providing context about the source of the content.to_user@example.com
: This is the recipient’s email address.< path/to/filename.txt
: This syntax directs the content offilename.txt
to be read and used as the body of the email, effectively embedding the file content directly in the message.
Example Output: The email received might look something like this:
Subject: YOUR_HOSTNAME filename.txt
To: to_user@example.com
Contents of the file:
This is the first line in the file.
This is the second line in the file.
[...]
Use case 4: Send a tar.gz
File as an Attachment
Code:
tar cvzf - path/to/directory1 path/to/directory2 | uuencode data.tar.gz | mail --subject="subject_line" to_user@example.com
Motivation:
This command is suitable for users looking to compress and send multiple files or directories in one go. By using tar
to archive and uuencode
to encode the data, you maintain the integrity of your files during transmission, making it ideal for transferring code directories, backups, or other critical data.
Explanation:
tar cvzf -
: This is the command for creating a compressed tarball (.tar.gz
).c
stands for “create,”v
for “verbose” (to list what’s being added),z
for “gzip compression,” andf
specifies the file.path/to/directory1 path/to/directory2
: These are the directories that will be archived.| uuencode data.tar.gz
: Pipes the archive touuencode
, which converts binary data to ASCII text, preparing it for email transmission.data.tar.gz
is a placeholder name for the encoded attachment.mail --subject="subject_line"
: Specifies the email subject.to_user@example.com
: The email recipient’s address.
Example Output: The recipient would find the email like this:
Subject: subject_line
To: to_user@example.com
begin 644 data.tar.gz
M'XL("\"/'V8"3VUW*'7OS?$!``!%`$`2($.1'C$PURPV]YZ?T>!;&8P\?9_#2
[...]
`
end
They would then decode and extract the contents on their end.
Conclusion:
In the digital landscape where time and efficiency are paramount, the mail
command stands out for its simplicity and directness. By leveraging various features shown in the examples above, users can streamline their email-related processes directly from the command line. Adaptability to different use cases makes mail
an invaluable tool for both everyday users and IT professionals alike.