카테고리 없음

[신탁] Oracle의 utl_smtp로 디버깅

행복을전해요 2021. 1. 31. 14:31

HELO가 문제인 것 같습니다. 간단한 테스트 케이스로 확인해주세요 ...

set serveroutput on

declare
      lConnection UTL_SMTP.CONNECTION;
      begin
            lConnection := UTL_SMTP.OPEN_CONNECTION(your_smtp_server);
                  DBMS_OUTPUT.PUT_LINE('Opened ok');
                  
                        UTL_SMTP.HELO(lConnection, your_client_machine_name);
                              DBMS_OUTPUT.PUT_LINE('HELO ok');
                              
                                    UTL_SMTP.MAIL(lConnection, your_email_address);
                                          UTL_SMTP.RCPT(lConnection, your_email_address);
                                                DBMS_OUTPUT.PUT_LINE('Addressing ok');
                                                end;
                                                /
                                                
-------------------

이 문제를 해결 한 것 같습니다. 두 가지 질문에 답합니다.

  1. 스키마 호출 utl_smtpsys.utl_smtp, sys.utl_tcp에 대한 실행 권한이 있는지 다시 확인하십시오 sys.dbms_lob. 또한 전송되는 메시지가 32Kb보다 큰지 확인하십시오.

  2. system.net.mail 디렉토리에 이메일을 덤프하기 위해 utl_smtp를 얻을 수있는 방법이 없습니다.

도움을 주신 cagcowboy에게 감사드립니다.

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

예, 서버에 텔넷을 연결할 수 있습니다.

-- ****** Object: Stored Procedure TRAVELADMIN_DEV.HTML_EMAIL Script Date: 22/08/2008 12:41:02 ******
CREATE PROCEDURE "HTML_EMAIL"  (
    p_to            in varchar2,
        p_cc            in varchar2,
            p_from          in varchar2,
                p_subject       in varchar2,
                    p_text          in varchar2 default null,
                        p_html          in varchar2 default null
                            )
                            is
                                l_boundary      varchar2(255) default 'a1b2c3d4e3f2g1';
                                    l_connection    utl_smtp.connection;
                                        l_body_html     clob := empty_clob;  --This LOB will be the email message
                                            l_offset        number;
                                                l_ammount       number;
                                                    l_temp          varchar2(32767) default null;
                                                        p_smtp_hostname varchar2(30):= 'rockies';
                                                            p_smtp_portnum  varchar2(2) := '25';
                                                            begin
                                                                l_connection := utl_smtp.open_connection( p_smtp_hostname, p_smtp_portnum );
                                                                    utl_smtp.helo( l_connection, p_smtp_hostname );
                                                                        utl_smtp.mail( l_connection, p_from );
                                                                            utl_smtp.rcpt( l_connection, p_to );
                                                                                l_temp := l_temp || 'MIME-Version: 1.0' ||  chr(13) || chr(10);
                                                                                    l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
                                                                                        IF ((p_cc <> NULL) OR (LENGTH(p_cc) > 0)) THEN
                                                                                              l_temp := l_temp || 'Cc: ' || p_cc || chr(13) || chr(10);
                                                                                                    utl_smtp.rcpt( l_connection, p_cc );
                                                                                                        END IF;
                                                                                                            l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
                                                                                                                l_temp := l_temp || 'Subject: ' || p_subject || chr(13) || chr(10);
                                                                                                                    l_temp := l_temp || 'Reply-To: ' || p_from ||  chr(13) || chr(10);
                                                                                                                        l_temp := l_temp || 'Content-Type: multipart/alternative; boundary=' ||
                                                                                                                                                 chr(34) || l_boundary ||  chr(34) || chr(13) ||
                                                                                                                                                                          chr(10);
                                                                                                                                                                              ----------------------------------------------------
                                                                                                                                                                                  -- Write the headers
                                                                                                                                                                                      dbms_lob.createtemporary( l_body_html, false, 10 );
                                                                                                                                                                                          dbms_lob.write(l_body_html,length(l_temp),1,l_temp);
                                                                                                                                                                                              ----------------------------------------------------
                                                                                                                                                                                                  -- Write the text boundary
                                                                                                                                                                                                      l_offset := dbms_lob.getlength(l_body_html) + 1;
                                                                                                                                                                                                          l_temp   := '--' || l_boundary || chr(13)||chr(10);
                                                                                                                                                                                                              l_temp   := l_temp || 'content-type: text/plain; charset=us-ascii' ||
                                                                                                                                                                                                                                chr(13) || chr(10) || chr(13) || chr(10);
                                                                                                                                                                                                                                    dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
                                                                                                                                                                                                                                        ----------------------------------------------------
                                                                                                                                                                                                                                            -- Write the plain text portion of the email
                                                                                                                                                                                                                                                l_offset := dbms_lob.getlength(l_body_html) + 1;
                                                                                                                                                                                                                                                    dbms_lob.write(l_body_html,length(p_text),l_offset,p_text);
                                                                                                                                                                                                                                                        ----------------------------------------------------
                                                                                                                                                                                                                                                            -- Write the HTML boundary
                                                                                                                                                                                                                                                                l_temp   := chr(13)||chr(10)||chr(13)||chr(10)||'--' || l_boundary ||
                                                                                                                                                                                                                                                                                    chr(13) || chr(10);
                                                                                                                                                                                                                                                                                        l_temp   := l_temp || 'content-type: text/html;' ||
                                                                                                                                                                                                                                                                                                           chr(13) || chr(10) || chr(13) || chr(10);
                                                                                                                                                                                                                                                                                                               l_offset := dbms_lob.getlength(l_body_html) + 1;
                                                                                                                                                                                                                                                                                                                   dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
                                                                                                                                                                                                                                                                                                                       ----------------------------------------------------
                                                                                                                                                                                                                                                                                                                           -- Write the HTML portion of the message
                                                                                                                                                                                                                                                                                                                               l_offset := dbms_lob.getlength(l_body_html) + 1;
                                                                                                                                                                                                                                                                                                                                   dbms_lob.write(l_body_html,length(p_html),l_offset,p_html);
                                                                                                                                                                                                                                                                                                                                       ----------------------------------------------------
                                                                                                                                                                                                                                                                                                                                           -- Write the final html boundary
                                                                                                                                                                                                                                                                                                                                               l_temp   := chr(13) || chr(10) || '--' ||  l_boundary || '--' || chr(13);
                                                                                                                                                                                                                                                                                                                                                   l_offset := dbms_lob.getlength(l_body_html) + 1;
                                                                                                                                                                                                                                                                                                                                                       dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
                                                                                                                                                                                                                                                                                                                                                           ----------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                               -- Send the email in 1900 byte chunks to UTL_SMTP
                                                                                                                                                                                                                                                                                                                                                                   l_offset  := 1;
                                                                                                                                                                                                                                                                                                                                                                       l_ammount := 1900;
                                                                                                                                                                                                                                                                                                                                                                           utl_smtp.open_data(l_connection);
                                                                                                                                                                                                                                                                                                                                                                               while l_offset < dbms_lob.getlength(l_body_html) loop
                                                                                                                                                                                                                                                                                                                                                                                       utl_smtp.write_data(l_connection,
                                                                                                                                                                                                                                                                                                                                                                                                                   dbms_lob.substr(l_body_html,l_ammount,l_offset));
                                                                                                                                                                                                                                                                                                                                                                                                                           l_offset  := l_offset + l_ammount ;
                                                                                                                                                                                                                                                                                                                                                                                                                                   l_ammount := least(1900,dbms_lob.getlength(l_body_html) - l_ammount);
                                                                                                                                                                                                                                                                                                                                                                                                                                       end loop;
                                                                                                                                                                                                                                                                                                                                                                                                                                           utl_smtp.close_data(l_connection);
                                                                                                                                                                                                                                                                                                                                                                                                                                               utl_smtp.quit( l_connection );
                                                                                                                                                                                                                                                                                                                                                                                                                                                   dbms_lob.freetemporary(l_body_html);
                                                                                                                                                                                                                                                                                                                                                                                                                                                   end;
                                                                                                                                                                                                                                                                                                                                                                                                                                                   
-------------------
  • OPEN_CONNECTION 매개 변수는 연결하려는 서버의 FQDN 또는 IP 주소 여야합니다.
  • HELO 매개 변수는 연결하려는 컴퓨터의 FQDN이어야합니다.

이것이 작동하지 않으면 어떤 줄에 오류가 있는지 알고 있습니까?



출처
https://stackoverflow.com/questions/22039824