如何从命令行发送电子邮件?


28

如何从命令行或脚本发送电子邮件?我希望能够通过传递接收者和消息来以编程方式运行脚本。


如果您正在编写程序,则许多语言都具有处理电子邮件的库
2011年

Answers:


21

mail -s subject someone@example.com 输入您的信息,按Ctrl+D完成


11
如果您尚未将系统配置为告诉它在哪里发送电子邮件,那么实际上可能不会发送电子邮件,它将堆积在我的Mac上。
TJ罗马

15
-1:这个答案是不完整的。除非@TJLuoma指出,否则在执行此命令之前先配置系统,否则该命令将不起作用。
melvynkim 2013年

1
TJ Luoma和melvkim是不正确的:开箱即用的标准OS X系统可以正常发送电子邮件,而无需进行配置。OS X机器将充当其自己的SMTP服务器,在DNS MX中查找目标域并将邮件发送到该域。
JohnEDee

2
@patrix,正确,它使用登录帐户的长用户名和Mac自身生成的“ .local”地址形成“发件人”。我一直使用它来通过外壳脚本化流程向我和我的员工发送通知电子邮件。TJ Luoma和melvkim分别说“将不起作用”和“实际上不发送电子邮件”,但这两种方法都是不正确的。
JohnEDee

1
@RamarajT,是的,您可以将echo命令的输出通过管道发送到mail,然后它将不需要Cmd-D。例如: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

据我所知,有两个程序可以轻松地将您配置为从命令行发送电子邮件的Mac。

我已经为他们两个写了HOWTO:

我建议在两者之中msmtp

配置非常复杂,我不确定是否应该在此处复制所有步骤,但是我会提到,如果您使用Homebrew,则可以使用以下命令 安装msmtp

brew install msmtp --with-macosx-keyring

然后剩下的只是设置相关的配置文件

首先是 /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

请注意,该tls_trust_file行应指向您从https://www.thawte.com/roots/index.html下载并安装证书的位置。

我将其放入,~/Dropbox/Thawte Roots以便可以在所有Mac上使用它。

然后,您需要一个~/.mailrc文件来说明msmtp二进制文件的位置。如果使用brew/usr/local/bin/msmtp,则文件将如下所示:

set sendmail="/usr/local/bin/msmtp"

最后但至关重要的一步是确保您的钥匙串具有与msmtp期望的格式完全相同的信息:

我认为这涵盖了大多数细节。如果需要更多详细信息,请参阅http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/


显然,以上脚本中的示例假定您使用的是Gmail,但也可以将其用于其他服务器。更改example@gmail.com为您的Gmail或Google Apps电子邮件地址。
TJ罗马

最终,我可以使用以下网址提供的Google Roots 使它起作用pki.google.com/roots.pem。如果您在信任文件和Gmail方面遇到问题,则可能会解除阻止您的权限。
密码规范

如果配置(msmtprc)文件的位置存在问题,请在macOS 10.13.3上使用Homebrew安装后,msmtp会在我的主目录中查找它: ~/.msmtprc
codewise

15

发送邮件的最基本方法是与提供商/网络的smtp服务器进行telnet会话。与服务器联系后,在执行每个命令之后,服务器将以“ 250 OK”之类的答案接受该命令,如果不接受则显示错误消息。

所有详细信息都可以在RFC2821-简单邮件传输协议Google中找到。这种基本方式非常适合测试发送邮件为什么会出错的问题,但是我认为编写完整的证明非常复杂。

首先,通过启动Terminal在计算机上获得命令行界面。然后一个接一个地继续以下命令。

打开一个到您的提供商/网络的smtp服务器端口25的telnet会话

telnet name_or_ip_of_smtp_server 25

打个招呼,加上您的提供商/网络的互联网名称,例如abc.com

EHLO name_of_your_network

需要from =返回地址,<和>是命令的一部分

MAIL FROM:<your_email_adress>

指定一个或多个目标,<和>是命令的一部分

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

告诉服务器您要开始发送数据

DATA

现在服务器应该回答您可以开始发送邮件并进入数据模式

your data
more data
etc

现在在一行上仅用点字符完成数据

.

服务器返回到命令模式,因此您可以退出

QUIT

13

这对我有用,它是在考虑Lion的情况下编写的,但适用于Mountain Lion。顺便说一句,这是使用Gmail,所以如果您不...

您无需下载任何内容!(只需设置一个Gmail帐户)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

为Gmail SMTP配置Postfix编辑文件/etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

并在注释掉的中继主机下面添加以下内容:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

如果尚不存在,则生成sasl_password

sudo vim /etc/postfix/sasl_passwd

并输入以下内容:

[smtp.gmail.com]:587 username@gmail.com:password

运行以下命令

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

您完成了……。
现在,您应该能够从命令行中发送电子邮件,例如,将目录的内容作为树发送到电子邮件地址

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

PS:从终端或在脚本中手动运行此程序时,我的工作效果很好。但是,在这一点上,我仍然遇到这样的问题:启动脚本时,永远不会发送邮件。我猜这与启动的作业设置有关。
强尼


+1感谢您添加此内容。真的帮助了我。我真正需要的只是main.conf中的relayhost条目(这是我自己的LAN上的SMTP服务器)。
boot13

3
以上内容可能已过时。我必须按照stackoverflow.com/a/26451135/197789添加“ smtp_sasl_mechanism_filter = plain” 才能使其正常工作。否则,我会收到“通用失败”错误。


0

您可能想要检出启用并配置OS X以便从命令行(使用您的输入)发送电子邮件的postfixconf

它基于在此处此处此处在Web上有详细记录的postfix配置。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.