繁体   English   中英

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

[英]Sending Lotus/IBM Notes email from Excel VBA - embedded chart image and attachment, specify From address

我是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 Team Mailbox项目的代码以获取更多详细信息。 但是,这样做通常不会完全从邮件中删除发件人的信息。 (根据Notes和Domino版本的不同,它可能会有所不同,但是Notes从未与这种方式的欺骗尝试完全配合。)

如果您想完全隐藏发件人的身份,最有效的方法是使用服务器上运行的代理来发送消息-或者在您的情况下,重新发送该消息。 可以使用通用的Notes ID代替开发人员或服务器的ID来对代理进行签名,因此,当实际发送到实际接收者时,最终用户就不再是该过程的一部分。 在您的情况下,您可以通过创建一个邮寄数据库并将VBA代码从Call UIdoc.inserttext(mailTo)更改为Call UIdoc.inserttext("My mail-in database name goes here")但是您还将必须将您的mailTo价值放在某处,否则代理将不知道将其重新发送到哪里。 您可以通过添加如下代码行来做到这一点:

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

可以将您的代理设置为在新邮件到达邮件数据库后运行,然后可以通过删除 From和ReplyTo和INETFrom(如果存在-参见此处 )项并设置 SendTo和Principal和INETFrom字段。 省略代理的基本框架代码( 此处为一些示例),并假设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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM