通过outlook从命令行发送电子邮件,而无需单击“发送”

时间:2013-03-15 13:02:25

标签: command-line automation outlook

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

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

我在线阅读我们可以使用blat但我不能使用除outlook之外的任何东西。

这是我发现Link to SOF post后已关闭的帖子。

仅供您参考:我正在研究一些telnet命令来发送电子邮件尚未成功。 telnet commands to send email

3 个答案:

答案 0 :(得分:21)

选项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")

然后,您可以根据this example从命令行启动脚本:

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

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

选项2
如果您准备使用第三方软件,则行this SendEmail command-line tool。但这取决于您的目标环境;如果您要将批处理文件部署到多台计算机上,那么每次都需要包含(但不是正式安装)。

选项3
您可以直接从VBA脚本驱动Outlook,而VBA脚本又会从批处理文件触发;这将允许您使用Outlook本身发送电子邮件,这看起来最接近您想要的。这有两个部分;首先,弄清楚发送电子邮件所需的VBA脚本。这里有很多这样的例子,包括微软here。其实质是:

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

然后,根据this answer(根据需要更改路径/ macroname),使用/autorun参数从命令行启动Outlook:

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

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

答案 1 :(得分:1)

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

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

我需要从命令行向自己发送自动文本消息,因此我使用了下面的代码,该代码只是上面@Geoff的answer的压缩版本。

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

* 您可能需要“授权”手机上的第一则消息,尽管据我所知,所有加拿大运营商都会提供这些消息的额外费用这项鲜为人知的服务是免费的。检查运营商的网站以获取详细信息。

在线上提供了更多说明以及全球运营商的电子邮件到文本地址的各种汇总列表,例如thisthisthis。< / p>


代码和说明

  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

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

答案 2 :(得分:-4)

您可以使用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的更多信息: What is cURL in PHP?

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

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

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

运行自动PHP好运: - )