从Excel VBA发送Lotus/IBM Notes电子邮件-嵌入图表图像和附件,指定发件人地址



我是Notes环境的新手,所以我花了很多时间阅读这里和其他论坛,试图学习如何通过Lotus/IBM Notes对电子邮件进行VBA处理。

似乎有两种主要方法;我使用NotesUI方法,因为电子邮件的要求之一是嵌入Excel工作表的一部分图像,以及附加文件本身。

在这个阶段,我有一些功能代码,可以通过运行宏的人的电子邮件地址实现这一点(通常情况下!)。我不能对此表示任何赞扬——这是出于感激从网上借来的。

但是,该团队有一个共享的电子邮件帐户,我希望通过该帐户发送电子邮件。

我已经看到了一些关于Principal的讨论,并且能够指定FromName,但到目前为止我还无法实现最后一部分。

下面是我用来成功发送带有附件和工作表一部分图像的电子邮件的代码,以及如何修改现有代码以从另一个电子邮件地址发送的提示,我们将非常欢迎!

    Sub SendEmbedMail(mailTo As String, stSubject As String, _
        copyData As Range, Optional msgBeforeEmbed As String, _
        Optional msgAfterEmbed As String, Optional attachFile As Workbook)
    Dim Notes As Object, db As Object, WorkSpace As Object
    Dim UIdoc As Object, UserName As String, MailDbName As String
    Dim AttachMe As Object, EmbedObj As Object
    'Create & Open New Document
    Set WorkSpace = CreateObject("Notes.NotesUIWorkspace")
    Call WorkSpace.COMPOSEDOCUMENT(, , "Memo")
    Set UIdoc = WorkSpace.CURRENTDOCUMENT
    Call UIdoc.inserttext(mailTo)
    Call UIdoc.gotofield("Body")
    Call UIdoc.inserttext(msgBeforeEmbed)
    copyData.CopyPicture
    Call UIdoc.Paste
    Call UIdoc.inserttext(msgAfterEmbed)
    Call UIdoc.gotofield("Subject")
    Call UIdoc.inserttext(stSubject)
    If Not attachFile Is Nothing Then
        Set AttachMe = UIdoc.Document.CreateRichTextItem("Attachment")
        Set EmbedObj = AttachMe.EmbedObject(1454, vbNullString, _ 
                  attachFile.FullName, "Attachment")
    End If
    Call UIdoc.Send(0, mailTo)
    End Sub

将文档直接写入服务器的mail.box文件通常被用作此问题的解决方案。请参阅此问题的第一个答案,并查看OpenNTF团队邮箱项目的代码以了解更多详细信息。不过,这样做通常不会从邮件中完全删除发件人的信息。(根据Notes和Domino版本的不同,它可能会有所不同,但Notes从未完全配合过以这种方式进行的欺骗尝试。)

如果你想完全隐藏发件人的身份,最有效的方法是使用服务器上运行的代理来发送邮件,或者在你的情况下,重新发送邮件。代理可以用通用的Notes id签名,而不是用开发人员或服务器的id签名,所以当实际发送给实际收件人时,最终用户并不是这个过程的一部分。在您的情况下,您可以通过创建一个mail-In数据库并将VBA代码从Call UIdoc.inserttext(mailTo)更改为Call UIdoc.inserttext("My mail-in database name goes here")来实现这一点,但您也必须将mailTo值放在某个位置,否则代理将不知道将其重新发送到哪里

Call UIdoc.Document.ReplaceItemValue("actualRecipient",mailTo)

您的代理可以设置为在新邮件到达mail-in数据库后运行,然后它可以通过删除From、ReplyTo和INETFrom(如果存在-请参阅此处)项,并设置SendTo、Principal和INETForm字段来清理邮件。省略了代理的基本框架代码(这里有一些示例),并假设doc是包含您正在重新发送的NotesDocument的变量,代理的实际工作部分可能类似于以下内容:

doc.RemoveItem("From")
doc.RemoveItem("InetFROM")
doc.RemoveItem("ReplyTo")
if doc.hasItem("actualRecipient") then
  doc.ReplaceItemValue("SendTo",doc.actualRecipient(0))
  doc.RemoveItem("actualRecipient")
else
' here you'll want to do something sensible if a message arrives in the mail-in
' database but it doesn't have an actualRecipient; i.e., it wasn't sent by your
' VBA code!
End if
Call doc.ReplaceItemValue("Principal","support@company.com@Your Notes Domain Goes Here <support@company.com>")
Call doc.ReplaceItemValue("INETFrom", "support@company.com")
Call doc.Send()

您也可以使用后端类(而不是UI)来实现这一点。我写了一个课程来帮助创建电子邮件,其中包括将"从地址"更改为您喜欢的任何内容:http://blog.texasswede.com/lotusscript-mail-notification-class/

你只需要添加一个在文本中插入图片的方法,你可以使用Thomas Hampel在http://blog.tomcat2000.com/blog/tomcat2000.nsf/dx/notesapi-import-pictures-into-richtext-fields-using-backend-classes.htm.

最新更新