发送没有SMTP服务器的电子邮件的VBScript?

时间:2016-02-24 16:17:28

标签: email vbscript

我尝试创建一个VBS脚本,当文件夹达到特定文件大小时发送警报电子邮件,但我似乎无法发送电子邮件。我收到此错误 - "传输无法连接到服务器"。有没有办法发送没有SMTP服务器的电子邮件或?

我出于个人原因改变了我的pswrd / email。

Const dirPath     = "C:\Users\tim.mcgee\Desktop\Offsite Drive"
Const alertedPath = "prevRun.txt"
      alertOn     = 3 * 2 ^ 29 '1.5GB
      resetOn     = alertOn * .95 'Approx 77MB
Const emailTo     = "**"
Const emailFrom   = "**"
Const emailSbjct  = "Offsite Drive Full"
Const emailMsg    = "The offsite drive has reached maximum capacity."
Const SMTPServer  = "Smtp.gmail.com"
Const SMTPPort    = 25
      emailUsr    = emailFrom 
Const emailPsswd  = "**"
Const emailSSL    = False


Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(alertedPath) Then
  alerted =  CBool(Trim(fso.OpenTextFile(alertedPath).ReadLine))
Else
  alerted = False
End If
dirSize = fso.GetFolder(dirPath).Size

If alerted Then 'Email previously sent
  alerted = dirSize > resetOn
ElseIf dirSize >= alertOn Then
  SendEmail
  alerted = True
End If

fso.OpenTextFile(alertedPath, 2, True).WriteLine CInt(alerted)
WScript.Quit 0

Sub SendEmail
  Const cfg = "http://schemas.microsoft.com/cdo/configuration/"
  With CreateObject("CDO.Message")
    .From                                  = emailFrom
    .To                                    = emailTo
    .Subject                               = emailSbjct
    .TextBody                              = emailMsg
    With .Configuration.Fields
      .Item(cfg & "sendusing")             = 2
      .Item(cfg & "smtpserver")            = SMTPServer
      .Item(cfg & "smtpserverport")        = SMTPPort
      .Item(cfg & "smtpconnectiontimeout") = 60
      .Item(cfg & "smtpauthenticate")      = 1
      .Item(cfg & "smtpusessl")            = emailSSL
      .Item(cfg & "sendusername")          = emailUsr
      .Item(cfg & "sendpassword")          = emailPsswd
      .Update
    End With
    .Send
  End With
End Sub

1 个答案:

答案 0 :(得分:0)

错误消息表示您的脚本无法连接到端口25上的smtp.gmail.com。现在,大多数ISP不允许端口25上的出站邮件作为垃圾邮件防范措施。您需要通过其中一个邮件中继发送,或者远程服务器必须接受其他端口上的邮件,通常是587(提交)或465(SMTPS,已弃用)。

由于您已拥有凭据,因此您应该将SMTPPort的值更改为587或465. Gmail应接受其中任何一个端口上的经过身份验证的邮件。

至于关于在没有SMTP服务器的情况下发送邮件的问题,在使用CDO时,您基本上有3个发送邮件的选项。您可以通过sendusing配置字段选择要使用的那个:

  • cdoSendUsingPickup(数值1):允许您发送邮件而无需指定SMTP服务器,但您必须在运行脚本的主机上安装SMTP服务器。使用此方法,邮件将通过提取文件夹提交到本地SMTP服务器。不需要身份验证,但必须将SMTP服务器配置为正确路由邮件。

    通常,当您使用本地SMTP服务器进行设置时,这些服务器配置为将所有拾取的邮件发送到中央邮件网关/集线器,以处理进一步的传送。

  • cdoSendUsingPort(数值2,默认值):允许您通过SMTP协议将邮件发送到任何SMTP服务器。还允许您提供显式凭据。使用此方法,您必须指定要将邮件发送到的SMTP服务器。

  • cdoSendUsingExchange(数值3):允许您通过域的Exchange服务器发送邮件。显然需要域和Exchange服务器。