1、页面嵌入DBMail Webmail登录框
假设Webmail的网址是http://www.com/mail,如果在页面上要嵌入DBMail Webmail的登录框,可以在页面上加入如下的代码:
<form action=http://xxx.com/mail method=post>
完整帐号: <input type=text name="fm_strAccount">
输入密码: <input type=password name="fm_strPassword">
<input type=submit value='登录Webmail'>
</form>
2、OA办公系统修改密码后同步到DBMail
假设Webmail的网址是http://www.com/mail,当用户在OA办公系统中修改了密码以后,可以通过password.asp同步密码到DBMail中,同步密码的方式有GET和POST两种方式。
2.1 GET方式同步密码
http://xxx.com/mail/password.asp?acc=ACCOUT&pwd=NEW_PASSWORD&old=OLD_PASSWORD&jump=1&url=URL
password.asp从URL参数中读取新旧密码,当旧密码检验正确以后才会修改为新密码。在修改之后,可以跳转至指定的页面。注意,如果密码中包含有特殊字符,例如&/?等字符,则要进行URL编码。
参数 | 示例 | 说明 |
acc |
xxxx@test.com |
完整的账号 |
pwd | 654321 |
新的密码,注意特殊字符要进行URL编码 |
old | 123456 | 旧的密码,注意特殊字符要进行URL编码 |
jump | 0或1 | 修改之后是否要进行叶面跳转,缺省为1 |
url |
login.asp |
修改之后要跳转的目标页面,可以为空 |
2.2 POST方式同步密码
http://xxx.com/mail/password.asp?jump=1
以POST方式同步密码所实现的功能与GET方式一样,但是通过POST方式向password.asp传过来4个字段:fm_strAccount, fm_strPassword, fm_strOldPassword, fm_strGoBack。
参数 | 示例 | 说明 |
fm_strAccount | xxxx@test.com | 完整的帐号 |
fm_strPassword | 654321 | 新的密码 |
fm_strOldPassword | 123456 | 旧的密码 |
fm_strGoBank | login.asp | 修改之后要跳转的目标页面,可以为空 |
3、从OA办公系统直接进入Webmail
假设Webmail的网址是http://www.com/mail,如果需要在OA办公系统中增加一个链接,让用户点击这个链接以后直接进入Webmail,而不需要重复地输入帐号和密码再次登录,可以向login.asp以GET方式或者POST方式传递帐号和密码进行跳转。
3.1 以GET方式跳至Webmail
http://xxx.com/mail/login.asp?acc=ACCOUNT&pwd=PASSWORD&go=X
由于URL地址中包含明文的密码会在地址栏以明文方式显示,因此这种GET跳转方式有密码泄露的隐患。如果一定要用GET方式跳转,建议先将密码以MD5方式加密码一下。
参数 | 示例 | 说明 |
acc | xxxx@test.com | 完整的帐号 |
pwd | 654321 | 密明文或MD5(密码),注意特殊字符要进行URL编码 |
go | 0/1/4 | 0=邮箱汇总(缺省),1=邮件列表,4=写新邮件 |
3.2 以POST方式跳至Webmail
http://xxx.com/login.asp?go=X
将这个链接的onClick点击事件以 javascript转换为POST操作,向login.asp传过来两个字段:fm_strAccount和 fm_strPassword。
参数 | 示例 | 说明 |
fm_strAccount | xxxx@test.com | 完整的帐号 |
fm_strPassword | 654321 | 密明文或MD5(密码),注意特殊字符要进行URL编码 |
go | 0/1/4 | 0=邮箱汇总(缺省),1=邮件列表。4=写新邮件 |
4、获知帐号是否有新邮件
DBMail的邮件信息都存放数据库中,因此OA办公系统可以直接访问数据库来获知帐号是否有邮件,下面对此提供详细的指导。
4.1 DBMail的数据库连接参数
DBMail的数据库连接参数保存在c:\DBMail\data\mailserver.ini的[Database]段中,OA系统可以直接访问mailserver.ini获取DBMail的数据库连接参数。
参数 | 说明 |
DataSource=xxx\SQLExpress | SQL Server数据源 |
DatabaseName=sqlmail | DBMail数据库名称,缺省为sqlmail |
AuthSSPI=1 | 验证方式,0=帐号+密码,1=Windows集成方式 |
Userld=sa | 帐号 |
Password=12345678 | 密码 |
4.2 获取帐号的邮件信息
DBMail的数据库,为每一个帐号单独创建了一个表,来保存邮件信息,因此获取帐号的邮件信息要经历两步,第一步得到帐号的序号属性(accseqno,帐号序号),第二步访问对应的邮件信息表(表名格式为XNNNNNNmail,其中NNNNN是6位序号)。
具体操作如下:
1.得到帐号的序号: select accseqno from ldap where account='xxxx@xxx.com',假设由此得到的accseqno=3。
2.得到邮件的总数:select count(*) from X000003mail where account='xxx@xxx.com'。
3.得到新邮件数量:select count(*) from X000003mail where account='xxx@xxx.com' and isread=0.
5、直接写数据库记录发邮件
可以直接向websent表写入一条记录,来实现直接发送邮件的功能。
5.1 DBMail的数据库连接参数
DBMail的数据库连接参数保存在c:\DBMail\data\mailserver.ini的[Database]段,OA系统可以直接访问mailserver.ini获取DBMail的数据库连接参数。
参数 | 说明 |
DataSource=xxx\SQLExpress |
SQLServer数据源 |
DatabaseName=sqlmail |
DBMail数据库名称,缺省为sqlmail |
AuthSSPI=1 |
验证方式,0=帐号+密码,1=Windows集成方式 |
UserId=sa |
帐号 |
Password=12345678 |
密码 |
5.2 写websent记录直接发邮件
DBMail的待发邮件存储在websent表中,一条记录代表一封待处理的待发邮件(或者其它交互通知信息)。OA邮件系统写入一条适当取值的websent记录到数据库中,DBMail就会读入这条记录然并且执行邮件编码以及发送处理。
websent具体记录取值说明,请见下表所示。MailId为邮件的唯一ID,DBMail的邮件ID格式为YYYYMMDD+NNNNNNNN, 即年月日+8位序号,推荐此处的邮件ID将前两位改为“AA”,即AAYYMMDD+NNNNNNNN位序号,从而保证不重复。
WebSent取值说明表
字段 | 名称 | 类型 | 取值说明 |
Mailld | 邮件ID |
Varchar[16] |
主键,例如AA120101NNNNNN |
Account |
帐号 |
Varchar[255] |
必须完整格式,例如xx@123.com |
Manager |
经理帐号 |
Varchar[255] |
空 |
IPaddress |
IP地址 | Varchar[64] | 空 |
MailSize |
邮件大小 | Int | 0 |
MailFrom |
发件人 |
Nvarchar[255] |
可以是完整格式,XX |
MailTo |
收件人 | Ntext |
一个或多个目标收件人,逗号隔开 |
MailCc |
抄送人 |
NText |
一个或多个目标收件人,逗号隔开 |
MailBcc |
暗送人 |
NText |
一个或多个目标收件人,逗号隔开 |
MailDate |
邮件日期 |
Varchar[32] |
YYYY-MM-DD HH:NN:SS |
MailSubject |
邮件主题 | NText |
长度小于1024 |
MailBodyType |
邮件格式 | Int |
0=TEXT邮件,1=HTML邮件,二选其一 |
MailBodyText |
Text正文 | NText |
与MailBodyType相关联 |
MailBodyHtml |
Html正文 | NText |
与MailBodyType相关联 |
attachmentflag |
附件标志 |
Int |
0=无附件,2=有附件 |
checkupstatus |
审核标志 |
Int |
0 |
savetodraft |
草稿标志 |
Int |
0 |
savetosent |
存到发件箱 |
Int |
0=不保存,1=发送后保存到发件箱 |
priority |
是否紧急 |
Int |
0=普通,1=紧急 |
MailStatus |
待发标志 |
Int |
1 |
replyto |
回复地址 | Nvarchar[255] | |
isneedreceipt |
回执标志 | Int |
0=不回执,1=请求对方发回执 |
sendtype |
发送方式 | Int | 0 |
Sendtime |
发送时间 | Varchar[32] |
YYYY-MM-DD HH:NN:SS |
5.3 发送带附件的邮件
发送带附件的邮件的过程会复杂一些,需要同时写websent以及websentattach的两条记录。这里假设一封新邮件所生成的邮件ID为AA12010100000001,该邮件有两个附件,分别为 xxxx.doc和yyy.xls。
1. 为这两个附件生成指定格式的附件文件名,例如AA12010100000001_0001.dat、AA12010100000001_0002.dat。
2. 为xxx.doc生成一个新文件,c:\DBMail\data\mail\000000\ AA12010100000001_0001.dat,先写入\r\n\r\n四个字节,再读入xxx.doc的文件内容,附加在后面。
3. 为xxx.doc向websentattach表写入一条记录,具体的取值说明请见下表。
4. 为yyy.xls生成一个新文件,c:\DBMail\data\mail\000000\ AA12010100000001_0002.dat,先写入\r\n\r\n四个字节,再读入yyy.xls的文件内容,附加在后面。
6. 为yyy.xls向websentattach表写入一条记录,具体的取值说明请见下表。
7. 再按前一章发普通不带附件的邮件一样,写入websent表一条记录内容,只需要注意此时attachmentflag要设置为2,以表示这封邮件是有附件的。
WebSentAttach取值说明表
字段 | 名称 | 类型 | 取值说明 |
Maild | 邮件ID |
Varchar[255] |
主键,AA12010100000001 |
AttachId |
邮件ID |
Varchar[16] |
主键,0001或者0002 |
Account | 帐号 |
Varchar[255] |
必须完整格式,例如xx@123.com |
Location | 位置 | Int | 0 |
Direction | 方向 |
Int |
0 |
Attachtype | 附件类型 | Int | 0 |
ContentType | 内容类型 |
Varchar[255] |
附件内容类型,例如application/octet-stream |
AttachSize | 附件大小 | Int | 附件的原始大小 |
AttachName | 附件名称 |
Nvarchar[255] |
附件名称 |
StartTime | 上传时间 |
Varchar[32] |
空 |
数据库表的建表语句在DBMail\resource目录下,详细请参考“database.dbi”文件。