RSS RSS

C#通过Lotus Domino Object发送邮件

By Erickson, August 17, 2011 10:44 pm

最近写了个自己都觉得很烂的工具(水平真的很有限,太失败了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”,路径自己调整啦)
其次,收件人或抄送人,如果是多个的话,需要用字符串数组

完~~~

8 Responses to “C#通过Lotus Domino Object发送邮件”

  1. Mac says:

    传说中的老油条么 = =b

    其实………………shell脚本几行就可以做这个事情了……

  2. Erickson says:

    有Unix方面的接口函数么?还是说jar?

  3. Mac says:

    不是,在下认为sendmail肯定可以配置成支持Lotus Domino,然后就只是读数据库的事情了,这个应该也有cli工具。shell脚本的特色之一就是用stdin/stdio来进行不同程序的交互么,所以只要这两个能和stdio/stdout打交道就可以了

  4. 卡卡西 says:

    可以提供 完整程式碼嗎?

  5. ifrog says:

    INKFZX0EM004……巨头是指朱总么,笑

  6. Erickson says:

    不知这位躺着也中枪的朱总是谁,啊哈哈…
    阁下同单位的?幸会幸会=..=

  7. Asia says:

    我喜欢,顶一个!

Leave a Reply

Persephone Theme by Themocracy