使用windows中的visual basic发送带有附件的thunderbird电子邮件

时间:2015-02-22 22:30:06

标签: vba email thunderbird

我正在尝试使用Visual Basic从Visual Basic脚本发送电子邮件,不做任何用户操作。这个想法出现在下面的第一个参考文献中。

http://forums.mozillazine.org/viewtopic.php?f=39&t=540783

http://forums.mozillazine.org/viewtopic.php?t=203591

https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options#-options

脚本确实有效但我无法弄清楚如何包含附件。我对VB知之甚少,但在第一篇文章中,“和chr(34)(”我假设)的混合似乎很奇怪。此外,第一个和第三个参考文献之间的“mailto”和“to”之间的差异令人不安。

这是我尝试过的。

dim s
Set s = CreateObject("WScript.Shell")
s.run """thunderbird.exe""" & " -compose mailto:mdorl@wisc.edu? &subject=""send mail 3""&body=""nice body text""&attachment='file:///c:/Documents and Settings/Mike/My Documents/sendmail/vb/msg.txt'" 
WScript.Sleep 1000
s.SendKeys "^{ENTER}"
WScript.Sleep 1000 

这将编写并发送一封没有用户操作但没有附件的电子邮件。我在文件名周围尝试了单引号和双引号。

如果我将文件名更改为不存在的文件,则会发送没有附件的电子邮件但是实际发送邮件需要用户操作。

2 个答案:

答案 0 :(得分:2)

编辑了我的回答,因为我过去几周一直在学习一两件事;)

你需要一个撇号:和cc:包含多个收件人的列表 你还需要在你要发送的任何主体文本或附件周围加一个撇号

如果你把撇号放到你的VBA编辑器中,它只是将它注释掉,所以你可以通过使用Chr(39)

来逃避它

另外,正如文档所示,您需要 附件='文件:/// C:/test.txt' 其中包括file:///

我已经包含了一些我在下面工作的例子

Dim reportTB As Object
Set reportTB = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1


reportTB.Run "thunderbird.exe  -compose to=bfx_" & LCase(show) & "prod@base-fx.com,subject=[" & show & "] EOD Report " _
     & prjDate & ",body=" & Chr(39) & "Hi " & UCase(show) & "ers,<br><br>Today's end of day report is attached.<br>" & _
      "Any questions let me know.<br><br>Edi " & Chr(39) & ",attachment=" & Chr(39) & reportPath & Chr(39), windowStyle, waitOnReturn

希望有所帮助:)

答案 1 :(得分:0)

编写适当的程序。您无法使用mailto发送附件。该标准仅允许一个参数(尽管每个人都接受许多参数)。

Set emailObj      = CreateObject("CDO.Message")
emailObj.From     = "dc@gmail.com"

emailObj.To       = "dc@gmail.com"

emailObj.Subject  = "Test CDO"
emailObj.TextBody = "Test CDO"

emailObj.AddAttachment "C:/Users/User/Desktop/err.fff"

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")    = "dc"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")    = "Password1"
emailConfig.Fields.Update

emailObj.Send

If err.number = 0 then 
    Msgbox "Done"
Else
    Msgbox err.number & " " & err.description
    err.clear
End If