电子邮件页脚图像模糊(不是每个)Oracle PL/SQL

问题描述 投票:0回答:1

我创建了通过 pl/sql oracle 发送邮件的程序。我将图像 (.png) 添加为邮件附件,并在邮件页脚(公司徽标)中打开它。大多数邮件都是正确的,但有时页脚中的图像模糊。我不知道如何解决它:/ 这是不正确的页脚图像的示例:

这是带有页脚和附件的代码的一部分

    UTL_SMTP.write_data(v_connection, 'MIME-Version: 1.0' || UTL_TCP.crlf);
  UTL_SMTP.write_data(v_connection,
                      'Content-Type: multipart/mixed; boundary="' ||
                      c_mime_boundary || '"' || UTL_TCP.crlf);

  UTL_SMTP.write_data(v_connection, UTL_TCP.crlf);
  UTL_SMTP.write_data(v_connection,
                      'This is a multi-part message in MIME format.' ||
                      UTL_TCP.crlf);

  UTL_SMTP.write_data(v_connection,
                      '--' || c_mime_boundary || UTL_TCP.crlf);
  UTL_SMTP.write_data(v_connection,
                      'Content-Type: text/html; charset="UTF-8"' ||
                      UTL_TCP.crlf);

                      
 

  UTL_SMTP.write_data(v_connection, UTL_TCP.CRLF);

   -----------------------------------   
  
  
  

    ClobLen := DBMS_LOB.GETLENGTH(p_message);
    
      LOOP
        EXIT WHEN offset > ClobLen;
        DBMS_LOB.READ(p_message || '<br><br>' || p_footer
        , amount, offset, BUFFER);
        UTL_SMTP.write_raw_data(v_connection, UTL_RAW.cast_to_raw(BUFFER));
        offset := offset + amount;
      END LOOP;
      
         UTL_SMTP.write_data(v_connection, UTL_TCP.CRLF);
    
      
      IF p_attach_name IS NOT NULL THEN
        UTL_SMTP.write_data(v_connection, '--' || c_mime_boundary || UTL_TCP.crlf);
        UTL_SMTP.write_data(v_connection, 'Content-Type: ' || p_attach_mime || '; name="' || p_attach_name || '"' || UTL_TCP.crlf);
        UTL_SMTP.write_data(v_connection, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf);
    
    
        UTL_SMTP.write_data(v_connection, 'Content-Disposition: attachment; filename="' || p_attach_name || '"' || UTL_TCP.crlf || UTL_TCP.crlf);
        
     FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1 )/offset) LOOP
          UTL_SMTP.write_data(v_connection, UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_attach_blob, offset, i * offset + 1))) || UTL_TCP.crlf);
        END LOOP;
    
        UTL_SMTP.write_data(v_connection, UTL_TCP.crlf);
      END IF;
       -----------------------------------
    
      UTL_SMTP.close_data(v_connection);
      UTL_SMTP.quit(v_connection);
oracle email plsql outlook
1个回答
0
投票

有多个地方可能会出现错误,您需要进行一些调试来找出错误来自何处。

将数据库中图像的字节与收到的电子邮件中图像的字节进行比较 - 它们是否相同?

  • 如果是这样,那么问题是:

    1. 数据库中存储的图像模糊;或
    2. 电子邮件客户端无法显示图像。

    在这两种情况下,这都是数据问题,而不是代码问题。

  • 如果不是,那么数据库和收件人之间存在问题。

在后一种情况下,将数据库字节与发送电子邮件中的字节进行比较 - 它们是否相同?

  • 如果是的话,那么你的上游有问题,不知何故,电子邮件被破坏了,所以你认为你正在发送的图像没有被正确接收;这可能是客户端问题、网络问题或服务器配置问题。
  • 如果它们不相同,那么您在读取数据库或创建电子邮件时会遇到问题。

在后一种情况下,将放入数据库的数据与从数据库读取的数据进行比较。

  • 如果它们相同,那么您创建电子邮件的方式有误。
  • 如果它们不相同,则数据在被
    INSERT
    编辑时或在
    SELECT
    编辑时正在被转换,您需要找出哪一个。
© www.soinside.com 2019 - 2024. All rights reserved.