Excel VBA使用IBM Notes从电子邮件地址更改?
问题描述:
我有以下vba代码,它使用IBM Notes从excel发送一封电子邮件。Excel VBA使用IBM Notes从电子邮件地址更改?
但是,我想能够改变从地址。 请问有人可以告诉我我要去哪里?
私人小组Worksheet_Change(BYVAL目标作为范围)
If Not Intersect(Target, Range("M:M")) Is Nothing Then
If Target.Cells.Count < 3 Then
'Set up the objects required for Automation into lotus notes
Dim Ref As String
Dim TrueRef As String
Ref = Range("H" & (ActiveCell.Row)).Value
If Ref = "WSM" Then
TrueRef = "WES"
Else
If Ref = "NAY" Then
TrueRef = "NAY"
Else
If Ref = "ENF" Then
TrueRef = "ENF"
Else
If Ref = "LUT" Then
TrueRef = "MAG"
Else
If Ref = "NFL" Then
TrueRef = "NOR"
Else
If Ref = "RUN" Then
TrueRef = "RUN"
Else
If Ref = "SOU" Then
TrueRef = "SOU"
Else
If Ref = "SOU" Then
TrueRef = "SOU"
Else
If Ref = "BRI" Then
TrueRef = "BRI"
Else
If Ref = "LIV" Then
TrueRef = "LIV"
Else
If Ref = "BEL" Then
TrueRef = "BEL"
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
''''''''''''''''''''''''''''''''''
Dim nMailBody As String
Dim nMailSubject As String
Dim nMailRecipient As Variant
Dim nMail As Object
Dim nSession As Object
Dim nDatabase As Object
Dim nMime As Object
Dim nMailStream As Object
Dim nChild As Object
Dim nSomeMailBodyText As String
Dim amountOfRecipients As Integer
nSomeMailBodyText = "<p>Hello,</p><br><p>How are you?</p>"
nMailSubject = "A great email"
Set nSession = CreateObject("Notes.NotesSession")
Set nDatabase = nSession.GETDATABASE("", "")
Call nDatabase.OPENMAIL
Set nMail = nDatabase.CREATEDOCUMENT
nMail.Principal = "[email protected]"
nMail.SendTo = "[email protected]"
nMail.subject = "This is test"
nSession.CONVERTMIME = False
Set nMime = nMail.CREATEMIMEENTITY
Set nMailStream = nSession.CREATESTREAM
'vBody contient le texte au format Html
Call nMailStream.WRITETEXT(nSomeMailBodyText)
Call nMailStream.WRITETEXT(" - and again - ")
Call nMailStream.WRITETEXT(nSomeMailBodyText)
Call nMailStream.WRITETEXT("<br>")
Call nMailStream.WRITETEXT("<br>")
'----- READ AND PASTE SIGNATURE -------------------------------------
'Get the standard signature location
nSignatureLocation = nDatabase.GETPROFILEDOCUMENT("CalendarProfile").GETITEMVALUE("Signature")(0)
Set nChild = nMime.CREATECHILDENTITY
Call nChild.SETCONTENTFROMTEXT(nMailStream, "text/html;charset=iso-8859-1", ENC_NONE)
Call nMailStream.Close
nSession.CONVERTMIME = True
'Send the document
nMail.PostedDate = Now() 'Gets the mail to appear in the sent items folder
nMail.SEND 0, Recipient
End If
End If
End Sub
答
正如理查德已经说过的那样,除非您使用这种未记录的方法,否则不能从客户端那里欺骗发件人。我有一个用于邮件通知的Notes类(可以在我的博客上找到),但是理查德是正确的,因为你作为初学者(根据你发布的代码很清楚)可能不应该尝试使用该方法。
在附注中,为什么使用这种复杂的方式来设置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
或
If Ref = "WSM" Then
TrueRef = "WES"
ElseIf Ref = "LUT" Then
TrueRef = "MAG"
ElseIf Ref = "NFL" Then
TrueRef = "NOR"
Else
TrueRef = Ref
End If
答
的NotesDocument.Send方法不允许已验证的欺骗发送者的发送地址。在Domino服务器上运行的代码可以做到这一点,但是你的代码是作为客户端连接的。
这是两种解决方法。我会提到第一个,但是必须告诉你它不被IBM支持,不推荐 - 尤其是对于新手Notes开发人员。它涉及将文档直接写入Domino路由器邮箱(mail.box),而不是使用NotesDocument.Send方法。
第二种方法是使用在Domino服务器上运行的代码发送电子邮件。做到这一点的一种方法是让代码将NotesDocument保存在Domino服务器上的数据库中,并在该数据库中设置一个后台代理,该代理设置为在创建新文档时运行。代理中的代码会设置Principal字段,我发现您已经尝试过 - 但正如我上面所说的,在使用NotesDocument.send在客户端代码中运行时,它不起作用。还有很多其他的方法。