问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在使用 UTL_SMTP 发送邮件时,经常会发送不成功

发布网友 发布时间:2022-04-08 21:52

我来回答

1个回答

热心网友 时间:2022-04-08 23:21

(注释:如果你的应用程序使构建在Oracle 8i的基础之上,前提是运行维护在Oracle 10g或以上版本,那么你也可以通过旧的utl_smtp工具包来发送电子邮件。) utl_smtp代码的一个优点就是可以在Oracle 10g上正常运行,所以我们不需要用utl_mail来替代utl_smtp工具包。虽然utl_mail完全替代utl_smtp的一天勿庸置疑会降临,不过现在utl_smtp还能够满足我们的需求。 首先,确认utl_smtp工具包已经安装在你的系统里(当然是在SYS架构里)。如果你还没有安装这个工具包,可以在你的ORACLE_HOME\RDBMS\admin文件夹中找到utlsmtp.sql脚本。你还需要utl_tcp包;同样的,如果你发现utl_tcp包还没有加载,也可以从跟utlsmtp.sql脚本相同的路径找到utltcp.sql脚本。最后,你还需要知道你的企业SMTP服务器的URL。(注意,下面的例子不适用于对SMTP进行了安全设置的服务器,如Gmail) 程序包说明语句: 以下是引用片段: create or replace PACKAGE sendmail IS procere send (p_sender varchar2, p_recipient varchar2, p_subject varchar2, p_body varchar2 default null); end sendmail;仔细观察以上语句的主体和下面的程序包,你可能会发现send的公共模式(public method)依赖于被称为common的私有模式(private method),这样以后我们可以对这个程序包进行扩展,并为大家展示怎样发送二进制大对象(blob)附件。例如,如果你生成了一份PDF文档,并把它保存在你的数据库里,你可以会想要把它作为电子邮件的附件发送出去, common模式就是用来完成这个任务的。将要用到的代码来自于基本send模式和send_blob模式。 以下就是程序包的主体: 以下是引用片段: create or replace PACKAGE BODY sendmail IS procere common (p_sender varchar2, p_recipient varchar2, p_subject varchar2, c out utl_smtp.connection) is v_recipient varchar2(1000); begin --make connection to smtp c := utl_smtp.open_connection('smtp.example.com'); --identify the domain of the sender utl_smtp.helo(c, 'example.com'); --start a mail, specify the sender utl_smtp.mail(c, p_sender); --identify recipient utl_smtp.rcpt(c, v_recipient); --start the mail body utl_smtp.open_data(c); utl_smtp.write_data(c, 'From: ' || p_sender || utl_tcp.crlf); utl_smtp.write_data(c, 'To: ' || p_recipient || utl_tcp.crlf); utl_smtp.write_data(c, 'Subject: ' || p_subject || utl_tcp.crlf); exception when utl_smtp.transient_error or utl_smtp.permanent_error then utl_smtp.quit(c); raise; when others then raise; end common; procere send (p_sender varchar2, p_recipient varchar2, p_subject varchar2, p_body varchar2 default null) is c utl_smtp.connection; begin common(p_sender, p_recipient, p_subject, c); utl_smtp.write_data(c, 'Content-Type: text/html' || utl_tcp.crlf); utl_smtp.write_data(c, utl_tcp.crlf || p_body); utl_smtp.close_data(c); utl_smtp.quit(c); exception when utl_smtp.transient_error or utl_smtp.permanent_error then utl_smtp.quit(c); raise; when others then raise; end send; end sendmail;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有的时候脑海里有旋律。但是想不出来不知道是什么乐器演奏的。。只能... ...就听不准了 好像被和弦带偏了似的... 怎么办 钢琴 ...想用钢琴弹出来,但老是找不准音。这种情况怎么办呢,怎么练习,要是... DNF女枪炮师110级装备选择指南(全面解析女枪炮师110级装备搭配)_百度... 性生活出血要做什么检查 英国旅游签证办理需要哪些材料? 结婚证在女方户籍地办理有必要吗 结婚的时候在女方户口所在地领结婚证可以吗 结婚证可以在女方户口所在地领吗? 为什么有的微信号显示用户不存在了 怎么用微软语音输入法,输入英文 讯飞语音输入法支持英文语音输入吗? 请问如何语音输入英文? 优酷怎么能这么恶心!前几天1分钱送7天会员,时间还没到,夜里自动续费下月会员!!还有两天才过期!凭 现在驾驶证扣分了,怎么处理, 驾驶证扣分了怎么办? 我忘记qq密码了,怎么办 驾驶证扣分应该怎么消除,去哪消? 华为TE系列终端通过主叫呼集方式召集会议失败,提示“注册密码认证失败”,如何处理? 驾驶证扣分了怎么处理? 所有的笔记本电脑都有光驱吗? 华为30s与华为9XPRo价格差600买那个好? 联想笔记本电脑是否带光驱 你如何看待市场上的量化基金? 巴菲特和索罗斯你更欣赏哪一位大师? 蓝莓山药怎么样做味道鲜美,上桌非常受欢迎? 蓝莓山药做法有哪些? 2023年国家基金申报系统什么时间关闭 国家基金签字盖章页 单面还是双面 IT行业哪种技术工资最高 《七律 长征》中的故事 求一个英文语音输入法? 能识别英文的输入法,我讲英文他就出英文的,手机用的. human made dry alls是什么意思? madebag书包是原创吗 请问北京哪里有卖nigo 的品牌 human made ,三里屯的beams里有吗? human made哪里有卖 HUMAN MADE 20AW中文叫什么? Human League的《Human》 歌词 电脑上的wifi被卸载了怎办? 分手以后很久我会去找以前的前任在一块聊天什么的这是为啥是很久以前的前任? 笔记本无线网卡驱动被无意卸载 分手后还能找前任联系吗 we2000备用金怎么删出卡号 wifi驱动被删了怎么办 微众银行we2000怎么换绑银行卡 前任分手就无缝衔接,并且不公开继续找前任聊天是为什么? 分手后女生有男朋友了,为什么还找前男友聊天? 我注消了we2000帐户里面绑定银行卡还有效吗 戴尔笔记本wifi驱动不小心删了,怎么办 分手后再去找前任会怎样?