C#通过Lotus Domino Object发送邮件
最近写了个自己都觉得很烂的工具(水平真的很有限,太失败了sto),实现的功能就是每隔一段时间扫描一张表,将符合要求的内容组装成邮件,通过IBM NOTES的接口发送出去,核心代码其实就几十行吧orz
本来不打算写这篇无聊的post了,况且还是C#的,几年前就已经还给老师了,但是发现其实这部分内容,能google到的也比较有限,所以还是摆出来吧,或许某些童鞋会用到,这还真是……怨念吧
其实也有套Java的方案,有提供一个NCSO.jar的jar包,但考虑到这边提供的服务器运行环境是个WIN的,还是MS自己的东西或许跑起来快点,所以就决定C#了,然后还装了VS 2008,太~~~TM二逼兼苦逼了
主要就说说那几个接口函数和几个配置项吧,其他都不说了,没啥内容…
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | using System; .... using Domino; .... namespace Orz { class Orz { NotesDatabase ndb = null; NotesSession ns = null; string mPwd = ""; string mSrvr = ""; string mFile = ""; public Orz() { //邮箱登陆密码 mPwd = "password"; //邮件服务器地址 mSrvr = "INKFZXOEM004/服务器/XXXX"; //邮箱文件 mFile = "mail\\PubMail\\hyyb.nsf"; .... } //连接邮箱 public void connMailSrvr() { try { ns = new NotesSession(); ns.Initialize(mPwd); ndb = ns.GetDatabase(mSrvr, mFile, false); } catch (Exception ex) { Console.WriteLine("邮箱连接失败!原因:" + ex.Message.ToString()); } } //组装邮件内容,无抄送 public NotesDocument pkgMail(object sendto, object title, object content) { NotesDocument doc = ndb.CreateDocument(); doc.ReplaceItemValue("Form", "Memo"); //收件人 doc.ReplaceItemValue("SendTo", sendto); //邮件标题 doc.ReplaceItemValue("Subject", title); //邮件内容 NotesRichTextItem rt = doc.CreateRichTextItem("Body"); rt.AppendText(content.ToString()); return doc; } //组装邮件内容,有抄送 public NotesDocument pkgMail(object sendto, object copyto, object title, object content) { NotesDocument doc = ndb.CreateDocument(); doc.ReplaceItemValue("Form", "Memo"); //收件人 doc.ReplaceItemValue("SendTo", sendto); //抄送人 doc.ReplaceItemValue("CopyTo", copyto); //邮件标题 doc.ReplaceItemValue("Subject", title); //邮件内容 NotesRichTextItem rt = doc.CreateRichTextItem("Body"); rt.AppendText(content.ToString()); return doc; } //发送邮件 public void sendMail() { if (ns == null) { connMailSrvr(); } else { NotesDocument doc = ndb.CreateDocument(); object obj = null; string receivers = new string[2] { "中头/xx开发一部/软件开发中心/XXXX", "小头/xx开发一部/软件开发中心/XXXX" }; string copytoes = new string[2] { "大头/xx开发一部/软件开发中心/XXXX", "巨头/xx开发一部/软件开发中心/XXXX" }; string title = "Hello Kitty=.="; string content = " (= ̄ω ̄=)"; //多个收件人,抄送多个人 doc = pkgMail(receivers, copytoes, title, content); obj = doc.GetItemValue("SendTo"); try { doc.Send(false, ref obj); } catch (Exception ex) { Console.WriteLine("发送失败:" + ex.Message.ToString()); } obj = null; doc = null; } } //释放资源 public void release() { if (ndb != null) { ndb = null; } if (ns != null) { ns = null; } } static void Main(string[] args) { Orz note = new Orz(); note.sendMail(); note.release(); } } } |
一目了然,一切尽在不言中,超EZ有木有 = =b
有两个地方需要注意~
首先,项目需要引入COM包,这个dll在IBM Lotus Notes安装路径下,名为Lotus Domino Object。引入后,就能通过using Domino;使用相关内容了。(这里如果还是不行,参照网上的方法,注册一下组件,cmd执行regsvr32 “C:\Lotus\Notes\nlsxbe.dll”,路径自己调整啦)
其次,收件人或抄送人,如果是多个的话,需要用字符串数组
完~~~
传说中的老油条么 = =b
其实………………shell脚本几行就可以做这个事情了……
有Unix方面的接口函数么?还是说jar?
不是,在下认为sendmail肯定可以配置成支持Lotus Domino,然后就只是读数据库的事情了,这个应该也有cli工具。shell脚本的特色之一就是用stdin/stdio来进行不同程序的交互么,所以只要这两个能和stdio/stdout打交道就可以了
可以提供 完整程式碼嗎?
eMail有否?
INKFZX0EM004……巨头是指朱总么,笑
不知这位躺着也中枪的朱总是谁,啊哈哈…
阁下同单位的?幸会幸会=..=
我喜欢,顶一个!