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

时间:2008-08-31 00:06:37

标签: email command-line

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

我正在寻找一种简单的方法来从Linux终端(可能是bash shell,但任何事情都应该这样做)以及在Windows上执行此操作的另一种方法。我希望能够在命令行上发送电子邮件,或者可以灵活地将消息传递到命令行程序中。你会怎么做呢?如果你有小脚本也可以。

8 个答案:

答案 0 :(得分:11)

$ 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

答案 1 :(得分:8)

您可以使用mail:

$mail -s <subject> <recipients>

然后键入消息并以仅包含句点的行结束消息。这表示您已完成并发送消息。

您也可以从STDIN管道发送电子邮件,它将作为电子邮件的文本发送:

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

使用此方法的一个小注意事项 - 除非您的计算机已连接到互联网并且您的DNS设置设置正确,否则您将无法收到对邮件的回复。要获得更强大的命令行计划,您可以链接到您的POP或IMAP电子邮件帐户,请查看pinemutt

答案 2 :(得分:4)

您也可以将此sendmail版本用于Windows。它使用非常简单,类似于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 :(得分:3)

如果您希望从Windows命令行执行此操作,可以在CMD提示符下使用名为blat的工具。

从PowerShell获得更多乐趣。由于PowerShell可以访问.NET Framework,因此您可以使用System.Net.Mail中的类来发送电子邮件。 PowerShell Community Script Repository上有一个示例脚本。

答案 4 :(得分:2)

IIRC您还必须配置邮件传输代理(MTA)以使用mail或大多数电子邮件库。 Sendmail是最知名的,但在配置方面却是真正的猪。 EximQmailPostfix都是比较现代的流行替代品。

还有更多轻量级MTA只能发送邮件,而不是接收邮件:nullmailer,mstmp,ssmtp等。

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

答案 5 :(得分:2)

以下是发送电子邮件的脚本的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)

答案 6 :(得分:1)

如果您想调用电子邮件程序,请参阅此文章:

How do I open the default mail program with a Subject and Body in a cross-platform way?

答案 7 :(得分: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