登录到SMTPserver发送邮件,支持HTML

  1. CREATE OR REPLACE PROCEDURE send_mail(
  2.        p_recipient VARCHAR2, -- 邮件接收人
  3.        p_subject   VARCHAR2, -- 邮件标题
  4.        p_message   VARCHAR2  -- 邮件正文
  5.  )
  6.  IS
  7.  
  8.       --以下四个变量请依据实际邮件server进行赋值
  9.       v_mailhost VARCHAR2(30) := 'smtp.163.com'; --SMTPserver地址
  10.       v_user     VARCHAR2(30) := 'system@163.com'; --登录SMTPserverusername
  11.       v_pass     VARCHAR2(20) := 'System123'; --登录SMTPserverpassword
  12.       v_sender   VARCHAR2(50) := 'system@163.com'; --发送者邮箱。一般与 ps_user 相应
  13.  
  14.       v_conn  UTL_SMTP. connection ; --到邮件server的连接
  15.       v_msg varchar2(4000);  --邮件内容
  16.  
  17.  BEGIN
  18.  
  19.       v_conn := UTL_SMTP.open_connection(v_mailhost, 25);
  20.       UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函数
  21.       --否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.
  22.  
  23.       UTL_SMTP.command(v_conn, 'AUTH LOGIN' );   -- smtpserver登录校验
  24.       UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
  25.       UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
  26.  
  27.       UTL_SMTP.mail(v_conn, v_sender);     --设置发件人
  28.       UTL_SMTP.rcpt(v_conn, p_recipient);  --设置收件人
  29.  
  30.       -- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
  31.       v_msg := 'Date:' || TO_CHAR(SYSDATE, 'dd mon yy hh24:mi:ss' )
  32.           || UTL_TCP.CRLF || 'From: ' || '<' || v_sender || '>'
  33.           || UTL_TCP.CRLF || 'To: ' || '<' || p_recipient || '>'
  34.           || UTL_TCP.CRLF || 'Subject: ' || p_subject
  35.           || UTL_TCP.CRLF || 'Content-Type:text/html;charset=GBK'
  36.           || UTL_TCP.CRLF || UTL_TCP.CRLF  -- 这前面是报头信息
  37.           || p_message;    -- 这个是邮件正文
  38.  
  39.       UTL_SMTP.open_data(v_conn); --打开流
  40.       UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(convert(v_msg,'ZHS16GBK'))); --这样写标题和内容都能用中文
  41.       UTL_SMTP.close_data(v_conn); --关闭流
  42.       UTL_SMTP.quit(v_conn); --关闭连接
  43.  
  44.  EXCEPTION
  45.  
  46.       WHEN OTHERS THEN
  47.           DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
  48.           DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
  49.  
  50.  END send_mail;

Oracle PLSQL通过SMTP发送E-MAIL邮件代码的更多相关文章

  1. centos7 配置mailx使用外部smtp发送外网邮件

    1- 安装 1.1- 安装mailx yum install mailx -y 2- 配置 2.1- 配置外部发件邮箱 vim /etc/mail.rc 在最后加上: //如果不存在,则编辑/etc/ ...

  2. python使用SMTP发送qq/sina邮件

    python使用qq邮箱(个人邮箱)发送邮件需开启qq邮箱的SMTP服务 在设置中开启pop3/SMTP服务,返回的密码就是之后代码中登录使用账户密码(在完整代码中标识了出来) 之后出现如下错误 sm ...

  3. Python3+smtplib+poplib+imaplib实现发送和收取邮件(以qq邮箱为例)

    一.说明 1.1 程序说明 (1)smtp是邮件发送协议:pop和imap都是邮件接收协议,两者的区别通常的说法是imap的操作会同步到邮箱服务器而pop不会,表现上我也不是很清楚 (2)本程序实现使 ...

  4. JAVA 发送各种邮箱邮件 javamail

    QQ邮箱 /** * 单条发送 * @param mail 邮件对象,包含发送人.邮件主题.邮件内容 * @param recipients 收件人 * @throws AddressExceptio ...

  5. .Net Mail SMTP 发送网络邮件

    刚刚迈入"开发"的行列 一直有一个想法 我什么时候能给我庞大的用户信息数据库给每一位用户邮箱发送推荐信息呢? 刚迈入"编程两个月的时间" 我采用 SMTP 发送 ...

  6. PHP+socket+SMTP、POP3协议发送、接收邮件

    .实现SMTP协议的类dsmtp.cls.php:<?php            , $webname=).);     } } .实现POP3协议的类dpop3.cls.php: <? ...

  7. Spring mail 邮件发送的简单实现

    package cn.taskSys.utils; import java.util.Properties; import org.springframework.mail.MailException ...

  8. Linux mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过”mail“命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum install -y send ...

  9. Java Mail 邮件发送简单封装

    上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...

随机推荐

  1. RQNOJ 34 紧急援救

    题目描述 话说2007年8月5日,Mike博士神秘失踪了,最后发现是被外星人绑架了,幸好外星人目前还是在地球上活动,并且知道外星人不了解地球,幸好,Milk博士身上有无线信号发送装置,我们终于确定了他 ...

  2. Autotools Mythbuster

    Preface Diego Elio "Flameeyes" Pettenò Author and Publisher <flameeyes@flameeyes.eu> ...

  3. Synthesis of memory barriers

    A framework is provided for automatic inference of memory fences in concurrent programs. A method is ...

  4. VS MFC 添加菜单

    新建出来的基于对话框的MFC工程是没有菜单的,如何在对话框中添加菜单?又如何给菜单的菜单项添加事件应用响应?下面小编来具体描述一下,希望能帮助到一些人. 工具/原料   电脑一台 VS2010 方法/ ...

  5. C# Log4Net使用示例

    using log4net; using log4net.Config; using System; using System.IO; namespace Three.Logging { /// &l ...

  6. c# 防止重复运行 弹出已运行窗口并传递消息

    最近在写一款软件 软件是用来接收其他程序传递过来的命令行,并形成列表 大概的最终效果就像下图一样 原本为了程序美观是打算用listbox自绘列表,字和图片都绘制好了发现自己不会绘制按钮 所以最终采用了 ...

  7. ReportView控件的使用

    ReportView控件的使用Posted on 2012-01-06 17:02 随遇 阅读(3006) 评论(0)  编辑 收藏 最近使用了ReportView控件绑定数据,总结下: 1.在设计器 ...

  8. [BZOJ1072][SCOI2007]排列perm 状压dp

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2488  Solved: 1546[Submit][St ...

  9. virtualbox centos6.6 minimal 与宿主机win7共享文件夹

    1.virtualbox, 设置-共享文件夹,设置好共享文件夹win7dir 2.centos 创建文件夹比如share 3.mount -t vboxsf win7dir /root/share 4 ...

  10. FZU -2212 Super Mobile Charger(水题)

     Problem 2212 Super Mobile Charger Accept: 1033    Submit: 1944Time Limit: 1000 mSec    Memory Limit ...