ChatGPT解决这个技术问题 Extra ChatGPT

How to send email from Terminal?

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.

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
@JimJeffries Which ones? I am using an Amazon EC2 web server.

e
earldouglas
echo "this is the body" | mail -s "this is the subject" "to@address"

Note all this solutions assume you have a locally installed MTA
@Miquel good point. In Ubuntu, you can get the prerequisites via sudo apt-get install mailutils.
@James, It isn't work for my MAC((( Could you help me?
Step by step tutorial: rianjs.net/2013/08/…
Strange. This gives me a "SyntaxError: invalid syntax" message although the only change that I have made was changing the address.
C
Community

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


I just tried, and it worked for me, but I have two questions out of my curiosity.1. What does << means, online I've seen some examples with '<' or '<<. ' What is it used for? And why you have given End Of File there and at the end of the message?
The "<
A
Aliaksandr Sushkevich

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')

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!
Great answer, Lastly don't forget to turn on the less secure app to make work myaccount.google.com/lesssecureapps
@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.
Very nice. Curl is another awesome swiss army knife like netcat :)
How would you attach a file with this method?
J
JRFerguson

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"

You may need to install mailutils. It can be installed via a package manager (eg. apt install mailutils)
M
Miae Kim

If you want to attach a file on Linux

echo 'mail content' | mailx -s 'email subject' -a attachment.txt username@stackoverflow.com

It gives an invalid header message for my attached file. The correct option was an uppercase -A.
@Stephane According to patrick-haugh, -a is the attachment switch. -A is for the account command. See the man page: linux.die.net/man/1/mailx
A
Alois Mahdal

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>

T
Tum

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

On a Mac:

brew install swaks swaks --to user@example.com --server smtp.example.com


A
Andrzey

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"'