J'ai actuellement deux bases de données Lotus Notes, chacune avec leur propre adresse e-mail associée. Comme prévu, lorsque j'envoie un e-mail via la première base de données à mon compte Gmail, il s'affiche sous la forme "From: [email protected]" et lorsque j'envoie la seconde base de données, le message s'affiche sous la forme "From: notesAccount2 @ db2 .com "dans mon gmail.L'envoi d'un courrier électronique IBM Lotus Notes à l'aide d'adresses e-mail VBA erronées
J'ai le code de travail qui ouvre la deuxième base de données, recherche dans la boîte de réception un e-mail contenant un mot-clé et extrait une adresse e-mail de cet e-mail. Il crée ensuite un nouveau document dans cette deuxième base de données, insère le nom des destinataires, le sujet, le corps, etc., envoie l'e-mail et l'enregistre dans mon dossier envoyé. Tout fonctionne bien jusqu'à ce point. Toutefois, lorsque j'envoie un e-mail de la deuxième base de données à mon compte Gmail à l'aide de cette méthode VBA, l'e-mail apparaît dans mon compte Gmail sous la forme "From: [email protected]" - l'e-mail associé à la première base de données.
Je n'arrive pas à comprendre pourquoi cela se produit. Connaissance assez limitée des interactions entre VBA et Lotus Notes, et des serveurs/bases de données Lotus Notes en général. La première base de données est techniquement celle par défaut à laquelle j'ai seulement accès et la deuxième base de données a été ajoutée plus tard et plusieurs personnes y ont accès. Je ne sais pas si c'est pertinent.
J'apprécierais toute aide! Merci.
Note: Ce code a été copié et adapté à partir de plusieurs sources, dont certains sur le SO, IBM et d'autres sources Notes, et tout ce que Google a jeté mon chemin, y compris http://www.fabalou.com/vbandvba/lotusnotesmail.asp
http://www-01.ibm.com/support/docview.wss?uid=swg21178583
Code: (Cela devra être adapté car j'ai supprimé les noms de serveur et les noms des fichiers courrier)
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 = [email protected]
'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
Merci pour la réponse, Karl. La question a certainement du sens. Malheureusement, les informaticiens me disent qu'il n'y a pas moyen pour moi de me connecter directement au deuxième compte. J'apprécie la solution de contournement potentielle à laquelle vous vous êtes connecté (très bien écrit, d'ailleurs), mais je pense que c'est un peu dépassé pour ce que j'essaie de faire. Je me demande comment cela fonctionne si, par exemple, je clique sur "Nouveau" pour créer et envoyer un nouvel email depuis le deuxième compte manuellement (pas via VBA), comment cela liste-t-il le second compte en tant qu'expéditeur? Est-il impossible de copier cela via VBA en utilisant des classes par défaut? – jdyagoda
Par exemple, au lieu d'envoyer chaque e-mail via le programme, puis-je simplement enregistrer cet e-mail dans le dossier brouillons, puis entrer et envoyer manuellement tous les brouillons qui y ont été placés avec le code? Puisque je l'envoie manuellement à partir de ce deuxième compte, l'expéditeur qui apparaît est-il le deuxième? – jdyagoda
Ce à quoi vous faites référence est une fonctionnalité du client Notes, qui peut trouver le champ Propriétaire dans la base de données de préférences actuellement ouverte, et l'utiliser pour envoyer du courrier. Cette magie fonctionne précisément parce que le client Notes fait ce que Karl-Henry a décrit: Il écrit le message directement dans le fichier mail.box. Cette fonctionnalité n'est pas disponible via la méthode Send() dans les classes COM Notes que vous utilisez à partir de VBA. C'est un choix délibéré fait par les développeurs des classes pour faire d'usurper l'identité d'un expéditeur (délibérément ou accidentellement) difficile à faire. –