利用UTL_SMTP发送邮件

2024-04-01 13:08
文章标签 邮件 发送 smtp utl

本文主要是介绍利用UTL_SMTP发送邮件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有空研究了一下用Oracle自带UTL_SMTP发送邮件的方法,标准步骤如下:

1.建立到SMTP Server的连接: UTL_SMTP.OPEN_CONNECTION
2.执行初始握手信号: UTL_SMTP.EHLO/HELO
2.5 设置SMTP服务器登录校验(看需要)
3.设置发件人: UTL_SMTP.MAIL
4.设置收件人: UTL_SMTP.RCPT
5.打开数据流: UTL_SMTP.OPEN_DATA
6.写邮件内容: UTL_SMTP.WRITE_RAW_DATA
包括
邮件的头部
Date: 2012 12 19 17:25:00||UTL_TCP.CRLF
From: 发件人||UTL_TCP.CRLF
To:收件人||UTL_TCP.CRLF
Subject:邮件主题|| UTL_TCP.CRLF || UTL_TCP.CRLF
邮件正文
7.关闭数据流: UTL_SMTP.CLOSE_DATA
8.退出连接: UTL_SMTP.QUIT

参考样例:

CREATE OR REPLACE PROCEDURE Send_Mail(p_Recipient VARCHAR2, -- 邮件接收人p_Subject   VARCHAR2, -- 邮件标题p_Message   VARCHAR2 -- 邮件正文) IS--下面四个变量请根据实际邮件服务器进行赋值v_Mailhost VARCHAR2(30) := 'mail.gxlu.com.cn'; --SMTP服务器地址v_User     VARCHAR2(30) := 'abc'; --登录SMTP服务器的用户名v_Pass     VARCHAR2(20) := '123456'; --登录SMTP服务器的密码v_Sender   VARCHAR2(50) := 'abc@gxlu.com.cn'; --发送者邮箱,一般与 ps_user 对应v_Conn     Utl_Smtp.Connection; --到邮件服务器的连接v_Msg      VARCHAR2(4000); --邮件内容
BEGINv_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, 'yyyy mm dd hh24: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.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); --关闭连接
EXCEPTIONWHEN OTHERS THENDbms_Output.Put_Line(Dbms_Utility.Format_Error_Stack);Dbms_Output.Put_Line(Dbms_Utility.Format_Call_Stack);
END Send_Mail;

原文出自 http://blog.itpub.net/14854071/viewspace-752889/

这篇关于利用UTL_SMTP发送邮件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867236

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示; 代码如下: Demo07.jrxml <?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.6.

node.js实现阿里云短信发送

效果图 实现 一、准备工作 1、官网直达网址: 阿里云 - 短信服务 2、按照首页提示依次完成相应资质认证和短信模板审核; 3、获取你的accessKeySecret和accessKeyId; 方法如下: 获取AccessKey-阿里云帮助中心 4、获取SignName(签名名称)和 TemplateCode(模板code); 二、代码实现 1、项目结构 【/c

springboot项目编写发送异常日志到企微工具包

1.创建基础Bean public final class ThreadFactory implements java.util.concurrent.ThreadFactory {private static final AtomicInteger poolNumber = new AtomicInteger(1);private final ThreadGroup group;priva