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

21

我想要从命令行快速发送电子邮件。我知道可能有很多不同的方法。

我正在寻找一种简单的方法,在Linux终端(可能是bash shell,但任何一种都可以)上实现这一点,并在Windows上实现另一种方法。我希望能够直接在命令行上撰写电子邮件,或者具备将消息导入命令行程序的灵活性。 您会如何处理?如果您有小脚本也可以。

8个回答

15
$ echo "This is the email body" | mail -s "This is the subject" me@email.com

或者:

$ cat | mail -s "A few lines off the top of my head" me@here.com
This is where my
multiline
message would go
^D

^D - 表示按下ctrl+d


2
愚蠢无用的cat命令 :) - user3850

11

您可以使用电子邮件:

$mail -s <subject> <recipients>

接着,你输入你的消息并以只有一个句号的行作为结尾。这将表示你已经完成并发送了消息。

你也可以从标准输入中导入电子邮件,然后它将被发送为电子邮件文本:

$<mail-generating-program> | mail -s <subject> <recipients>

这种方法需要注意的一点是 - 除非您的计算机连接到互联网并且您的DNS设置正确,否则您将无法接收到消息的回复。如果您想要一个更强大的命令行程序,可以链接到您的POP或IMAP电子邮件帐户,请查看pinemutt


嗨。Mail不是标准的Windows命令。你有任何想法在哪里或如何获取它吗?谢谢! - Eugene S
1
@EugeneS 这是一个标准的Linux命令,所以它可能在Cygwin http://www.cygwin.com 中。 - Kyle Cronin

4
您也可以使用Windows版本的sendmail。它非常易于使用,具有标准的类UNIX行为,速度快,并且不需要任何安装,只需在系统中调用EXE即可。
编写电子邮件:
echo To: you@example.com, me@example.com >> the.mail
echo From: them@example.com >> the.mail
echo Subject: This is a SENDMAIL notification >> the.mail
echo Hello World! >> the.mail
echo This is simple enough. >> the.mail
echo .>> the.mail

发送文件:

\usr\lib\sendmail.exe -t < the.mail

type the.mail | C:\Projects\Tools\sendmail.exe -t

3
如果您想从Windows命令行执行此操作,可以使用一个称为blat的工具来自CMD提示符。 从PowerShell来看会更有趣。由于PowerShell可以访问.NET Framework,因此可以使用System.Net.Mail中的类发送电子邮件。在PowerShell Community Script Repository上有一个示例脚本。

2
以下是一个PowerShell发送电子邮件的脚本示例:

以下是一个PowerShell发送电子邮件的脚本示例:

$smtp = new-object Net.Mail.SmtpClient("mail.example.com")

if( $Env:SmtpUseCredentials -eq "true" ) {
    $credentials = new-object Net.NetworkCredential("username","password")
    $smtp.Credentials = $credentials
}
$objMailMessage = New-Object System.Net.Mail.MailMessage
$objMailMessage.From = "script@mycompany.com"
$objMailMessage.To.Add("you@yourcompany.com")
$objMailMessage.Subject = "eMail subject Notification"
$objMailMessage.Body = "Hello world!"

$smtp.send($objMailMessage)

2
据我所知,您还需要配置邮件传输代理(MTA)才能使用mail或大多数电子邮件库。 Sendmail是最著名的,但在配置方面非常困难。 EximQmailPostfix都是更现代的流行替代品。
还有一些更轻量级的MTA仅能发送邮件,而无法接收邮件:nullmailer,mstmp,ssmtp等。
Ubuntu的默认MTA是Postfix。 此维基文章描述了如何配置它-请确保只允许从您的本地地址进行转发!

1

如果您正在使用Linux服务器,但邮件不可用(这可能是共享服务器的情况),您可以编写一个简单的PHP / Perl / Ruby(取决于可用的内容)脚本来完成相同的操作,例如:

#! /usr/bin/php
<?php

if ($argc < 3) {
    echo "Usage: " . basename($argv[0]) . " TO SUBJECT [CC]\n";
    exit(1);
}

$message = file_get_contents('php://stdin', 'r');
$headers = $argc >= 4 ? "Cc: $argv[3]\r\n" : null;

$ret = mail($argv[1], $argv[2], $message, $headers);

exit($ret ? 0 : 1);

然后按照以下方式调用:

mail me@example.com test < message

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接