2008-08-31 120 views
15

我想从命令行快速发送电子邮件。我意识到可能有很多不同的方法来做到这一点。如何从命令行发送电子邮件?

我在寻找一个简单的方法来从Linux终端(可能是bash shell,但什么应该做的),并以另一种方式做到这一点在Windows上做到这一点。我希望能够在命令行上直接发送电子邮件,或者可以灵活地将消息传送到命令行程序中。你会如何去做这件事?如果你有小脚本,那也不错。

回答

8

您可以使用邮箱:

$mail -s <subject> <recipients> 

然后键入您的消息,以行t结束帽子只有一段时间。这表示您完成并发送消息。

你也可以管你的电子邮件,从标准输入,它会被作为电子邮件发送的文本:

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

一个小提醒这种方法 - 除非你的计算机连接到互联网,你的DNS设置设置正确,您将无法收到对消息的回复。对于一个更强大的命令行程序,你可以链接到您的POP或IMAP电子邮件帐户,检查出任何pinemutt

+0

。邮件不是标准的Windows命令。任何想法哪里\我如何得到它?谢谢! – 2013-06-18 08:56:37

11
$ echo "This is the email body" | mail -s "This is the subject" [email protected] 

或者:

$ cat | mail -s "A few lines off the top of my head" [email protected] 
This is where my 
multiline 
message would go 
^D 

^d - 指按CTRL + d

+2

可笑的无用的使用猫嗨:) – hop 2009-02-18 11:01:10

3

如果你正在寻找从Windows命令行做到这一点,有一个叫做blat工具,它可以从一个CMD提示符下使用。

距离PowerShell的详细一点乐趣。由于PowerShell可以访问.NET Framework,因此可以使用System.Net.Mail中的类发送电子邮件。 PowerShell Community Script Repository上有一个示例脚本。

2

IIRC,你还必须配置邮件传输代理(MTA)使用mail或大多数电子邮件库。 Sendmail是最知名的,但它是一个真正的猪,当涉及到配置。 EximQmailPostfix都是比较现代化的流行替代品。

还有更轻巧的MTA是唯一能发出邮件,不接受它:nullmailer,mstmp,ssmtp中,等

后缀是默认的Ubuntu。 This wiki article描述如何配置它 - 确保只允许从本地地址转发!

2

这里是一个脚本的电源外壳例如发送电子邮件:

$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 = "[email protected]" 
$objMailMessage.To.Add("[email protected]") 
$objMailMessage.Subject = "eMail subject Notification" 
$objMailMessage.Body = "Hello world!" 

$smtp.send($objMailMessage) 
4

你也可以使用这个sendmail版本的Windows。它使用起来非常简单,标准的类UNIX行为。快速。不需要任何安装,只需在系统上的任何位置调用EXE即可。

撰写的电子邮件:

echo To: [email protected], [email protected] >> the.mail 
echo From: [email protected] >> 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 
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 [email protected] test < message