21

我需要通过命令行发送电子邮件,而无需任何人工交互来实现自动化。

我知道我们可以使用 mailto 命令,但它会编写电子邮件、主题、正文和所有内容,但除非我单击发送,否则它不会发送。

我在网上阅读我们可以使用 blat 但我不能使用除 Outlook 以外的任何东西。

这是已关闭的帖子,我找到了指向 SOF 帖子的链接

仅供参考:我正在研究一些用于发送电子邮件的 telnet 命令,但也没有成功。 telnet 命令发送电子邮件

4

4 回答 4

25

选项 1
您没有对您的环境说太多,但假设您有可用的环境,您可以使用 PowerShell 脚本;一个例子是here。这个的本质是:

$smtp = New-Object Net.Mail.SmtpClient("ho-ex2010-caht1.exchangeserverpro.net")
$smtp.Send("reports@exchangeserverpro.net","administrator@exchangeserverpro.net","Test Email","This is a test")

然后,您可以按照此示例从命令行启动脚本:

powershell.exe -noexit c:\scripts\test.ps1

请注意,Windows 7 和 Windows Server 2008R2 上默认安装的 PowerShell 2.0 包含一个更简单的Send-MailMessage命令,使事情变得更简单。

选项 2
如果您准备使用第三方软件,一个选项类似于此 SendEmail 命令行工具。不过,这取决于您的目标环境;如果您将批处理文件部署到多台机器上,那显然每次都需要包含(但不是正式安装)。

选项 3
您可以直接从 VBA 脚本驱动 Outlook,然后您将从批处理文件触发;这将让您使用 Outlook 本身发送电子邮件,这看起来最接近您想要的。这有两个部分;首先,找出发送电子邮件所需的 VBA 脚本。网上有很多这样的例子,包括来自微软的这里。这个的本质是:

Sub SendMessage(DisplayMsg As Boolean, Optional AttachmentPath)
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment
    
    Set objOutlook = CreateObject("Outlook.Application")
    Set objOutlookMsg  = objOutlook.CreateItem(olMailItem)
    
    With objOutlookMsg
        Set objOutlookRecip = .Recipients.Add("Nancy Davolio")
        objOutlookRecip.Type = olTo
        ' Set the Subject, Body, and Importance of the message.
        .Subject = "This is an Automation test with Microsoft Outlook"
        .Body = "This is the body of the message." &vbCrLf & vbCrLf
        .Importance = olImportanceHigh  'High importance
        
        If Not IsMissing(AttachmentPath) Then
            Set objOutlookAttach = .Attachments.Add(AttachmentPath)
        End If
        
        For Each ObjOutlookRecip In .Recipients
            objOutlookRecip.Resolve
        Next
        
        .Save
        .Send
    End With
    Set objOutlook = Nothing
End Sub

/autorun然后,根据此答案从命令行使用参数启动 Outlook (根据需要更改路径/宏名):

C:\Program Files\Microsoft Office\Office11\Outlook.exe" /autorun macroname

选项 4
您可以使用与选项 3 相同的方法,但将 Outlook VBA 移动到 PowerShell 脚本(您可以从命令行运行)。这里的例子。这可能是最整洁的解决方案,IMO。

于 2013-03-15T13:18:26.970 回答
1

使用 VBScript 从命令行发送 SMS/文本消息!

如果 VBA 符合VB 脚本的规则,那么只需将其放入文本文件即可从命令行调用它 - 在这种情况下,无需专门打开 Outlook。

我需要从命令行向自己发送自动短信,所以我使用了下面的代码,这只是上面@Geoff答案的压缩版本。

全球大多数手机运营商都会提供您手机号码的电子邮件地址“版本”。 例如,在加拿大使用RogersChatr Wireless时,发送至<YourPhoneNumber> <code>@pcs.rogers.com的电子邮件将立即以短信形式发送至您的 Rogers/Chatr 手机。

* 您可能需要“授权”您手机上的第一条消息,并且一些运营商可能会为这些消息收取额外费用,尽管据我所知,所有加拿大运营商都免费提供这项鲜为人知的服务。查看您的运营商网站了解详情。

网上有进一步的说明和各种全球运营商的电子邮件到文本地址的汇编列表,例如thisthisthis


代码和说明

  1. 复制下面的代码并粘贴到您喜欢的文本编辑器中的新文件中。
  2. 使用带有.VBS扩展名的任何名称保存文件,例如TextMyself.vbs.

就这样!
只需双击该文件即可发送测试消息,或者使用START.

Sub SendMessage()
    Const EmailToSMSAddy = "3215551212@pcs.rogers.com"
    Dim objOutlookRecip
    With CreateObject("Outlook.Application").CreateItem(0)
        Set objOutlookRecip = .Recipients.Add(EmailToSMSAddy)
        objOutlookRecip.Type = 1
        .Subject = "The computer needs your attention!"
        .Body = "Go see why Windows Command Line is texting you!"
        .Save
        .Send
    End With
End Sub

示例批处理文件用法:

START x:\mypath\TextMyself.vbs

当然,有无数种可能的方式可以对其进行调整和定制,以适应各种实际或创造性的需求。

于 2018-11-15T13:42:08.510 回答
1

使用 Powershell,您可以发送电子邮件并将其集成到 Bat 文件脚本中。但是您需要在您的机器上为此安装 Outlook。这对我在本地 PC 上有效,但在服务器上无效。在服务器上,每次使用此命令时都会要求我授予权限,而且在服务器上安装 Outlook 可能不是许多人的首选。这在本地 PC 上运行时效果很好

$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "xyz@mail.com"
$Mail.Subject = "Action"
$Mail.Body ="Pay rise please"
$Mail.Send()
于 2021-09-24T07:17:45.210 回答
-5

您可以使用 cURL 和 CRON 在设定的时间运行 .php 文件。

这是 cURL 运行 .php 文件所需的示例:

curl http://localhost/myscript.php

然后设置 CRON 作业以运行上述 cURL:

nano -w /var/spool/cron/root
or
crontab -e

其次是:

01 * * * * /usr/bin/curl http://www.yoursite.com/script.php

有关更多信息,请查看这篇文章: https ://www.scalescale.com/tips/nginx/execute-php-scripts-automatically-using-cron-curl/

有关 cURL 的更多信息: PHP 中的 cURL 是什么?

有关 CRON 的更多信息:http: //code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs--net-8800

此外,如果您想了解如何在托管服务器上设置 CRON 作业,只需咨询您的主机提供商,他们可能有一个用于在 c-panel 中设置它的 GUI(例如http://godaddy. comhttp://1and1.com/

注意:从技术上讲,我相信您可以设置一个 CRON 作业来直接运行 .php 文件,但我不确定。

祝自动运行 PHP 好运:-)

于 2016-01-05T19:35:23.467 回答