创建一个vbs脚本函数用于发送带有附件的电子邮件

问题描述 投票:0回答:3

我是脚本编写新手,我正在 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
3个回答
1
投票

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"

0
投票

如果使用 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"

0
投票

这是使用 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()
© www.soinside.com 2019 - 2024. All rights reserved.