RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1373746
Accepted
gregor
gregor
Asked:2022-06-21 20:09:48 +0000 UTC2022-06-21 20:09:48 +0000 UTC 2022-06-21 20:09:48 +0000 UTC

发送字母时西里尔字符失真

  • 772

从 Oracle DBMS 向 Outlook 邮件发送一封包含西里尔字符的信时,输出为问号。

我不明白如何转换字符串以使文本可读。

我通过以下方式发货:

CREATE OR REPLACE PROCEDURE send_mail (p_to        IN VARCHAR2,
                                       p_from      IN VARCHAR2,
                                       p_message   IN VARCHAR2,
                                       p_smtp_host IN VARCHAR2,
                                       p_smtp_port IN NUMBER DEFAULT 25)
AS
  l_mail_conn   UTL_SMTP.connection;
BEGIN
  l_mail_conn := UTL_SMTP.open_connection(p_smtp_host, p_smtp_port);
  UTL_SMTP.helo(l_mail_conn, p_smtp_host);
  UTL_SMTP.mail(l_mail_conn, p_from);
  UTL_SMTP.rcpt(l_mail_conn, p_to);
  UTL_SMTP.data(l_mail_conn, 'Привет мир!' || UTL_TCP.crlf || UTL_TCP.crlf);
  UTL_SMTP.quit(l_mail_conn);
END;

PS:Oracle 数据库 10g 发布 10.2.0.3.0 - 生产

oracle
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    0xdb
    2022-06-22T20:25:50Z2022-06-22T20:25:50Z

    通常,电子邮件的正文只能包含 7 位 US7ASCII 字符。
    因此,包含 US7ASCII 以外的字符的内容必须编码为quoted-printable或base-64,这应在电子邮件标头中指明。该文档说明了以下内容:

    使用发送的Text( VARCHAR2) 数据在发送WRITE_DATA 前转换为US7ASCII。如果文本包含多字节字符,则文本中无法转换为 US7ASCII 的每个多字节字符将替换为“?” 字符。如果使用 EHLO 子程序与 SMTP 服务器协商 8BITMIME 扩展名,则可以通过首先使用UTL_RAW包将文本转换为 RAW 来发送多字节 VARCHAR2 数据,然后使用WRITE_RAW_DATA.

    例程的最小示例如下所示:

    create or replace procedure sendMail (
            sendto varchar2, sendfrom varchar2, subj varchar2, msg varchar2, 
            host VARCHAR2, port number := 25) as
        conn utl_smtp.connection;
    begin
        conn := utl_smtp.open_connection (host, port);
        utl_smtp.helo (conn, host);
        utl_smtp.mail (conn, sendfrom);
        utl_smtp.rcpt (conn, sendto);
        utl_smtp.open_data (conn);
        utl_smtp.write_data (conn, 'Subject: '||subj||UTL_TCP.crlf);
        utl_smtp.write_data (conn, 'MIME-version: 1.0'||UTL_TCP.crlf);
        utl_smtp.write_data (conn, 'Content-Type: text/plain; charset=UTF-8'    ||UTL_TCP.crlf);
        utl_smtp.write_data (conn, 'Content-Transfer-Encoding: quoted-printable'||UTL_TCP.crlf);
        utl_smtp.write_raw_data (conn, 
            utl_encode.quoted_printable_encode (utl_raw.cast_to_raw (msg)));
        utl_smtp.close_data (conn);
        utl_smtp.quit (conn);
    end;
    /
    
    exec sendMail ('me', 'send-mail', 'test cyrillic', 'Привет мир!', 'localhost')
    

    原始结果:

    Subject: test cyrillic
    MIME-version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    [...]
    From: send-mail@mx.local.net
    
    =D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82 =D0=BC=D0=B8=D1=80!
    

    邮件客户端的结果:

    在此处输入图像描述

    • 3

相关问题

  • 哪些任务使用显式或隐式游标?

  • ORA-01017 无效的用户名/密码

  • 创建空程序时出错

  • Oracle Database 18c EX 回滚安装不解释

  • 如何知道 users 表中的 expiry_date 列是否已更改?

  • 正常在字符串中查找元字符

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5