一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#中利用Lotus notes公共郵箱發送郵件的方法

C#中利用Lotus notes公共郵箱發送郵件的方法

2022-02-20 14:00Lionel Andrés Messi C#

這篇文章主要給大家介紹了關于C#中利用Lotus notes公共郵箱發送郵件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定參考學習價值,需要的朋友們下面來一起看看吧。

前言

公司的郵件系統用的是反人類的 Lotus notes, 你敢信?

最近要實現一個功能,郵件提醒功能,就是通過自動發送提醒郵件

 前前后后這個問題搞了2天,由于公司的諸多條件限制,無法直接調用到公司發送郵件的接口,只有通過類似 Lotus script,VBA 等其他方式來實現。

用VBA代碼實現發送郵件,其實我在n年前就實現過了

代碼如下,網上一搜也一大堆

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Function SendEmailbyNotesWithAttachement_2(Addresses, Attach, cc)
 strSubject = ThisWorkbook.Sheets("EMAIL").Range("B1")
 strbody = ThisWorkbook.Sheets("EMAIL").Range("A1")
 'Declare Variables
  Dim s As Object
  Dim db As Object
  Dim body As Object
  Dim bodyChild As Object
  Dim header As Object
  Dim stream As Object
  Dim host As String
  Dim message As Object
  ' Notes variables
  Set s = CreateObject("Notes.NotesSession")
  Set db = s.CURRENTDATABASE
  Set stream = s.CreateStream
  ' Turn off auto conversion to rtf
  s.ConvertMIME = False
  ' Create message
  Set message = db.CREATEDOCUMENT
  message.Form = "memo"
  message.Subject = strSubject
  message.sendTo = Split(Addresses, ";")
  message.CopyTo = cc
  message.SaveMessageOnSend = True
  ' Create the body to hold HTML and attachment
  Set body = message.CreateMIMEEntity
 'Child mime entity which is going to contain the HTML which we put in the stream
  Set bodyChild = body.CreateChildEntity()
  Call stream.WriteText(strbody)
  Call bodyChild.SetContentFromText(stream, "text/HTML;charset=UTF-8", ENC_NONE)
  Call stream.Close
  Call stream.Truncate
  ' This will run though an array of attachment paths and add them to the email
  For i = 0 To UBound(Attach)
  strAttach = Attach(i)
  If Len(strAttach) > 0 And Len(Dir(strAttach)) > 0 Then
   ' Get the attachment file name
   pos = InStrRev(strAttach, "\")
   Filename = Right(strAttach, Len(strAttach) - pos)
   'A new child mime entity to hold a file attachment
   Set bodyChild = body.CreateChildEntity()
   Set header = bodyChild.CreateHeader("Content-Type")
   Call header.SetHeaderVal("multipart/mixed")
   Set header = bodyChild.CreateHeader("Content-Disposition")
   Call header.SetHeaderVal("attachment; filename=" & Filename)
 
   Set header = bodyChild.CreateHeader("Content-ID")
   Call header.SetHeaderVal(Filename)
  
   Set stream = s.CreateStream()
   If Not stream.Open(strAttach, "binary") Then
    MsgBox "Open failed"
   End If
   If stream.Bytes = 0 Then
    MsgBox "File has no content"
   End If
   Call bodyChild.SetContentFromBytes(stream, "application/octet-stream", ENC_IDENTITY_BINARY) ' All my attachments are excel this would need changing depensding on your attachments.
  End If
  Next
  'Send the email
  Call message.Send(False)
  s.ConvertMIME = True ' Restore conversion
End Function
 VBA

但是現實情況是這樣的

我們需要郵件從公郵發送出去

何謂公郵:整個Team使用的郵箱,如***[email protected] 之類的郵箱

使用過反人類的 Lotus notes 都知道公郵是需要先打開個人郵箱才能進去的

于是當我把以上的VBA 代碼增加如下代碼,設置從公郵里面發送郵件后

?
1
2
3
Server = "C***/****r/****"
Path = "****\C*****.nsf"
Set db = s.GetDataBase(Server, Path)

郵件確實是從公郵發送出來,但是很遺憾,郵件發送人那顯示的是我的個人郵箱,而查看我個人的已發送郵件,是完全查不到,但是在公郵已發送郵件可以看到

這就無法理解了,于是開啟了漫長的2天人類大戰反人類Lotus notes戰役

前前后后試過各種VBA代碼【表問為什么不直接調接口】

但要不就是能顯示為公郵發送的,但郵件 body 不能Html格式,否則就是相反,總之一句話:二者不可兼得

期間看遍國內外關于Lotus notes VBA的網站

最后,實在是忍不了了,開始搜索Python,C#

一直猶猶豫豫沒有寫是因為同事告訴我,比如使用C#就需要郵箱密碼,而這個東西我們沒有也不會有的

最后的最后,決定賭一把,我先用C#,直接寫出來,等報錯提示密碼沒有的時候我再想辦法

于是戰戰兢兢有了以下代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/// <summary>
  /// 通過notes發送郵件
  /// </summary>
  /// <param name="mailTo">實時數據庫</param>
  /// <returns></returns>
  public static void SendForNotes()
  {
   string notesPwd = "";
   string notesServer = "C***3/C***/***r/***C";
   string NotesDBName = @"M**l\C***to.nsf";
   string mailTo = "m****o@c**.***.com";
   string mailSubject = DateTime.Now.ToString();
   string mailBoby = "<html><body><table border='1'><tr><th>Month</th><th>Savings</th></tr><tr><td>January</td><td>$100</td></tr></table></body></html>";
   NotesSession ns;
   NotesDatabase db;
   NotesDocument doc;
   try
   {
    ns = new NotesSession();
    if (ns != null)
    {
     //您本機notes的密碼
     ns.Initialize(notesPwd);
     //初始化NotesDatabase
     db = ns.GetDatabase(notesServer, NotesDBName, false);
     doc = db.CreateDocument();
     doc.ReplaceItemValue("Form", "Memo");
     doc.ReplaceItemValue("SendTo", mailTo);
     doc.ReplaceItemValue("Subject", mailSubject.Replace('\r', ' ').Replace('\n', ' '));
     doc.AppendItemValue("Principal", "C******m");//設置郵件的發件人昵稱
     NotesRichTextItem rt = doc.CreateRichTextItem("Body");
     var richStyle = ns.CreateRichTextStyle();
     richStyle.PassThruHTML = 1;
     rt.AppendStyle(richStyle);
     rt.AppendText(mailBoby);
     //發送郵件  
     object obj = doc.GetItemValue("SendTo");
     doc.Send(false, ref obj);
     doc = null;
    }
   }
   catch (Exception ex)
   {
    // Log.CreateLog(ex.Message);
   }
   finally
   {
    ns = null;
    db = null;
    doc = null;
   }
  }

抱著必死的心態小心翼翼的點擊了調試

WTF!!!!

居然收到一封有郵件!沒有密碼啊!不需要密碼嗎!密碼不用也能發送!!!

再試了一次后,發現真的不需要!!!

因為我們每天開機打開notes的時候也不需要輸入密碼!!!這可能是和本機的ID文件有綁定!!!在畢業后的第一家公司中是需要輸入密碼的!

于是欣喜若狂

開始修改代碼

最終版本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/// <summary>
  /// 通過notes發送郵件
  /// </summary>
  /// <param name="mailTo">實時數據庫/lysh</param>
  /// <returns></returns>
  public static void SendForNotes2()
  {
 
   string notesPwd = "";
   string notesServer = "C****3/**/S***/****";
   string NotesDBName = @"****\******.nsf";
   string mailTo = "****t**@***.com";
   string mailSubject = DateTime.Now.ToString();
 
   string mailBoby = "<html><body><table border='1'><tr><th>Month</th><th>Savings</th></tr><tr><td>January</td><td>$100</td></tr></table></body></html>";
 
   NotesSession ns;
   NotesDatabase db;
   NotesDocument doc;
   try
   {
    ns = new NotesSession();
    if (ns != null)
    {
     //您本機notes的密碼
     ns.Initialize(notesPwd);
     //初始化NotesDatabase
     db = ns.GetDatabase(notesServer, NotesDBName, false);
     doc = db.CreateDocument();
     doc.ReplaceItemValue("Form", "Memo");
     doc.ReplaceItemValue("SendTo", mailTo);
     doc.ReplaceItemValue("Subject", mailSubject.Replace('\r', ' ').Replace('\n', ' '));
 
     doc.SaveMessageOnSend = true;
 
     NotesStream HtmlBody = ns.CreateStream();
     HtmlBody.WriteText(mailBoby);//構建HTML郵件,可以在頭和尾添加公司的logo和系統提醒語
     NotesMIMEEntity mine = doc.CreateMIMEEntity("Body");//構建郵件正文
     mine.SetContentFromText(HtmlBody, "text/html;charset=UTF-8", Domino.MIME_ENCODING.ENC_IDENTITY_BINARY);
 
     doc.AppendItemValue("Principal", "C**********am");//設置郵件的發件人昵稱
     //發送郵件  
     object obj = doc.GetItemValue("SendTo");
     doc.Send(false, ref obj);
     doc = null;
    }
   }
   catch (Exception ex)
   {
    // Log.CreateLog(ex.Message);
   }
   finally
   {
    ns = null;
    db = null;
    doc = null;
   }
  }

期間還遇到

由于這句代碼放置的位置不對,導致顯示不正確

?
1
doc.AppendItemValue("Principal", "C**********am");//設置郵件的發件人昵稱

最終突破的那一刻心情真的很爽,雖然到到現在仍然不知道不要密碼的原因,但總歸解決了困惑兩天的問題,不敢獨享

有時候就是聽別人說,這條路走不通,就不走了

有時候就是聽別人說,已經封裝好了,直接調吧,就調了而不知如何實現

有時候就是抄作業,以為自己會了,于是真真用的時候就不知道了 

年前終于開始不那么忙了,欠了那么多,該慢慢補回來了

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/LionelMessi/p/8447879.html

延伸 · 閱讀

精彩推薦
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 激情图片 激情小说 | www.男人天堂| 91在线视频免费观看 | 奇米影视在线观看 | 男人的j进入女人的j免费 | 欧美一区二区福利视频 | 亚洲成综合| 亚洲好视频 | 免费观看视频在线播放 | 秋霞午夜伦午夜高清福利片 | 国产精品国产三级在线专区 | 国产精品久久久久久久免费大片 | 久久久无码精品亚洲A片猫咪 | 热99精品| 猫咪社区免费资源在线观看 | 思思99热久久精品在2019线 | 按摩椅play啊太快了h | 日本在线视频网 | 免费又爽又黄禁片视频在线播放 | 国产亚洲女人久久久久久 | 成人性用品 | 亚洲 小说 欧美 激情 另类 | 精品亚洲午夜久久久久 | 日韩无砖专区体验区 | avtt手机版| 操破苍穹h| 久久视频精品3线视频在线观看 | 久久久91精品国产一区二区 | 日本一区二区视频免费播放 | 国产一区二区视频在线观看 | 欧美一区二区三区在线观看免费 | 五月一区二区久久综合天堂 | 午夜国产精品视频在线 | 亚洲 欧美 日韩 综合 | free性俄罗斯护士 | 高h辣h双处全是肉军婚 | 私人影院在线免费观看 | 亚洲欧美久久婷婷爱综合一区天堂 | 日日夜夜撸影院 | 国产rpg迷雾之风冷狐破解 | 免费观看日本 |