2009-03-26 76 views
9

Tôi có ít kiến ​​thức Lotus Script hoặc Notes/Domino nhưng tôi có một quy trình, được sao chép từ một nơi nào đó từ lâu, cho phép tôi gửi qua Notes từ VBA. Tôi thường chỉ sử dụng thông báo này cho các thông báo nội bộ nơi định dạng không thực sự quan trọng.Gửi email có định dạng Lotus Notes từ Excel VBA

Bây giờ tôi muốn sử dụng để gửi email bên ngoài cho khách hàng và các loại công ty thay vì email tuân theo hướng dẫn kiểu của chúng tôi (kiểu chữ sans-serif về cơ bản).

Tôi sắp nói với họ rằng mã chỉ hoạt động với văn bản thuần túy, nhưng sau đó tôi nhận thấy rằng thường trình tham chiếu một số đối tượng CREATERICHTEXTITEM. Điều này có nghĩa là tôi có thể áp dụng một số loại định dạng nào đó cho chuỗi văn bản nội dung sau nó đã được chuyển đến thường trình thư không? Cũng như duy trì giá trị thương hiệu quý giá của chúng tôi, điều này sẽ khá thuận tiện với tôi để làm nổi bật một số đoạn trong email.

Tôi đã tìm hiểu về 'mạng để xem mã này có thể được điều chỉnh hay không, nhưng không quen thuộc với mô hình đối tượng của Ghi chú và thực tế là tài nguyên Ghi chú trực tuyến dường như phản ánh sự khéo léo của ứng dụng, có nghĩa là tôi đã không 't nhận được rất xa.

Mã:

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

Trả lời

10

Câu trả lời ngắn gọn là Yes. Câu trả lời dài là đau đớn. Không có bất kỳ lớp học tuyệt vời nào tiếp xúc với thao tác các mục văn bản đa dạng trong Ghi chú. Tuy nhiên một số ít bạn có thể nghiên cứu là NotesRichTextStyle, NotesRichTextParagraphStyle và NotesRichTextTable để đặt tên một vài. Các lớp này giúp bạn xác định một số thành phần văn bản đa dạng thức và thêm chúng theo cách lập trình vào trường văn bản đa dạng thức của bạn.

Một cách tiếp cận khác, vì bạn đang gửi email, là sử dụng các lớp NotesMIMEEntity và xây dựng email bằng cách sử dụng HTML (cách dễ dàng hơn). Dưới đây là một số mã mẫu:

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 

Về cơ bản, bạn cần phải tắt cài đặt ConvertMIME trong NotesSession. Sau đó tạo một tài liệu mới, thiết lập các thuộc tính thư, vv Phần đó đã có trong mã VBA của bạn. Tiếp theo, tạo MIMEEntity và một luồng để giữ văn bản HTML của bạn. Cuối cùng, gọi phương thức SetContentFromText trên đối tượng MIMEEntity của bạn. Sau đó gửi email của bạn. Lưu ý cuộc gọi cuối cùng là bật tính năng ConvertMIME trở lại cho NotesSession.

Tôi không chắc chắn nếu điều này tất cả sẽ làm việc thông qua COM, nhưng nó hoạt động tốt trong các tác nhân LotusScript trong Ghi chú.

Tôi hy vọng điều này sẽ hữu ích!

+0

Cảm ơn, điều này có vẻ dễ dàng như tôi tưởng tượng! Tôi đã thử tích hợp mã của bạn vào dự án của tôi, nhưng ngay cả sau khi thêm tài liệu tham khảo vào mỗi thư viện Lotus Notes, tôi vẫn gặp sự cố.Chủ yếu, tôi không nghĩ rằng NotesStream có sẵn thông qua COM, mà kinda đặt kibosh trên toàn bộ điều. – Lunatik

+0

Tôi đã kiểm tra tệp trợ giúp: Không có đề cập đến luồng không được hỗ trợ trong COM, vì vậy nó sẽ hoạt động. Bạn có thể muốn lừa gạt: Lưu trữ HTML thuần túy vào trường và sau đó gọi một tác nhân LotusScript trên đó thực hiện chuyển đổi cho bạn. – stwissel

0

Tôi thích nó theo cách của nó. Tuy nhiên, tôi đã phải thay đổi dbString = "mail\" & Application.UserName & ".nsf" để dbString = "mail\" & Application.CurrentUser & ".nsf"

bình luận đầu tiên: Tôi ước gì tôi đã không cần phải có Lotus Notes mở tại thời điểm gửi.

Nhận xét thứ hai: Tôi muốn tôi có thể thay đổi email của ai (ví dụ: nếu tôi gửi báo cáo cho 50 người, tôi muốn báo cáo từ địa chỉ chung thay vì địa chỉ cơ quan của tôi)

0

Để thay đổi người đó, hãy tạo ID ghi chú chung (ví dụ: Gửi tự động/YourCompany) và lưu tác nhân với ID đó.

Các vấn đề liên quan