千家信息网

怎么在ORACLE中配置邮件服务器

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,怎么在ORACLE中配置邮件服务器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 创建 ACLBEGIN dbms_
千家信息网最后更新 2024年10月11日怎么在ORACLE中配置邮件服务器

怎么在ORACLE中配置邮件服务器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1 创建 ACL

BEGIN  dbms_network_acl_admin.create_acl(acl     => 'email.xml',                   DESCRIPTION => 'Enables network permissions for the e-mail server',                   principal  => 'C##ESD_MONITOR', --表示赋予哪个用户 必须大写                   is_grant  => TRUE,                   PRIVILEGE  => 'resolve',                   start_date => NULL,                   end_date  => NULL);END;

2 赋予权限

begindbms_network_acl_admin.add_privilege(acl    => 'email.xml', --同上xml名称                     principal => 'C##ESD_MONITOR', --表示赋予哪个用户 必须大写                     is_grant  => TRUE,                     privilege => 'connect', --权限名                     start_date => null,                     end_date  => null);end;

3 设置端口

begin dbms_network_acl_admin.assign_acl (    -- 该段命令意思是允许访问acl名为utl_sendmail.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。  acl    => 'email.xml',  host    => '*'-- ,       -- ip地址或者域名,填写http://localhost:9000/hello与http://localhost:9000/是会报host无效的                      -- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题  -- lower_port => 9000,           -- 允许访问的起始端口号  -- upper_port => Null           -- 允许访问的截止端口号 ); end;

4 查询权限设置情况

SELECT acl,    principal,    privilege,    is_grant,    TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,    TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date FROM dba_network_acl_privileges;

5 创建邮件发送存储过程

create or replace procedure send_mail(p_recipient VARCHAR2, -- 邮件接收人           p_subject  VARCHAR2, -- 邮件标题           p_message  VARCHAR2, -- 邮件正文           p_type   number -- 1文本 2html           ) as  --下面四个变量请根据实际邮件服务器进行赋值  v_mailhost VARCHAR2(30) := 'smtp.qq.com'; --SMTP服务器地址  v_user   VARCHAR2(30) := '111@qq.com'; --登录SMTP服务器的用户名  v_pass   VARCHAR2(20) := '111'; --登录SMTP服务器的密码 授权码  v_sender  VARCHAR2(50) := '111@qq.com'; --发送者邮箱,一般与 ps_user 对应  v_conn UTL_SMTP.connection; --到邮件服务器的连接  v_msg varchar2(4000); --邮件内容 BEGIN  v_conn := UTL_SMTP.open_connection(v_mailhost, 25);  UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函数  --否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.  UTL_SMTP.command(v_conn, 'AUTH LOGIN'); -- smtp服务器登录校验  UTL_SMTP.command(v_conn,           UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));  UTL_SMTP.command(v_conn,           UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));  UTL_SMTP.mail(v_conn, '<' || v_sender || '>'); --设置发件人 注:网上很多资料直接写v_sender,这样写会报ORA-29279: SMTP 500 error  UTL_SMTP.rcpt(v_conn, '<' || p_recipient || '>'); --设置收件人  UTL_SMTP.open_data(v_conn); --打开流  if p_type = 1 then   -- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行   v_msg := 'Date:' || TO_CHAR(SYSDATE, 'dd mon yy hh34:mi:ss') ||        UTL_TCP.CRLF || 'From: ' || '<' || v_sender || '>' ||        UTL_TCP.CRLF || 'To: ' || '<' || p_recipient || '>' ||        UTL_TCP.CRLF || 'Subject: ' || p_subject || UTL_TCP.CRLF ||        UTL_TCP.CRLF -- 这前面是报头信息        || p_message; -- 这个是邮件正文   UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --这样写标题和内容都能用中文  elsif p_type = 2 then   UTL_SMTP.write_data(v_conn,             'From:' || '<' || v_sender || '>' || utl_tcp.CRLF);   UTL_SMTP.write_data(v_conn,             'To:' || '<' || p_recipient || '>' ||             utl_tcp.crlf);   UTL_SMTP.write_raw_data(v_conn,               UTL_RAW.cast_to_raw(convert('Subject:' ||                             p_subject ||                             utl_tcp.CRLF,                             'ZHS16GBK')));   UTL_SMTP.write_raw_data(v_conn,               UTL_RAW.cast_to_raw(convert('Content-Type:text/html;charset=GBK' ||                             utl_tcp.CRLF,                             'ZHS16GBK')));   UTL_SMTP.write_data(v_conn, utl_tcp.CRLF);   UTL_SMTP.write_raw_data(v_conn,               UTL_RAW.cast_to_raw(convert(p_message,                             'ZHS16GBK'))); --这样写标题和内容都能用中文  end if;  UTL_SMTP.close_data(v_conn); --关闭流  UTL_SMTP.quit(v_conn); --关闭连接 EXCEPTION  WHEN OTHERS THEN   DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);   DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack); END;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

邮件 服务器 服务 内容 用户 地址 权限 标题 正文 会报 登录 信息 口号 域名 大写 情况 报头 端口 中文 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重庆联想服务器虚拟化系统云空间 嘉定区创新数据库服务报价行情 dns根节点服务器挂了 pd数据库管理器 mysql电脑怎么还原数据库 网络安全主题创意绘画一年级 海珠区新一代网络技术开发动态 郧阳区服务软件开发 杭州趣泛网络技术公司是国企吗 律师平台软件开发 江苏电商软件开发工具 猫和老鼠国际服连接服务器失败 和平精英在哪个服务器可以联机 人社网络安全宣传周总结 表格生成另一个表格数据库 第七城网络技术有限公司 蒲公英串口服务器红灯 软件开发产品管理能力理解 网络安全证书失效因为什么 山东软件开发公司招聘 江财数据库实验十答案 戴尔服务器t40e序列号 数据库如何各表关系 数据库服务器填什么 北京网络安全博士 菲拓网络技术有限公司 延庆区正规软件开发质量服务 只只大冒险无法连接到内容服务器 数据库原理联合主键 高青制造业软件开发
0