如何从命令行发送电子邮件?
我想从命令行快速发送电子邮件。我意识到可能有很多不同的方法可以做到这一点。
我正在寻找一种从linux终端执行此操作的简单方法(可能是bash shell,但应该执行任何操作),以及在Windows上执行此操作的另一种方法。我希望能够直接在命令行上发送电子邮件,或者可以灵活地将消息传递到命令行程序中。我们将如何去做?如果我们有小的脚本,那也很好。
解决方案
回答
$ 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
回答
我们可以使用邮件:
$mail -s <subject> <recipients>
然后,我们键入消息并以只有句点的行结尾。这表明我们已完成并发送消息。
我们还可以通过STDIN通过电子邮件发送电子邮件,该电子邮件将作为电子邮件的文本发送:
$<mail-generating-program> | mail -s <subject> <recipients>
使用此方法的一个小提示,除非计算机已连接到Internet且DNS设置正确,否则我们将无法收到对邮件的回复。对于更强大的命令行程序,我们可以链接到POP或者IMAP电子邮件帐户,签出pine或者mutt。
回答
如果要从Windows命令行执行此操作,则可以在CMD提示符下使用一个名为blat的工具。
从PowerShell中获得更多乐趣。由于PowerShell可以访问.NET Framework,因此可以使用System.Net.Mail中的类发送电子邮件。 PowerShell社区脚本存储库中有一个示例脚本。
回答
在IIRC中,我们还必须配置一个邮件传输代理(MTA)以使用mail
或者大多数电子邮件库。 Sendmail是最著名的,但是在配置方面却是真正的猪。 Exim,Qmail和Postfix都是比较流行的流行替代方法。
还有更轻量级的MTA,它们只能发送邮件而不能接收邮件:nullmailer,mstmp,ssmtp等。
Postfix是Ubuntu的默认设置。这篇Wiki文章描述了如何配置它,以确保仅允许从本地地址转发!
回答
如果要调用电子邮件程序,请参阅本文:
如何以跨平台方式打开带有主题和正文的默认邮件程序?
回答
这是一个用于发送电子邮件的脚本的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 = "[email protected]" $objMailMessage.To.Add("[email protected]") $objMailMessage.Subject = "eMail subject Notification" $objMailMessage.Body = "Hello world!" $smtp.send($objMailMessage)
回答
我们也可以在Windows中使用此sendmail版本。它是非常简单的,类似于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