203

I know there are ways to send email from terminal in Linux/MacOS, but I can't seem to find proper documentation on how to do that.

Basically I need it for my bash script that notifies me every time there is a change in a file.

NoobDev4iPhone
  • 5,227
  • 10
  • 30
  • 33
  • 4
    It should probably be noted here that some hosts and ISPs "turn off" the ability for you to send email. I presume it's an attempt to stop people spamming and phishing through them – Jim Jeffries Nov 24 '11 at 18:25
  • @JimJeffries Which ones? I am using an Amazon EC2 web server. – ckjbgames Feb 24 '17 at 16:58

8 Answers8

149
echo "this is the body" | mail -s "this is the subject" "to@address"
earldouglas
  • 13,012
  • 5
  • 38
  • 49
136

Go into Terminal and type man mail for help.

You will need to set SMTP up:

http://hints.macworld.com/article.php?story=20081217161612647

See also:

http://www.mactricksandtips.com/2008/09/send-mail-over-your-network.html

Eg:

mail -s "hello" "example@example.com" <<EOF
hello
world
EOF

This will send an email to example@example.com with the subject hello and the message

Hello

World

Community
  • 1
  • 1
gadgetmo
  • 2,964
  • 8
  • 26
  • 39
66

Probably the simplest way is to use curl for this, there is no need to install any additional packages and it can be configured directly in a request.

Here is an example using gmail smtp server:

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
  --mail-from 'from-email@gmail.com' \
  --mail-rcpt 'to-email@gmail.com' \
  --user 'from-email@gmail.com:YourPassword' \
  -T <(echo -e 'From: from-email@gmail.com\nTo: to-email@gmail.com\nSubject: Curl Test\n\nHello')
Aliaksandr Sushkevich
  • 9,760
  • 6
  • 35
  • 41
  • 1
    This is a really good option. You can generate an app specific password for your Google account and this just delivers the email from your own account. Very cool! – dakdad Sep 12 '19 at 07:58
  • 3
    Great answer, Lastly don't forget to turn on the less secure app to make work https://myaccount.google.com/lesssecureapps – yubaraj poudel Nov 05 '19 at 11:04
  • @aliaksandr should add this last point to his answer. By default this option (give access to less secure apps) is disabled and it's not evident. At least if you're using gmail account as sender email. – EAmez Nov 26 '19 at 09:25
  • Very nice. Curl is another awesome swiss army knife like netcat :) – EdiD Aug 16 '20 at 08:41
  • How would you attach a file with this method? – Masoud Ghaderi Feb 11 '21 at 00:02
42

If all you need is a subject line (as in an alert message) simply do:

mailx -s "This is all she wrote" < /dev/null "myself@myaddress"
JRFerguson
  • 7,216
  • 1
  • 30
  • 35
22

If you want to attach a file on Linux

echo 'mail content' | mailx -s 'email subject' -a attachment.txt username@stackoverflow.com
Miae Kim
  • 1,571
  • 18
  • 24
  • 4
    It gives an `invalid header` message for my attached file. The correct option was an uppercase `-A`. – Stephane Jul 01 '17 at 06:59
  • 3
    @Stephane According to patrick-haugh, -a is the attachment switch. -A is for the account command. See the man page: https://linux.die.net/man/1/mailx – Miae Kim Jan 23 '18 at 21:34
9

in the terminal on your mac os or linux os type this code

mail -s (subject) (receiversEmailAddress)  <<< "how are you?"

for an example try this

mail -s "hi" abc@example.com <<< "how are you?"<br>
Alois Mahdal
  • 10,043
  • 7
  • 49
  • 69
4

For SMTP hosts and Gmail I like to use Swaks -> https://easyengine.io/tutorials/mail/swaks-smtp-test-tool/

On a Mac:

  1. brew install swaks
  2. swaks --to user@example.com --server smtp.example.com
Tum
  • 5,967
  • 2
  • 23
  • 22
0

I think swaks is the best. Here you have more complicated example, using TLS encryption on port 25:

swaks --from john.smith@mydomain.com \
--h-From: '"John Smith" <john.smith@mydomain.com>' \
--h-Subject: 'Subject of message' \
--auth LOGIN --auth-user mylogin --auth-pass mypass \
--to someone@otherdomain.com \
--server smtp.example.com --port 25 -tls \
--add-header 'Content-Type: text/plain; charset="utf-8"'
Andrzey
  • 11
  • 1