我现在有数据表tab1,字段有合同名称,合同类别,终止日期
合同类别: 类别A,类别B.....
我现在设置:
类别A的合同在终止日期前4个星期前系统自动发送提醒邮件,发送给用户a
类别B的合同在终止日期前2个星期前系统自动发送提醒邮件,发送给用户b
.....
并且能隔几天自动再发送提醒邮件请问如何才能实现这样的功能?最好能提供实例!
合同类别: 类别A,类别B.....
我现在设置:
类别A的合同在终止日期前4个星期前系统自动发送提醒邮件,发送给用户a
类别B的合同在终止日期前2个星期前系统自动发送提醒邮件,发送给用户b
.....
并且能隔几天自动再发送提醒邮件请问如何才能实现这样的功能?最好能提供实例!
解决方案 »
- 请教如何通过触发器来实现逻辑删除
- 请问谁有在windows2008service64位上面安装过oracle9.2.0.1.0
- 詭異的字段
- 已登录当前数据库,oracle数据库,用什么命令可以获得当前数据库名和SID和用户名?
- 求标准“插入到插入”触发器写法,简单问题,忘大家不吝赐教
- 重装了Oracle9i后,实例如何恢复??
- 求救!连接Oracle 数据库时解析不出服务名,出什么问题了?
- OracleOraHome90Agent总是不能启动
- 哪位有浪潮的数据归集工具?
- sql语句出错
- 求教索引专家: 终于找到查询缓慢的原因了? 但不知该如何解决!
- 能否对ORACLE数据库的修改进行跟踪监控,具体情况见内容
2.写一个邮件发送存储过程;
3.用job定时调用存储过程。
存储过程和job很简单不多说了,自己写吧。
给你一个简单的邮件发送的例子:
PROCEDURE sendmail1 (
sender IN VARCHAR2,
recipient IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2,
send IN VARCHAR2
)
IS
mailhost VARCHAR2(100) := '10.*.*.*';
mail_conn utl_smtp.connection; crlf VARCHAR2(2) := CHR (13) || CHR (10);
mesg VARCHAR2(3000);
BEGIN
--htp.p('Contacting SMTP server: '||mailhost||'...');
mail_conn := utl_smtp.open_connection (mailhost, 25);
--htp.p('Successfully connected to SMTP server: '||mailhost);
--mesg := 'Date: ' ||
-- TO_CHAR (SYSDATE,'dd Mon yy hh24:mi:ss') ||
--TO_CHAR (SYSDATE,'yy mm dd hh24:mi:ss') ||
mesg:= 'Date: ' || to_char(sysdate,'YYYY-MON-DD HH24:MI:SS','NLS_DATE_LANGUAGE=AMERICAN') || crlf ||
--crlf ||
'From: <' ||
sender ||
'>' ||
crlf ||
'Subject: ' ||
subject ||
crlf ||
'To: ' ||
recipient ||
crlf ||
'' ||crlf ||
message;
utl_smtp.helo (mail_conn, mailhost);
utl_smtp.mail (mail_conn, sender);
utl_smtp.rcpt (mail_conn, recipient);
utl_smtp.data (mail_conn, mesg);
utl_smtp.quit (mail_conn);
END SENDMAIL1;
还有就是mailhost VARCHAR2(100) := '10.*.*.*';
邮件服务器怎么来定义?
非常感谢!
---
BEGIN
UTL_MAIL.send(sender => '[email protected]',
recipients => '[email protected],[email protected]',
cc => '[email protected]',
bcc => '[email protected]',
subject => 'UTL_MAIL 测试',
message => '测试成功信息!');
END;
CREATE OR REPLACE PROCEDURE SEND_EMAIL( p_sender IN VARCHAR2, --发送者
p_recipient IN VARCHAR2, --接收者
p_title IN VARCHAR2, --主题
p_message IN VARCHAR2, --内容
p_priority IN NUMBER, p_server IN vARCHAR2, --接收邮件的服务器
p_port IN VARCHAR2 --端口号
) AS
l_mail_conn UTL_SMTP.CONNECTION;
BEGIN
l_mail_conn := UTL_SMTP.OPEN_CONNECTION(p_server, p_port); --默认端口号 UTL_SMTP.HELO(l_mail_conn, p_server);
UTL_SMTP.MAIL(l_mail_conn, p_sender);
UTL_SMTP.RCPT(l_mail_conn, p_recipient); UTL_SMTP.OPEN_DATA(l_mail_conn);
--Email头 /*
UTL_SMTP.WRITE_DATA(l_mail_conn,'From:' || p_sender || UTL_TCP.CRLF); --发送者
UTL_SMTP.WRITE_DATA(l_mail_conn,'To:' || p_sender || UTL_TCP.CRLF); --接收者
UTL_SMTP.WRITE_DATA(l_mail_conn,'Cc:' || p_sender || UTL_TCP.CRLF); --抄送者
UTL_SMTP.WRITE_DATA(l_mail_conn,'Subject:' || p_title || UTL_TCP.CRLF); --主题
*/
UTL_SMTP.WRITE_DATA(l_mail_conn,utl_raw.cast_to_raw(convert('From:' || p_recipient || utl_tcp.CRLF,'gb2312')));UTL_SMTP.WRITE_DATA(l_mail_conn,utl_raw.cast_to_raw(convert('To:' || p_sender || utl_tcp.CRLF,'gb2312')));UTL_SMTP.WRITE_DATA(l_mail_conn,utl_raw.cast_to_raw(convert('Cc: cccc' || utl_tcp.CRLF,'gb2312')));UTL_SMTP.WRITE_DATA(l_mail_conn,utl_raw.cast_to_raw(convert('Subject:' || p_title || utl_tcp.CRLF,'gb2312')));UTL_SMTP.WRITE_DATA(l_mail_conn,'X-Priority: ' || p_priority || UTL_TCP.CRLF); --优先级--内容
-- UTL_SMTP.WRITE_DATA(l_mail_conn, p_message); --内容UTL_SMTP.WRITE_DATA(l_mail_conn, utl_raw.cast_to_raw(convert(p_message,'gb2312')));UTL_SMTP.CLOSE_DATA(l_mail_conn);
UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
WHEN OTHERS THEN
UTL_SMTP.QUIT(l_mail_conn);
END;
参考以下:
http://otn.oracle.com/sample_code/tech/pl_sql/htdocs/Utl_Smtp_Sample.html