19

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

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

4

8 回答 8

14
$ 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

于 2008-08-31T00:11:36.247 回答
10

您可以使用邮件:

$mail -s <subject> <recipients>

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

您还可以通过 STDIN 管道输入您的电子邮件,它将作为电子邮件文本发送:

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

使用这种方法的一个小提示 - 除非您的计算机已连接到 Internet 并且您的 DNS 设置设置正确,否则您将无法收到对您的消息的回复。对于更强大的命令行程序,您可以链接到您的 POP 或 IMAP 电子邮件帐户,请查看pinemutt

于 2008-08-31T00:12:15.323 回答
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
于 2010-03-19T14:08:15.513 回答
3

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

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

于 2008-08-31T00:41:34.490 回答
2

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

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

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

于 2008-08-31T01:38:03.900 回答
2

这是发送电子邮件的脚本的 Power Shell 示例:

$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)
于 2009-04-29T21:45:37.713 回答
1

如果要调用电子邮件程序,请参阅这篇文章:

如何以跨平台的方式打开带有主题和正文的默认邮件程序?

于 2008-08-31T01:57:50.140 回答
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
于 2011-08-04T09:08:47.960 回答