我是脚本编写新手,我正在 openoffice 中创建一个自动化任务,我对原始的基本语言有疑问,但我发现一个用 vba 编写的 excel 宏可以满足我现在的需要,我正在尝试将其转换为可用的vbscript 可以从命令提示符执行,类似于 email.vbs mailto subject filetoattach
Dim cdoMsg As New CDO.Message
With cdoMsg
With .Configuration.Fields
.Item(cdoSendUsingMethod).Value = cdoSendUsingPort
.Item(cdoSMTPUseSSL).Value = True
.Item(cdoSMTPServerPort).Value = 465
.Item(cdoSMTPServer).Value = "smtpserver"
.Item(cdoSendUserName).Value = "[email protected]"
.Item(cdoSendPassword).Value = "mypass"
.Item(cdoSMTPAuthenticate).Value = cdoBasic
.Update
End With
.From = "myemail"
.To = "emailto"
.Subject = "Some more really spiffy mail for you!"
.TextBody = "please find attachment"
.AddAttachment App.Path & "attachment"
On Error Resume Next
.Send
End With
If Err.Number <> 0 Then
MsgBox "CDO error " & Hex$(Err.Number) & vbNewLine & Err.Description, _
vbOKOnly Or vbExclamation, _
Caption
Else
MsgBox "Mail sent!", vbOKOnly, Caption
End If
VBScript 没有内置常量,因此您必须在 VBA 的对象浏览器(Excel 中的 Alt + F11 - F2)中查看常量并使用数字。 VBScript 中只有一种数据类型,因此不能将任何内容变暗(例如,仅
Dim x as string
Dim x
)。 VBscript 只能后期绑定,所以没有 Dim cdoMsg As New CDO.Message
- 必须 set cdomsg = CreateObject("cdo.message")
。
VBScript 一点也不粗糙。
字段的默认值取自 Outlook Express 或 Windows Mail,但在 Windows 10 上未设置,因为它没有这两个程序中的任何一个。
这是最低限度的
Set emailObj = CreateObject("CDO.Message")
emailObj.From = "[email protected]"
emailObj.To = "[email protected]"
emailObj.Subject = "Test CDO"
emailObj.TextBody = "Test CDO"
emailObj.AddAttachment "c:\windows\win.ini"
Set emailConfig = emailObj.Configuration
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Username"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Password"
emailConfig.Fields.Update
emailObj.Send
If err.number = 0 then Msgbox "Done"
如果使用 wscript,在 Windows 中启动的语法是;
wscript.exe "C:\path\example.vbs" "your email address" "who your sending it to" "your subject" "your body text & vbCRLF & for new line" "c:\path\attachment"
“”是必需的,因为顺序中的空格,如果路径中存在空格,窗口会发送错误
dim mailto
dim mailfrom
dim subject
dim body
dim attachment
mailfrom = WScript.Arguments.Item(0)
mailto = WScript.Arguments.Item(1)
subject = WScript.Arguments.Item(2)
body = WScript.Arguments.Item(3)
attachment = WScript.Arguments.Item(4)
Set emailObj = CreateObject("CDO.Message")
emailObj.From = mailfrom
emailObj.To = mailto
emailObj.Subject = subject
emailObj.TextBody = body
emailObj.AddAttachment attachment
Set emailConfig = emailObj.Configuration
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mysmtp.com"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "myUsername"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "myPassword"
emailConfig.Fields.Update
emailObj.Send
If err.number = 0 then Msgbox "email sent"
这是使用 VBS 发送带附件的电子邮件的方法:
Function sendEmail()
filePath = "C:\Users\shubham\OneDrive\Pictures\Camera Roll\myImage.jpg"
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Your VBS EMAIL"
objMessage.From = "[email protected]"
objMessage.To = "[email protected]"
objMessage.AddAttachment filePath
objMessage.TextBody = "My Text"
Set objConfig = objMessage.Configuration
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "serverXXXXX.web-XYZABC.com"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "MYPASSWORD_XXXXXXXX"
'Server port (typically 25)
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
objConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objConfig.Fields.Update
objMessage.Send
End Function
sendEmail()