我正在尝试通过Outlook 2010在VBA中从Excel 2010发送电子邮件.SO上的大多数其他答案似乎没有使用VBA执行此操作的任何方法,也不适用于Outlook / Excel 2010。
是否存在任何免费方法? Redemption方法不是一个可行的选择,除非它很容易安装在大公司内的10台机器上。
这就是我目前发送电子邮件的方式:
Dim emailAddr As String
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "xxxx@xxxx.edu"
.Subject = "Demande"
.HtmlBody = CombinedValueHtml
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
Exit Sub
提前感谢您的帮助。
答案 0 :(得分:2)
这是部分答案。我已将其作为社区Wiki的答案,期望其他人可以解释我无法工作的最后部分。
此网页http://msdn.microsoft.com/en-us/library/office/aa155754(v=office.10).aspx解释了该过程的前三个部分。它是在1999年编写的,因此无法完全遵循,因为它指的是旧版本的Windows和Office。
第一步是将 VBA项目的数字签名添加到Office安装中,尽管我在共享工具而不是Office工具下找到它。不要错误地将数字签名用于VBA项目添加到Outlook,因为我发现这意味着您要卸载Word,Excel等。
第二步是运行 Selfcert.exe 以您自己的名义创建数字证书。
第三步是打开Outlook的VBA编辑器,选择Tools然后选择Digital Certificate,然后选择用你的证书签署项目。
通过这些步骤,您可以禁止显示Outlook包含宏的警告,但这不会抑制宏正在访问电子邮件的警告。要禁止该警告,您需要执行第四步,即将证书放在受信任的根证书颁发机构存储中。此网页http://technet.microsoft.com/en-us/library/cc962065.aspx说明了证书颁发机构信任模型,但我无法成功使用 Microsoft管理控制台来实现第四步。
答案 1 :(得分:1)
相反.send
使用以下内容:
.Display 'displays outlook email
Application.SendKeys "%s" 'presses send as a send key
注意:使用显示键时要小心,如果在程序运行时移动鼠标并单击,它可以改变最新情况。前景也将显示在你的屏幕上并发送..如果你正在处理别的事情,这会困扰你,是的......不是最好的主意
答案 2 :(得分:0)
赎回方法不是一个可行的选择,除非它很容易 安装在一家大公司内的10台机器上。
您可以使用RedemptionLoader - 它直接加载dll并且不需要使用注册表安装dll。
另请参阅http://www.outlookcode.com/article.aspx?id=52了解所有选项 - 简而言之,它是C ++中的扩展MAPI或Delphi,Redemption(包装扩展MAPI并可以用于任何语言)或ClickYes之类的实用程序。
答案 3 :(得分:0)
如果您没有立即发送消息,只是显示它并让用户进行修改(如果有的话)并让他们按下发送按钮,这将有效:
即。使用
.Display
而不是
.Send
答案 4 :(得分:-1)
我解释了如何使用vba发送电子邮件answer你会发现我在日常工作中广泛使用的宏。
根据@Floern的推荐,以下是解释:
为了插入图像(签名为图像),您可以使用以下代码:
第1步。将此代码粘贴到类模块中并将该类模块命名为" MailOptions"
Private Message As CDO.Message
Private Attachment, Expression, Matches, FilenameMatch, i
Public Sub PrepareMessageWithEmbeddedImages(ByVal FromAddress, ByVal ToAddress, ByVal Subject, ByVal HtmlContent)
Set Expression = CreateObject("VBScript.RegExp")
Expression.Pattern = "\<EMBEDDEDIMAGE\:(.+?)\>"
Expression.IgnoreCase = True
Expression.Global = False 'one match at a time
Set Message = New CDO.Message
Message.From = FromAddress
Message.To = ToAddress
Message.Subject = Subject
'Find matches in email body, incrementally increasing the auto-assigned attachment identifiers
i = 1
While Expression.Test(HtmlContent)
FilenameMatch = Expression.Execute(HtmlContent).Item(0).SubMatches(0)
Set Attachment = Message.AddAttachment(FilenameMatch)
Attachment.Fields.Item("urn:schemas:mailheader:Content-ID") = "<attachedimage" & i & ">" ' set an ID we can refer to in HTML
Attachment.Fields.Item("urn:schemas:mailheader:Content-Disposition") = "inline" ' "hide" the attachment
Attachment.Fields.Update
HtmlContent = Expression.Replace(HtmlContent, "cid:attachedimage" & i) ' update the HTML to refer to the actual attachment
i = i + 1
Wend
Message.HTMLBody = HtmlContent
End Sub
Public Sub SendMessageBySMTP(ByVal SmtpServer, ByVal SmtpUsername, ByVal SmtpPassword, ByVal UseSSL)
Dim Configuration
Set Configuration = CreateObject("CDO.Configuration")
Configuration.Load -1 ' CDO Source Defaults
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpServer
'Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
If SmtpUsername <> "" Then
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = SmtpUsername
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SmtpPassword
End If
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = UseSSL
Configuration.Fields.Update
Set Message.Configuration = Configuration
Message.Send
End Sub
第2步。在标准模块中,您将详细说明.html内容并从类中实例化对象:
public sub send_mail()
Dim signature As String
dim mail_sender as new MailOptions 'here you are instantiating an object from the class module created previously
dim content as string
signature = "C:\Users\your_user\Documents\your_signature.png"
content = "<font face=""verdana"" color=""black"">This is some text!</font>"
content = content & "<img src=""<EMBEDDEDIMAGE:" & signature & " >"" />"
mail_sender.PrepareMessageWithEmbeddedImages _
FromAddress:="chrism_mail@blablabla.com", _
ToAddress:="addressee_mail@blablabla.com", _
Subject:="your_subject", _
HtmlContent:=content
'your_Smtp_Server, for example: RelayServer.Contoso.com
correos.SendMessageBySMTP "your_Smtp_Server", "your_network_user_account", "your_network_user_account_password", False
end sub