2017-07-07 2 views
1

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 

Répondre

2

Notes enverra normalement le courrier en utilisant l'adresse e-mail de l'ID que vous utilisez pour vous connecter. Donc, si vous vous connectez en utilisant NotesAccount1/Domain, tous les emails proviendront de [email protected] Si vous voulez simuler l'expéditeur, vous devez utiliser une méthode non documentée: injectez l'email directement dans mail.box. Vous ne devriez pas essayer de le faire à moins que vous ne sachiez vraiment ce que vous faites.

J'ai posté du code sur mon blog pour un cours de notification de messagerie, il prend en charge cette solution de contournement pour définir l'expéditeur sur les e-mails sortants. Vous pouvez trouver le dernier code à http://blog.texasswede.com/updated-mailnotification-class-now-with-html-email-support-and-web-links/

+0

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

+0

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

+0

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. –