大神们帮小妹看看oracle发邮件的问题?解决者100分直接送!!

xierong2011 2015-03-18 11:42:06
oracle 11G 版本 Connected to Oracle Database 11g Release 11.2.0.3.0
执行没有报错,但是就是收不到邮件
谁解决了,小妹以身相许呀

CREATE OR REPLACE PROCEDURE send_mail(
p_recipient VARCHAR2, -- 邮件接收人
p_subject VARCHAR2, -- 邮件标题
p_message VARCHAR2 -- 邮件正文
)
IS
--下面四个变量请根据实际邮件服务器进行赋值
v_mailhost VARCHAR2(30) := 'smtp.qq.com'; --SMTP服务器地址
v_user VARCHAR2(30) := '1737217177'; --登录SMTP服务器的用户名;只是用户名,不包括163.com部分
v_pass VARCHAR2(20) := '**********'; --登录SMTP服务器的密码
v_sender VARCHAR2(50) := '1737217177@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 || '>'); --设置发件人
UTL_SMTP.rcpt(v_conn, '<' || p_recipient || '>'); --设置收件人
-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
v_msg :='Date:'|| TO_CHAR(SYSDATE, 'dd mon yy hh24:mi:ss')
|| UTL_TCP.CRLF || 'From: '|| v_sender || '<' || v_sender || '>'
|| UTL_TCP.CRLF || 'To: ' || p_recipient || '<' || p_recipient || '>'
|| UTL_TCP.CRLF || 'Subject: ' || p_subject
|| UTL_TCP.CRLF || UTL_TCP.CRLF -- 这前面是报头信息
|| p_message; -- 这个是邮件正文
UTL_SMTP.open_data(v_conn); --打开流
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --这样写标题和内容都能用中文
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 send_mail;
...全文
1237 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xierong2011 2015-04-14
  • 打赏
  • 举报
回复
引用 14 楼 baidu_27054623 的回复:
begin dbms_network_acl_admin.create_acl ( acl => 'sendmail_acl.xml', description => 'sendmail_acl', principal => 'SYSTEM', --system为需要发送邮件的用户,必须大写,下同 is_grant => true, privilege => 'resolve' ); end; / begin dbms_network_acl_admin.add_privilege ( acl => 'sendmail_acl.xml', principal => 'SYSTEM', is_grant => true, privilege => 'connect' ); end; / begin dbms_network_acl_admin.assign_acl( acl => 'sendmail_acl.xml', host => '*' ); end; / 进入qq邮箱,设置---帐户,开启POP3/SMTP服务。 OK,祝你成功!
100分全额送上,请笑纳
xierong2011 2015-04-14
  • 打赏
  • 举报
回复
引用 14 楼 baidu_27054623 的回复:
begin dbms_network_acl_admin.create_acl ( acl => 'sendmail_acl.xml', description => 'sendmail_acl', principal => 'SYSTEM', --system为需要发送邮件的用户,必须大写,下同 is_grant => true, privilege => 'resolve' ); end; / begin dbms_network_acl_admin.add_privilege ( acl => 'sendmail_acl.xml', principal => 'SYSTEM', is_grant => true, privilege => 'connect' ); end; / begin dbms_network_acl_admin.assign_acl( acl => 'sendmail_acl.xml', host => '*' ); end; / 进入qq邮箱,设置---帐户,开启POP3/SMTP服务。 OK,祝你成功!
谢谢啦 根据你的可以发送啦
xierong2011 2015-04-14
  • 打赏
  • 举报
回复
引用 15 楼 jdsnhan 的回复:
这么好的妹子,收了。 环境:10.2.0.4 首先,确认服务器能连通邮箱,或者能访问外网,或能连通公司内部邮件系统 v_user VARCHAR2(30) := '1737217177'; --登录SMTP服务器的用户名;只是用户名,不包括163.com部分 只是用户名,不包括163.com 部分,这个和邮件系统的认证有关系。 我测试263的邮箱:smtpcom.263xmail.com 如果不包含后缀,会抛异常:ORA-29279: SMTP 永久性错误: 535 Error: authentication failed 加上后缀就没问题啦。 测试通过。
10g测试貌似就没有问题,11g好像有些函数有变化
jdsnhan 2015-04-02
  • 打赏
  • 举报
回复
既然用DBMS_OUTPUT打印错误,就需要把他打开。 set serveroutput on
jdsnhan 2015-04-02
  • 打赏
  • 举报
回复
这么好的妹子,收了。 环境:10.2.0.4 首先,确认服务器能连通邮箱,或者能访问外网,或能连通公司内部邮件系统 v_user VARCHAR2(30) := '1737217177'; --登录SMTP服务器的用户名;只是用户名,不包括163.com部分 只是用户名,不包括163.com 部分,这个和邮件系统的认证有关系。 我测试263的邮箱:smtpcom.263xmail.com 如果不包含后缀,会抛异常:ORA-29279: SMTP 永久性错误: 535 Error: authentication failed 加上后缀就没问题啦。 测试通过。
xierong2011 2015-04-01
  • 打赏
  • 举报
回复
引用 9 楼 shuipaomo062 的回复:
你的代码是没有问题的,报什么错误呢,没有错误,那应该是你邮箱问题
关键是不报什么错 所以就无从下手。。
Tiger_Zhao 2015-04-01
  • 打赏
  • 举报
回复
是某些情况下SMTP服务的限制,不是Oracle的限制啊!
xierong2011 2015-04-01
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
发件人和收件人是否是同一个账号? 某些情况下这样是不行的。 又:要分不要人
不是同一账号呀
xierong2011 2015-04-01
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
发件人和收件人是否是同一个账号? 某些情况下这样是不行的。 又:要分不要人
这个貌似是10G的呀 ,11G好像执行把相应的函数变了
baidu_27054623 2015-04-01
  • 打赏
  • 举报
回复
begin dbms_network_acl_admin.create_acl ( acl => 'sendmail_acl.xml', description => 'sendmail_acl', principal => 'SYSTEM', --system为需要发送邮件的用户,必须大写,下同 is_grant => true, privilege => 'resolve' ); end; / begin dbms_network_acl_admin.add_privilege ( acl => 'sendmail_acl.xml', principal => 'SYSTEM', is_grant => true, privilege => 'connect' ); end; / begin dbms_network_acl_admin.assign_acl( acl => 'sendmail_acl.xml', host => '*' ); end; / 进入qq邮箱,设置---帐户,开启POP3/SMTP服务。 OK,祝你成功!
小伙要自信 2015-03-23
  • 打赏
  • 举报
回复
你的代码是没有问题的,报什么错误呢,没有错误,那应该是你邮箱问题
小伙要自信 2015-03-23
  • 打赏
  • 举报
回复
这个smtp服务器的密码是什么东东
binsweet 2015-03-23
  • 打赏
  • 举报
回复
妹子,参考以下文档,至于那个啥,还是算了,家里键盘不好跪 http://www.cnblogs.com/gnielee/archive/2009/08/06/1540578.html
Tiger_Zhao 2015-03-19
  • 打赏
  • 举报
回复
发件人和收件人是否是同一个账号? 某些情况下这样是不行的。 又:要分不要人
xierong2011 2015-03-18
  • 打赏
  • 举报
回复
xierong2011 2015-03-18
  • 打赏
  • 举报
回复
难道就没人会这个吗
於黾 2015-03-18
  • 打赏
  • 举报
回复
同没做过 建议你先确定数据服务器能连上邮件服务器,否则写啥代码都是白搭
xierong2011 2015-03-18
  • 打赏
  • 举报
回复
引用 2 楼 wildwave 的回复:
被你的以身相许吓跑了 我定力强没吓跑,但是我没做过邮件发送
您用我这代码帮忙看看呗
小灰狼W 2015-03-18
  • 打赏
  • 举报
回复
被你的以身相许吓跑了 我定力强没吓跑,但是我没做过邮件发送
经常使用电脑可能也遇到过了! 突然‘咚’的一声 提示 内存不能为read 这个问题我以前也遇到过不知道怎么解决 现在终于有办法了!呵呵! 我们就看看是什么原因引起的吧,另外附一个小工具修复见下面附件 总结下大概以下9个原因 1、驱动不稳定,与系统不兼容,这最容易出现内存不能为 Read 或者文件保护(主要原因) 2、系统安装了一个或者多个流氓软件,这出现 IE 或者系统崩溃的机会也比较大,也有可能出现文件保护 3、系统加载的程序或者系统正在运行的程序之前有冲突,尤其是部杀毒软件监控程序 4、系统本身存在漏洞,导致容易受到网络攻击。 5、病毒问题也是主要导致内存不能为 Read、文件保护、Explorer.exe 错误…… 6、如果在玩游戏时候出现内存不能为 Read,则很大可能是显卡驱动不适合(这里的不适合有不适合该游戏、不适合电脑的显卡)也有可能是 系统版本不够新或者不符合该游戏、显卡驱动 7、部软件本身自身不足的问题 8、电脑硬件过热,也是导致内存不能为 Read 的原因之一。 9、电脑内存与主板兼容性不好也是导致内存不能为 Read 的致命原因! 以上大概就是目前可以引起系统提示 内存不能为read的原因了 另外软件是针对只是针对部原因引起的内存不为read所做修复,不是100%有效,大家可以试试看 说下原理: 就是批处理使用 regsvr32命令 将动态链接库文件重新注册 (system32下的所有 .dll 和 .ocx 文件;) 注意:由于修复工具会重新注册 system32下的所有 .dll 和 .ocx 文件 此操作对杀毒软件来说属于敏感操作,所以建议使用修复工具的时候,请禁用杀毒软件,以免部杀毒误报!jie
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧