暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle APEX发送带有HTML图像和文本的电子邮件

ASKTOM 2020-12-10
848

问题描述

我需要向员工发送生日电子邮件,并且需要修改一个过程以包括以下详细说明的模板。

每当它是员工的生日,即sysdate = employee_birthday,一封电子邮件就会在那一天被触发到一个特定的电子邮件id。

电子邮件的格式是主要的挑战,因为它需要作为问候模板。

我有3张表:

1)

EMP_DATA

   CREATE TABLE EMP_DATA(ID NUMBER, EMP_NAME VARCHAR2(100),EMP_BIRTHDAY DATE,EMP_PIC BLOB,EMAIL VARCHAR2(1000),CONSTRAINT (ID_PK) PRIMARY KEY(ID) USING INDEX ENABLE)
        
        INSERT INTO EMP_DATA VALUES(1,'Allan Pedro',to_date('12/12/1990','DD/MM/YYYY'),null,alpha@itorg.com);
        
        INSERT INTO EMP_DATA VALUES(2,'Selena Pedrick',to_date('12/12/1990','DD/MM/YYYY'),null,alpha@itorg.com);

这是虚拟数据,在任何一天,一名或多名员工可能有生日。

2) “创建表格生日 _ 问候 (问候日期,问候斑点)”

3)'创建表愿望 (愿望日期,愿望VARCHAR2(4000))'

插入wish(to_date (“12/12/2020”,“dd/MM/yyyy”),“战士是拥有激光般的焦点的普通人。我们希望你在生活中实现你想要的一切。

我们希望你成功。

祝一切顺利!)

我不知道如何保存图像,因此使用线程中建议的方法,为emp_pic和问候pic创建了2个区域,并将它们存储在表中: EMP_BLOB_TBL和GREETING_BLOB_TBL。

但是,当我从应用程序上传图像时,页面上总是出现错误,提示上传图像错误 (但是这是一个不同的问题)

https://community.oracle.com/tech/developers/discussion/4090790/how-to-upload-an-image-file-into-a-table-blob-in-apex-5-for-dummies

    CREATE TABLE  "EMP_BLOB_TBL"    (  "IMAGE_NAME" VARCHAR2(400),      "FILENAME" VARCHAR2(350),      "MIME_TYPE" VARCHAR2(255),      "DOC_SIZE" NUMBER,     "CHARSET" VARCHAR2(128),      "LAST_UPDATE_DATE" DATE,     "CONTENT" BLOB)
    CREATE TABLE  "GREETING_BLOB_TBL"    (  "IMAGE_NAME" VARCHAR2(400),      "FILENAME" VARCHAR2(350),      "MIME_TYPE" VARCHAR2(255),      "DOC_SIZE" NUMBER,     "CHARSET" VARCHAR2(128),      "LAST_UPDATE_DATE" DATE,     "CONTENT" BLOB)


现在,我仍然可以上传并保存这些表中的图像,因此请转到需求详细信息:

对于电子邮件的employee_pic,图像名称将与员工名称匹配。

因此,当上传员工图片时,它会有员工的名字。所以对于艾伦·佩德罗来说,image_name也是艾伦·佩德罗。

类似于问候语,表birthday _ 问候语有日期列。
因此,问候图像以名称为日期上传。

现在,需要做的是我为此编写的程序。

我已经编写了用于在生日那天发送电子邮件的基本程序,并在数据库中设置了每天运行的工作。

需要修改的程序:

 CREATE OR REPLACE PROCEDURE GREETINGS
    IS
    BEGIN
    
    
      FOR i IN (SELECT emp_name,email,emp_birthday from emp_data where substr(to_date(emp_birthday,'MM/DD/YYYY'),1,6) = substr(to_date(SYSDATE,'DD/MM/YYYY'),1,6))
      LOOP
    
    
      APEX_MAIL.SEND(
      p_to        => i.email,
      p_cc => NULL,
      p_from      => 'no.reply@yourdomain.com',
      p_subj      => 'Birthday Celebrations',
      p_body      => 'Birthday greetings'
      );
      END LOOP;
      APEX_MAIL.PUSH_QUEUE;
    END GREETINGS;


现在,在每天 (生日) 生成的预期电子邮件格式 (按显示顺序) 是应该生成的修改过程是:

问候图像
生日员工/模板中的员工姓名和照片
愿望 (文本)

因此,条件将是:

EMP_DATA.EMP_NAME = EMP_BLOB_TBL.IMAGE_NAME到pic员工的照片。(名称匹配)

EMP_DATE.EMP_BIRTHDAY = BIRTHDAY_GREETING.GREETING_DATE,以显示问候图像。(匹配日期)

同样,EMP_DATA.EMP_BIRTHDAY = 愿望。愿望日期

日期将在月份和日期上进行匹配,就像我在程序中提出的条件一样,以DD/MM格式转换并截断以删除年份部分,以便它们完全匹配。

因此,基本上,所有与员工生日日期匹配的问候和愿望日期内容都需要在电子邮件中显示

Apex版本是20.2的

专家解答

在电子邮件中包含图像的最常见方法是将它们链接回源。

尽管不是电子邮件,但AskTOM本身就是一个很好的例子。如果您进入主页,则将克里斯和我的照片与每个问题相关联。查看主页的来源,这些图像直接来自AskTOM,即

img title = "康纳·麦克唐纳" src = "f?p = 100: 下载:: 应用程序进程 = 获取图像:: 获取类型,获取id: ADMIN_IMG,40395599290474422317991564391108877671"

因此,在AskTOM内部,我们有一个名为 “下载” 的页面,用于调用应用程序进程,该进程又从数据库中获取一个blob。那个应用程序过程代码看起来像这样

declare
   l_image     blob;
   l_name      varchar2(255);
   l_mime_type varchar2(255);
   l_length    number;
begin
   select file_content,
       file_name,
       file_mime_type,
       dbms_lob.getlength(file_content)
   into l_image,
       l_name,
       l_mime_type,
       l_length
   from asktom_images
   where id = :GET_ID;
   
   sys.htp.init();
   sys.owa_util.mime_header(
      nvl(l_mime_type, 'application/octet'),
      false
   );
   sys.htp.p('Cache-Control: max-age=36000');
   sys.htp.p('Content-Length: ' || l_length);
   sys.htp.p('Content-Disposition: inline; filename="' || l_name || '"; filename*=UTF-8''''' || l_name);
   
   sys.owa_util.http_header_close;
   sys.wpg_docload.download_file(l_image);
   apex_application.stop_apex_engine;
end;


可以轻松定制,以满足您的员工生日需求。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论