我需要发送一封包含西里尔字母的主题的电子邮件.但由于邮件服务器和/或客户端的某些问题,我的收件人有时会收到错误的信件.我总是发送电子邮件的windows-1251编码,但有时一个邮件客户端显示信件的主题和发件人在另一种编码(KOI-8R)和我们的用户无法理解的消息.我尝试使用RFC 2047标准中描述的编码字标签.例如,电子邮件中的我的主题字段现在看起来像:
Subject: =?WINDOWS-1251?B?wiDt5eTw4PUg8vPt5PD7IOL75PD7IOIg4+Xy8OD1IPL78P/yIOIg4uXk8OAg/+Tw?=
=?WINDOWS-1251?B?4CDq5eTw4C4gwvvw4uDiIPEg4vvk8Psg4iDy8+3k8OUg4+Xy?=
=?WINDOWS-1251?B?8PssIOL78vDzIOL75PDu6SD/5PDgIOrl5PDgLCDi+/Lw8yDj?=
=?WINDOWS-1251?B?5fLw7ukg4vvk8OUg7O7w5PMsIP/k8OAg4iDi5eTw4Cwg4vvk?=
=?WINDOWS-1251?B?8PMg4iDy8+3k8PMu?=
Run Code Online (Sandbox Code Playgroud)
这些行由Oracle函数生成UTL_ENCODE.MIMEHEADER_ENCODE.
所有邮件客户端(Lotus Notes,gmail.com)仅显示此类电子邮件主题的第一行(仅前48个符号).我的邮件主题有什么问题?
小智 5
问题是,根据RFC 2822,您没有正确折叠.要在标题中创建多行字段,每行必须以空格开头.
你需要做的是:
replace(UTL_ENCODE.MIMEHEADER_ENCODE(subject, 'UTF8', UTL_ENCODE.BASE64), UTL_TCP.CRLF, UTL_TCP.CRLF || ' ')
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题.
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |