2009-03-26 23 views
9

से प्रारूपित कमल नोट्स समृद्ध टेक्स्ट ईमेल भेजना मेरे पास कम कमल स्क्रिप्ट या नोट्स/डोमिनोज़ ज्ञान है लेकिन मेरे पास एक प्रक्रिया है, जो बहुत समय पहले कहीं से कॉपी की गई थी, जो मुझे वीबीए से नोट्स के माध्यम से ईमेल करने की अनुमति देती है। मैं आमतौर पर केवल आंतरिक सूचनाओं के लिए इसका उपयोग करता हूं जहां प्रारूपण वास्तव में महत्वपूर्ण नहीं है।एक्सेल वीबीए

अब मैं क्लाइंट को बाहरी ईमेल भेजने के लिए इसका उपयोग करना चाहता हूं, और कॉर्पोरेट प्रकारों की बजाय ईमेल हमारी शैली मार्गदर्शिका (मूल रूप से एक सैन्स-सेरिफ़ टाइपफेस) के साथ अनुपालन करेगा।

मैं उन्हें बताने वाला था कि कोड केवल सादा पाठ के साथ काम करता है, लेकिन फिर मैंने देखा कि दिनचर्या कुछ प्रकार के CREATERICHTEXTITEM ऑब्जेक्ट को संदर्भित करता है। क्या इसका मतलब है कि के बाद मैं बॉडी टेक्स्ट स्ट्रिंग पर कुछ प्रकार के स्वरूपण को लागू कर सकता हूं, इसे मेल रूटीन में भेज दिया गया है? साथ ही साथ हमारे बहुमूल्य ब्रांड मूल्यों को कायम रखने के लिए, यह ईमेल में कुछ अनुच्छेदों को हाइलाइट करने के लिए मेरे लिए काफी आसान होगा।

मैं के बारे में खुदाई लिया है 'शुद्ध देखने के लिए कि इस कोड को अनुकूलित किया जा सकता है, लेकिन नोट्स से अपरिचित होने' ऑब्जेक्ट मॉडल, और तथ्य यह है कि ऑनलाइन नोट्स संसाधनों आवेदन की अपनी जड़ता को प्रतिबिंबित करने लगते हैं, मतलब मैं नहीं था बहुत दूर नहीं है।

कोड:

Sub sendEmail(EmailSubject As String, EMailSendTo As String, EMailBody As String, MailServer as String) 

    Dim objNotesSession As Object 
    Dim objNotesMailFile As Object 
    Dim objNotesDocument As Object 
    Dim objNotesField As Object 
    Dim sendmail As Boolean 

    'added for integration into reporting tool 
    Dim dbString As String 

    dbString = "mail\" & Application.UserName & ".nsf" 

On Error GoTo SendMailError 
    'Establish Connection to Notes 
    Set objNotesSession = CreateObject("Notes.NotesSession") 
On Error Resume Next 
    'Establish Connection to Mail File 
    Set objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString) 
    'Open Mail 
    objNotesMailFile.OPENMAIL 
On Error GoTo 0 

    'Create New Memo 
    Set objNotesDocument = objNotesMailFile.createdocument 

    Dim oWorkSpace As Object, oUIdoc As Object 
    Set oWorkSpace = CreateObject("Notes.NotesUIWorkspace") 
    Set oUIdoc = oWorkSpace.CurrentDocument 

    'Create 'Subject Field' 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject) 

    'Create 'Send To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo) 

    'Create 'Copy To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo) 

    'Create 'Blind Copy To' Field 
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo) 

    'Create 'Body' of memo 
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body") 

    With objNotesField 
     .APPENDTEXT emailBody 
     .ADDNEWLINE 1 
    End With 

    'Send the e-mail 

    Call objNotesDocument.Save(True, False, False) 
    objNotesDocument.SaveMessageOnSend = True 
    'objNotesDocument.Save 
    objNotesDocument.Send (0) 

    'Release storage 
    Set objNotesSession = Nothing 
    Set objNotesMailFile = Nothing 
    Set objNotesDocument = Nothing 
    Set objNotesField = Nothing 

    'Set return code 
    sendmail = True 

    Exit Sub 

SendMailError: 
    Dim Msg 
    Msg = "Error # " & Str(Err.Number) & " was generated by " _ 
       & Err.Source & Chr(13) & Err.Description 
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext 
    sendmail = False 
End Sub

उत्तर

10

संक्षिप्त उत्तर हाँ है। लंबा जवाब दर्दनाक है। नोट्स में समृद्ध टेक्स्ट आइटमों में हेरफेर करने के लिए कोई भी महान वर्ग नहीं है। हालांकि कुछ जो आप शोध कर सकते हैं वे नोट्स रिचटेक्स्ट स्टाइल, नोट्स रिचटेक्स्ट पैराग्राफ स्टाइल, और नोट्स रिचटेक्स्टटेबल कुछ नाम हैं। ये कक्षाएं आपको कुछ समृद्ध टेक्स्ट तत्वों को परिभाषित करने में मदद करती हैं और उन्हें अपने समृद्ध टेक्स्ट फ़ील्ड में प्रोग्रामेटिक रूप से जोड़ती हैं।

एक और दृष्टिकोण, क्योंकि आप ईमेल भेज रहे हैं, नोट्सएमआईएमईटीटी कक्षाओं का उपयोग करना और HTML (रास्ता आसान तरीका) का उपयोग करके ईमेल बनाना है। यहां कुछ नमूना कोड है:

Set s = New NotesSession 
Dim docMail As NotesDocument 
Dim body As NotesMIMEEntity 
Dim stream As NotesStream 

Set db = s.CurrentDatabase 
s.ConvertMIME = False ' Do not convert MIME to rich text 

'Create email to be sent 
Set docMail = db.CreateDocument 

With docMail 
     .SendTo = SEND TO ADDRESS 
     .From = FROM ADDRESS 
     .Principal = FROM ADDRESS 
     .ReplyTo = REPLY TO ADDRESS 
     .Subject = SUBJECT 
     .Form = "Memo" 
End With 

    Set stream = s.CreateStream 
Set body = docMail.CreateMIMEEntity 
Call stream.WriteText ("YOUR HTML CODE GOES HERE") 

'ENC_IDENTITY_8BIT used because of technote found on notes.net 
'http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/aeedaf28e47546ad85256f6a000a4b48?OpenDocument 
Call body.SetContentFromText (stream, "text/html;charset=iso-8859-1",ENC_IDENTITY_8BIT) 

Call docMail.Send(False) 
Set docMail = Nothing 
Set body = Nothing 
Set stream = Nothing 

s.ConvertMIME = True ' Restore conversion 

अनिवार्य रूप से आप NotesSession में दूर सेटिंग ConvertMIME चालू करना होगा। फिर एक नया दस्तावेज़ बनाएं, मेल गुण सेट करें, आदि। वह हिस्सा पहले से ही आपके वीबीए कोड में है। इसके बाद, अपने HTML टेक्स्ट को पकड़ने के लिए MIMEEntity और स्ट्रीम बनाएं। अंत में अपने MIMEEntity ऑब्जेक्ट पर SetContentFromText विधि को कॉल करें। फिर अपना ईमेल भेजें। ध्यान दें कि नोट्सशन के लिए ConvertMIME सुविधा को चालू करने के लिए अंतिम कॉल है।

मुझे यकीन नहीं है कि यह सभी COM के माध्यम से काम करेगा, लेकिन यह नोट्स में कमलस्क्रिप्ट एजेंटों में अच्छी तरह से काम करता है।

मुझे आशा है कि इससे मदद मिलती है!

+0

धन्यवाद, यह उतना ही आसान लगता है जितना मैंने कल्पना की थी! मैंने अपने प्रोजेक्ट में अपना कोड एकीकृत करने की कोशिश की, लेकिन प्रत्येक कमल नोट्स लाइब्रेरी में संदर्भ जोड़ने के बाद भी मैं समस्याओं में भाग रहा हूं।मुख्य रूप से, मुझे नहीं लगता कि नोट्सस्ट्रीम COM के माध्यम से उपलब्ध है, जो कि पूरी तरह से किबोश डालता है। – Lunatik

+0

मैंने सहायता फ़ाइल की जांच की: इसमें कोई उल्लेख नहीं है कि स्ट्रीम COM में समर्थित नहीं है, इसलिए इसे काम करना चाहिए। आप धोखा दे सकते हैं: सादे एचटीएमएल को फ़ील्ड में स्टोर करें और फिर उस पर लोटसस्क्रिप्ट एजेंट को कॉल करें जो आपके लिए रूपांतरण करता है। – stwissel

0

मुझे यह पसंद है जिस तरह से यह है। हालांकि, मैं dbString = "mail\" & Application.CurrentUser & ".nsf"

टिप्पणी करने वाले पहले dbString = "mail\" & Application.UserName & ".nsf" बदलना पड़ा: काश मैं लोटस नोट्स भेजते समय खोलने के लिए नहीं था।

दूसरी टिप्पणी: काश मैं बदल सकता हूं कि ई-मेल किससे है (यानी, अगर मैं 50 लोगों को एक रिपोर्ट भेज रहा हूं, तो मैं अपने काम के पते के बजाय एक सामान्य पते से होना चाहता हूं)

0

यह बदलने के लिए कि कौन से है, एक सामान्य नोट्स आईडी (जैसे ऑटो भेजें/YourCompany) बनाएं और उस आईडी के साथ एजेंट को सहेजें।