【发布时间】:2022-01-22 20:26:13
【问题描述】:
使用以下功能,我可以选择通过 IBM Notes 从 Excel 发送电子邮件。基本上,它工作得很好。但是,我最近不得不修改代码,因为消息文本总是插入到 IBM Notes 签名下。我能够解决这个问题,但不幸的是现在出现了两个我以前没有的问题。
感谢每一个提示和每一个帮助!
UPDATE 21.12.2021 21:30: @Tode 我已按照您的指示进行操作,但问题仍然存在。可能是我没有按正确的顺序排列代码行吗?
问题
“保存”功能不再起作用,即如果我不想要,IBM Notes 还会将电子邮件保存在“已发送”文件夹中(参数 blnSaveEMail = false)。
第二个问题与我的工作环境有关:我有两个电子邮件帐户。个人服务电子邮件地址 jdoe@company.com(邮件文件:jdoe.nsf)和分支机构电子邮件地址 mybranch@company.de(邮件文件:mybranch.nsf)。据我所知,两个邮件文件都在同一个基本目录中。如果我将下面的代码与我的个人电子邮件一起使用,参数 blnQuickSend = true 可以正常工作,如果我使用我的分支电子邮件地址,IBM Notes 会询问我是否要保存更改,尽管我想发送无需询问的电子邮件。
我希望我能够清晰易懂地描述我的问题。感谢您的关注!
来自德累斯顿的热情问候 谢尔盖
PS:我是德国人 :),谢天谢地 Google 帮我把我的问题翻译成英文。
代码
Public Function Send_EMail( _
varRecipient As Variant, _
varCopyTo As Variant, _
varBlindcopyTo As Variant, _
strSubject As String, _
strMessage As String, _
strAttachement As String, _
Optional blnSaveEMail As Boolean = True, _
Optional blnQuickSend As Boolean = False, _
Optional strAlternative_Mailfile As String _
) As Boolean
Dim objLotusNotes As Object
Dim objMaildatabase As Object 'Die Maildatabase
Dim strMailServer As String 'Der Mailserver
Dim strMailFile As String ' Die Maildatei
Dim objEMail As Object 'Die E-Mail in IBM Notes
Dim objAttachement As Object 'Das Anlage Richtextfile Object
Dim objSession As Object 'Die Notes Session
Dim objEmbedded As Object 'Attachement
Dim arrAttachements() As String 'Liste mehrere Anhänge
Dim lngIndex As Long
Dim strFilepath As String
Dim objNotesfield As Object 'Datenfeld in IBM Notes
Dim objCurrentEMail As Object 'Aktuelle E-Mail
'启动 IBM Notes 会话
Set objSession = CreateObject("Notes.NotesSession")
'打开 IBM-Notes-Database
strMailServer = objSession.GetEnvironmentString("MailServer", True)
If VBA.Len(strAlternative_Mailfile) = 0 Then
strMailFile = objSession.GetEnvironmentString("MailFile", True)
Else
strMailFile = "mail/" & strAlternative_Mailfile
End If
Set objMaildatabase = objSession.GETDATABASE(strMailServer, strMailFile)
'如果你构造的路径(变量strMailFile)错误或者无法访问数据库 '那么此行将确保回退到您在 Notes 客户端的位置文档中配置的邮件文件。
If Not objMaildatabase.IsOpen Then objMaildatabase.OPENMAIL
'创建新电子邮件
Set objEMail = objMaildatabase.CREATEDOCUMENT
'设置保存选项
objEMail.ReplaceItemValue "SAVEOPTIONS", "0"
'将内容放入字段中
Set objNotesfield = objEMail.APPENDITEMVALUE("Subject", strSubject)
Set objNotesfield = objEMail.APPENDITEMVALUE("SendTo", varRecipient)
Set objNotesfield = objEMail.APPENDITEMVALUE("BlindCopyTo", varBlindcopyTo)
Set objNotesfield = objEMail.APPENDITEMVALUE("CopyTo", varCopyTo)
'加载工作区
Set objLotusNotes = CreateObject("Notes.NotesUIWorkspace")
'添加附件
arrAttachements = VBA.Split(strAttachement, ";")
For lngIndex = LBound(arrAttachements) To UBound(arrAttachements)
strFilepath = arrAttachements(lngIndex)
If strFilepath <> "" And VBA.Dir(strFilepath) <> "" Then
Set objAttachement = objEMail.CREATERICHTEXTITEM("Attachment" & lngIndex)
Set objEmbedded = _
objAttachement.EMBEDOBJECT(1454, "", strFilepath, "Attachment" & lngIndex)
End If
Next
'在前端打开电子邮件并分配给 NotesUIDocument 变量
Set objCurrentEMail = objLotusNotes.EDITDOCUMENT(True, objEMail)
'将内容放入电子邮件
objCurrentEMail.GotoField "Body"
objCurrentEMail.InsertText strMessage
'检查,是否应该立即发送电子邮件
If blnQuickSend = True Then
'发送电子邮件
objCurrentEMail.Send
'保存电子邮件,如果需要的话
If blnSaveEMail Then objCurrentEMail.Save
'关闭电子邮件
objCurrentEMail.Close
End If
'返回真
Send_EMail = True
End Function
【问题讨论】:
标签: excel vba email lotus-notes