Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA是否使用IBM Notes更改电子邮件地址?_Excel_Vba_Lotus Notes - Fatal编程技术网

Excel VBA是否使用IBM Notes更改电子邮件地址?

Excel VBA是否使用IBM Notes更改电子邮件地址?,excel,vba,lotus-notes,Excel,Vba,Lotus Notes,我有以下vba代码,它使用IBM Notes从excel发送电子邮件 但是,我希望能够更改发件人地址。 请问有人能告诉我哪里出了问题吗 私有子工作表_更改(ByVal目标作为范围) 如果不相交(目标,范围(“M:M”))则为零 如果Target.Cells.Count

我有以下vba代码,它使用IBM Notes从excel发送电子邮件

但是,我希望能够更改发件人地址。 请问有人能告诉我哪里出了问题吗

私有子工作表_更改(ByVal目标作为范围)

如果不相交(目标,范围(“M:M”))则为零
如果Target.Cells.Count<3,则
'将自动化所需的对象设置为lotus notes
作为字符串的Dim Ref
Dim TrueRef作为字符串
Ref=范围(“H”和(ActiveCell.Row)).Value
如果Ref=“WSM”,则
TrueRef=“WES”
其他的
如果Ref=“否”,则
TrueRef=“不”
其他的
如果Ref=“ENF”,则
TrueRef=“ENF”
其他的
如果Ref=“LUT”,则
TrueRef=“MAG”
其他的
如果Ref=“NFL”,则
TrueRef=“NOR”
其他的
如果Ref=“RUN”,则
TrueRef=“运行”
其他的
如果Ref=“SOU”,则
TrueRef=“SOU”
其他的
如果Ref=“SOU”,则
TrueRef=“SOU”
其他的
如果Ref=“BRI”,则
TrueRef=“BRI”
其他的
如果Ref=“LIV”,则
TrueRef=“LIV”
其他的
如果Ref=“BEL”,则
TrueRef=“BEL”
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
如果结束
''''''''''''''''''''''''''''''''''
作为字符串的Dim nMailBody
将主题设置为字符串
Dim nMailRecipient作为变体
将nMail作为对象
作为对象的会话
作为对象的数据库
将nMime作为对象
作为对象的Dim nMailStream
将卷尺设置为对象
将nSomeMailBodyText设置为字符串
Dim amountOfRecipients作为整数
nSomeMailBodyText=“你好,


你好吗?

” nMailSubject=“一封很棒的电子邮件” Set nSession=CreateObject(“Notes.NotesSession”) Set ndabase=nSession.GETDATABASE(“,”) 调用ndabase.OPENMAIL 设置nMail=ndabase.CREATEDOCUMENT nMail.Principal=“伪造_user@example.com" nMail.SendTo=“标记。obrien@lidl.co.uk" nMail.subject=“这是测试” nSession.CONVERTMIME=False 设置nMime=nMail.CREATEMIMEENTITY 设置nMailStream=nSession.CREATESTREAM 'vBody contient le texte au格式Html 调用nMailStream.WRITETEXT(nSomeMailBodyText) 调用nMailStream.WRITETEXT(“-再次-”) 调用nMailStream.WRITETEXT(nSomeMailBodyText) 调用nMailStream.WRITETEXT(
) 调用nMailStream.WRITETEXT(
) '----读取并粘贴签名------------------------------------- '获取标准签名位置 nSignatureLocation=ndabase.GETPROFILEDOCUMENT(“CalendarProfile”).GETITEMVALUE(“签名”)(0) 设置nChild=nMime.CREATECHILDENTITY 调用nChild.SETCONTENTFROMTEXT(nMailStream,“text/html;charset=iso-8859-1”,ENC_NONE) 调用nMailStream。关闭 nSession.CONVERTMIME=True '发送文档 nMail.PostedDate=Now()'获取要显示在“已发送邮件”文件夹中的邮件 nMail.SEND 0,收件人 如果结束 如果结束 端接头
NotesDocument.Send方法不允许经过身份验证的用户伪造发件人的发件人地址。在Domino服务器上运行的代码可以做到这一点,但您的代码是作为客户机连接的

有两种方法可以解决这个问题。我将提到第一个,但必须告诉您,IBM不支持它,也不推荐它,特别是对于Notes新手开发人员。它涉及将文档直接写入Domino路由器邮箱(mail.box),而不是使用NotesDocument.Send方法


第二种方法是使用Domino服务器上运行的代码发送电子邮件。一种方法是让代码将NotesDocument保存在Domino服务器上的数据库中,并在该数据库中设置后台代理,以便在创建新文档时运行。代理中的代码将设置Principal字段,我看到您已经尝试过了,但正如我前面所说的,当使用NotesDocument.send在客户端代码中运行时,它不起作用。还有很多其他的方法。

正如Richard已经说过的,你不能像那样从客户端欺骗发送者,除非你使用未记录的方法。我有一个邮件通知的Notes类(可以在我的博客上找到),但是Richard是正确的,因为作为初学者(根据您发布的代码,这一点非常清楚),您可能不应该尝试使用该方法

另一方面,为什么要使用这种复杂的方式来设置TrueRef的值? 您不能使用Select Case语句吗?甚至只是简化您的代码:

TrueRef = Ref
If Ref = "WSM" Then
    TrueRef = "WES"
ElseIf Ref = "LUT" Then
    TrueRef = "MAG"
ElseIf Ref = "NFL" Then
    TrueRef = "NOR"
End If

TrueRef = Ref
If Ref = "WSM" Then
    TrueRef = "WES"
ElseIf Ref = "LUT" Then
    TrueRef = "MAG"
ElseIf Ref = "NFL" Then
    TrueRef = "NOR"
End If
If Ref = "WSM" Then
    TrueRef = "WES"
ElseIf Ref = "LUT" Then
    TrueRef = "MAG"
ElseIf Ref = "NFL" Then
    TrueRef = "NOR"
Else
    TrueRef = Ref
End If