问题描述
我正在尝试使用 vbs 脚本发送邮件,但它不起作用.我正在使用服务器 smtp.gmail.com 和端口 587.奇怪的是,当我将端口更改为 25 时它可以工作.下面是我正在使用的代码:
I am trying to send a mail using a vbs script but it doesn't work. I am using server smtp.gmail.com and port 587. The weir thing is that this works when I change the port to 25. Below is the code I am using:
SMTPMail "to", "cc", "TEST", "TEST"
Function SMTPMail(ByVal sTo, ByVal sCc, ByVal sSubject, ByVal sBody)
Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network).
Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
Dim objMessage
set objMessage = CreateObject("CDO.Message")
objMessage.Subject = sSubject
objMessage.Sender = "sender"
objMessage.From = "from"
objMessage.To = sTo
objMessage.CC = sCc
objMessage.TextBody = sBody
'==This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
'Server port (typically 25)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "username"
'Your password on the SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update()
objMessage.Send()
End Function
提前谢谢你.
推荐答案
Gmail 用户可以在官方网站或使用第一方或第三方应用程序和服务来访问他们的帐户.第一方应用程序是例如 Google 的 Android 官方 Gmail 应用程序,而 Thunderbird 和 Windows 8 的邮件客户端应用程序是第三方应用程序.
Gmail users can access their account on the official website or by using first-party or third-party apps and services instead. A first party app is for instance Google's official Gmail app for Android, while Thunderbird and the mail client app of Windows 8 are third-party apps.
Google宣布回归2014 年 4 月,它将提高其服务的登录安全性,并影响任何向公司发送用户名和密码的应用程序.
Google announced back in April 2014 that it would improve the sign-in security of its services and affect any application sending usernames and passwords to the company.
该公司当时建议切换到 OAuth 2.0,但直到现在才强制执行.
The company suggested to switch to OAuth 2.0 back then but did not enforce it up until now.
如果您在 Google 的安全设置下打开新的不太安全应用页面,您会注意到默认情况下 Google 已禁用访问.
If you open the new less secure apps page under security settings on Google, you will notice that Google has disabled access by default.
注意:只有在您未使用 Google Apps 或为帐户启用了双重身份验证时,您才会看到该页面.
Note: You see the page only if you are not using Google Apps or have enabled two-factor authentication for the account.
您可以在此处拨动开关以再次启用安全性较低的应用程序,从而重新获得访问权限.
另一个使用的端口是 465 而不是 587因此,您可以使用端口 465
Another thing the port used is 465 and not 587So you can try out this vbscript that works for me using the port 465
EmailSubject = "Sending Email by CDO"
EmailBody = "This is the body of a message sent via" & vbCRLF & _
"a CDO.Message object using SMTP authentication ,with port 465."
Const EmailFrom = "[email protected]"
Const EmailFromName = "My Very Own Name"
Const EmailTo = "[email protected]"
Const SMTPServer = "smtp.gmail.com"
Const SMTPLogon = "[email protected]"
Const SMTPPassword = "gMaIlPaSsWoRd"
Const SMTPSSL = True
Const SMTPPort = 465
Const cdoSendUsingPickup = 1 'Send message using local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using SMTP over TCP/IP networking.
Const cdoAnonymous = 0 ' No authentication
Const cdoBasic = 1 ' BASIC clear text authentication
Const cdoNTLM = 2 ' NTLM, Microsoft proprietary authentication
' First, create the message
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = EmailSubject
objMessage.From = """" & EmailFromName & """ <" & EmailFrom & ">"
objMessage.To = EmailTo
objMessage.TextBody = EmailBody
' Second, configure the server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = SMTPLogon
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SMTPPassword
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = SMTPSSL
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
'Now send the message!
On Error Resume Next
objMessage.Send
If Err.Number <> 0 Then
MsgBox Err.Description,16,"Error Sending Mail"
Else
MsgBox "Mail was successfully sent !",64,"Information"
End If
这篇关于无法从 vbs 脚本使用 smtp.gmail.com、端口 587 发送邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!