使用 excel VBA 从错误的电子邮件地址发送 IBM Lotus Notes 电子邮件

Sending IBM Lotus Notes email using excel VBA sends from wrong email address

我目前有两个 Lotus Notes 数据库,每个数据库都有自己的关联电子邮件地址。正如预期的那样,当我通过第一个数据库向我的 gmail 帐户发送电子邮件时,它显示为 "From: notesAccount1@db1.com",而当我使用第二个数据库发送时,该邮件在我的 gmail 中显示为 "From: notesAccount2@db2.com"。

我有打开 第二个数据库 的工作代码,在收件箱中搜索包含特定关键字的电子邮件,并从该电子邮件中提取电子邮件地址。然后它在第二个数据库中创建一个新文档,插入收件人姓名、主题、正文等,发送电子邮件,并将其保存到我的已发送文件夹中。至此一切顺利。

但是,当我使用这种 VBA 方法从第二个数据库向我的 gmail 帐户发送电子邮件时,该电子邮件在我的 gmail 中显示为 "From: notesAccount1@db1.com" - 与第一个数据库关联的电子邮件.

我不明白为什么会这样。对 VBA 和 Lotus Notes 之间的交互以及 Lotus Notes servers/databases 之间的交互的了解非常有限。 从技术上讲,第一个数据库是我的默认数据库,只有我可以访问,第二个数据库是后来添加的,多人可以访问它。我不知道这是否相关。

非常感谢任何帮助!谢谢。

注意:此代码是从多个来源复制和改编的,包括一些关于 SO、IBM 和其他 Notes 来源的内容,以及任何其他 Google 给我的方法,包括 http://www.fabalou.com/vbandvba/lotusnotesmail.asp

http://www-01.ibm.com/support/docview.wss?uid=swg21178583

代码:(由于我已经取出服务器名称和邮件文件名称,因此必须进行修改)

Sub ReadNotesEmail()

Dim sess As Object
Dim db As Object
Dim folder As Object
Dim docNext As Object
Dim memoSenders As Variant
Dim newEmail As Object
Dim view As Object
Dim entry As Object
Dim entries As Object
Dim templateEmail As Object

Dim mailServer As String
Dim mailFile As String
Dim folderName As String
Dim todayDate As String
Dim memoBody As String
Dim senderEmail As String

Dim emailStartPos As Integer
Dim emailEndPos As Integer

'This program will search a particular folder in a Notes database that I designate.
'It will search that folder for emails that contain certain key words. Once it finds
'an email that fits, it will grab the sender's email address (written in the body, not
'in the 'from') and send them an email.

'Name of folder to search for emails
folderName = "($Inbox)"

'Create a Lotus Notes session and open it (will require password)
Set sess = CreateObject("Lotus.NotesSession")
sess.Initialize ("")

'Set the mail server, mail file, and database. This will be the tricky part as I need this to
'look at the second mail server as opposed to the default mail server of jdyagoda
Set db = sess.GETDATABASE("***name of second Notes server***", "***name of second mail file***")

'Open the mail database in notes
If Not db.IsOpen = True Then
    Call db.Open
End If
Set folder = db.GetView(folderName)

'Now look through the emails one at a time with a loop that ends when no emails are left.
'If an email contains the key word, look for the email address of the person who submitted
'the contact-us form. It follows the string "Email:" and preceeds
'the string "Phone:".
Set doc = folder.GetFirstDocument
Do Until doc Is Nothing
    Set docNext = folder.GETNEXTDOCUMENT(doc)
    memoBody = LCase(doc.GetItemValue("body")(0))
    If (memoBody Like "*") Then 'This is where you designate the keyword

        'Here's where you extract the email address - taken out for the purpose of this SO question
        'senderEmail = testName@test.com

        'Now create a new email to the intended recipient

        Set newEmail = db.CREATEDOCUMENT
        Call newEmail.ReplaceItemValue("Form", "Memo")
        Call newEmail.ReplaceItemValue("SendTo", senderEmail)
        Call newEmail.ReplaceItemValue("Subject", "Thank you for your email")
        Call newEmail.ReplaceItemValue("body", "Test Body 1. This is a test.")
        newEmail.SAVEMESSAGEONSEND = True

        'Send the new email

        Call newEmail.ReplaceItemValue("PostedDate", Now()) 'Gets the mail to appeaer in the sent items folder
        Call newEmail.SEND(False)

    End If
    Set doc = docNext
Loop

End Sub

Notes 通常会使用您用于登录的 ID 的电子邮件地址发送邮件。因此,如果您使用 notesAccount1/Domain 登录,那么所有电子邮件都将来自 notesAccount1@example.com。 如果你想伪造发件人,你需要使用一个未记录的方法:将电子邮件直接注入 mail.box。 除非您真的知道自己在做什么,否则不应尝试这样做。

我已经在我的博客上发布了用于邮件通知的代码 class,它支持将发件人设置为外发电子邮件的解决方法。您可以在 http://blog.texasswede.com/updated-mailnotification-class-now-with-html-email-support-and-web-links/

找到最新代码