C#中利用Lotus notes公共邮箱发送邮件的方法

2019-12-30 19:37:58丽君

但是现实情况是这样的

我们需要邮件从公邮发送出去

何谓公邮:整个Team使用的邮箱,如***admin@email.com 之类的邮箱

使用过反人类的 Lotus notes 都知道公邮是需要先打开个人邮箱才能进去的

于是当我把以上的VBA 代码增加如下代码,设置从公邮里面发送邮件后


  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#,直接写出来,等报错提示密码没有的时候我再想办法

于是战战兢兢有了以下代码


/// <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**lC***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;
   }
  }