【问题标题】:How do I send an email from a DOS batch command?如何从 DOS 批处理命令发送电子邮件?
【发布时间】:2010-07-20 12:59:39
【问题描述】:

我在 DOS 中有一个批处理文件,它会进行一些检查,完成后我需要发送一封电子邮件。我在 interwebz 上找到了一些解决方案,但其中大多数是第 3 方,或者只是在 Outlook 中打开一条新消息。我需要该命令在没有任何人工交互的情况下完整发送电子邮件。

如果重要的话,我们在这里使用 MS Exchange。

谢谢!

【问题讨论】:

  • 这个问题真的是关于 MS-DOS(它没有 Telnet 客户端)还是应该重新标记为“Win32-command-line”或类似的东西?
  • 你有一个有效的点。我会给它添加一个命令行标签。
  • 你也可以去掉“DOS”标签吗?提到这个问题也指的是 Windows NT 也没什么坏处。
  • 原来我可以重新标记这个问题。我删除了“DOS”并添加了“Windows”。

标签: windows command-line batch-file cmd


【解决方案1】:

假设:

  1. 您的 Exchange 服务器通过端口 25 上的 SMTP 接受电子邮件。
  2. 您想发送一封没有附件的纯文本电子邮件。
  3. 可以从批处理文件驱动 telnet(或类似的 telnet 客户端)。

您可以通过 Telnet 发送一封简单的电子邮件。此链接显示了如何执行此操作的示例:http://www.yuki-onna.co.uk/email/smtp.html

如果假设 2 或 3 错误,您可以编写一个命令行 SMTP 客户端,以便以多种语言相当轻松地发送简单电子邮件,然后从您的批处理文件中调用它。

【讨论】:

  • 经过一番摸索,在我的场景中似乎 3 不正确。我将创建一个简单的 VB6 EXE 来处理我的电子邮件。感谢您的指导。
  • 在 VB.NET 中编写一个通过 SMTP 发送电子邮件的控制台应用程序非常容易。 VB6 可能更具挑战性。
  • @Avalanchis @Honus 如果是 VB6,我记得看到一个免费的帮助程序 dll,似乎被称为 vbSendMail.dll,可以在这里找到 freevbcode.com/ShowCode.Asp?ID=109。我有一些很久以前使用它的记忆,但不确定所以可能完全不同。不过可能值得一看。
【解决方案2】:

试试

http://sourceforge.net/projects/blat/

这是一个来自 SourceForge 的开源邮件程序,有很多选项。

【讨论】:

    【解决方案3】:

    试试http://caspian.dotconf.net/menu/Software/SendEmail/

    它是第三方实用程序,但您可以轻松地从批处理文件中调用它。我愿意。我和你有同样的需求:在批处理文件末尾发送电子邮件,无需人工干预。

    【讨论】:

      【解决方案4】:

      如果您的主机操作系统有 PowerShell,您可以从 CMD.EXE 作为单行(有效)完成此操作,而无需 incurring script-execution privilege blocking,只需执行以下操作:

      powershell -command $S=New-Object Net.Mail.SmtpClient('your.smtp.server',port);$S.Send('addr-from','addr-to','subject','body')
      

      用 ; 连接行并作为单个 PS 命令执行可避免检查/设置脚本执行。当然,在 CMD.EXE 中单个命令字符串的长度有一个limitation,因此这种精确的技术对收件人的数量、主题和正文的大小等有一些限制,但是有一些方法可以解决这个问题,我敢肯定,其他地方也有报道。

      当然,我对它的使用更加健壮,被包装在一个 .BAT 中,将其变成一个实用程序(非常适合锁定 Windows 主机上的低摩擦脚本),具有参数检查、错误处理、日志记录等功能. 发疯。

      如果您的 SMTP 服务器需要身份验证,您可以根据需要添加 additional necessary configuration of the SmtpClient,这当然会进一步限制长度。

      编辑:在$S.Send 之前插入以添加身份验证:

      $S.EnableSsl=$true;$S.Credentials=New-Object System.Net.NetworkCredential('usr', 'pass');
      

      【讨论】:

        【解决方案5】:
        powershell -command $S=New-Object Net.Mail.SmtpClient('your.smtp.server',port);$S.Send('addr-from','addr-to','subject','body')`
        

        这对我有用

        但我必须向多个收件人发送带有附件的电子邮件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-07
          • 1970-01-01
          • 2013-04-16
          • 2011-06-11
          • 2012-02-20
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多