Iris提供了一个可以用于创建MultiPart Mime
消息(%Net.MimePart
)的类。创建要添加到SOAP
消息的附件时,请使用此类;请参阅创建Web服务和Web客户端。因为MIME
是一个常见的标准,所以有许多其他可能的应用程序,例如电子邮件处理和HTTP Multipart Post。
MIME格式的文档被称为MIME部分。每个MIME部件都有标题,包含邮件正文(文本或二进制)或包含额外的MIME部件。具有MIME版本标题的MIME部分可以用作顶级文档,称为MIME消息。下图显示了示例:
在该示例中,E
和F
具有未显示的附加子部分。
要表示MIME部件,请使用 %Net.MIMEPart
类,该类提供用于设置零件的标题和内容的属性。
要创建一个MIME部件,执行以下步骤:
%Net.MIMEPart
的实例。Body
属性设置为等于该流。使用标准流接口将数据写入此流。不要为Parts
属性指定值。Parts
属性设置为等于这些部件的列表。不要为Body
属性指定值。可以设置和获取HTTP
标头的值。%Net.MIMEPart
的以下属性会影响MIME标头:
ContentType
- Content-Type
标头的Internet媒体类型(MIME类型)。这指定正文数据的Internet媒体类型。例如:"text/plain"
, "text/html"
, "image/jpeg",
"multipart/mixed"
等。ContentCharset
- Content-Type
标题的字符集部分。如果设置此属性,则必须首先设置ContentType
属性。对于包含文本正文的每个MIME
部分,请确保适当设置ContentCharset
属性以指示正文中使用的字符集。此属性应声明已使用的字符集,因为%Net.MIMEPart
不执行任何转换。ContentId
-规范化的Content-ID
头,不带尖括号(<>
)以及任何前导空格和尾随空格。ContentLocation
-标准化的Content-Location
标头,没有任何前导空格和尾随空格。ContentTransferEncoding
- Content-Transfer-Encoding
标头。此属性可以是以下属性之一:"base64"
"quoted-printable"
"7bit" "8bit"
重要提示:请注意,如果内容为“Base64”
编码,则不能包含任何Unicode字符。如果要发送的内容包括Unicode字符,请确保使用$ZCONVERT
将内容转换为UTF-8
,然后对其进行base-64
编码。例如:
set BinaryText=$ZCONVERT(UnicodeText,"O","UTF8")
set Base64Encoded=$system.Encryption.Base64Encode(BinaryText)
收件人必须使用相反的过程来解码文本:
set BinaryText=$system.Encryption.Base64Decode(Base64Encoded)
set UnicodeText=$ZCONVERT(BinaryText,"I","UTF8")
%Net.MIMEPart
类提供可用于管理MIME标头的常规方法:
GetHeader()
返回头的值。NextHeader()
获取下一个标头。SetHeader()
设置标题的值。通常,可以使用它来设置非标准标头。RemoveHeader()
删除标题。默认情况下,邮件边界是自动生成的。如果需要,可以指定消息边界。要执行此操作,请指定边界属性的值。请确保使用极不可能在任何消息部分中使用的字符串。
要编写MIME邮件,请使用%Net.MIMEWriter
,如下所示:
%Net.MIMEWriter
类的实例。OutputToDevice()
(默认值)、OutputToFile()
或OutputToStream()
。WriteHeader()
将写入该标头。%Net.MIMEPart
的实例,WriteMIMEBody()
写入消息正文,消息正文可以有多个部分。如果消息是多部分的,则此方法不写入任何标头;编写它们是责任。但是,如果消息不是多部分的,则该方法会写入标头。
%Net.MIMEPart
的实例,WriteMIMEMessage()
写入MIME消息,包括所有标头。对于单部分消息,WriteMIMEBody()
和WriteMIMEMessage()
产生相同的输出。
示例:WriteMIMEMessage()
下面的示例演示WriteMIMEMessage()
的用法:
ClassMethod WriteMIMEMessage(text As %String, header As %String) As %Status
{
Set msg=##class(%Net.MIMEPart).%New()
Set msg.Body=##class(%GlobalCharacterStream).%New()
Do msg.Body.Write(text)
//specify some headers
Set msg.ContentType="text/html"
Set msg.ContentCharset="us-ascii"
Do msg.SetHeader("Custom-header",header)
//create MIME writer; write MIME message
Set writer=##class(%Net.MIMEWriter).%New()
Set status=writer.WriteMIMEMessage(msg)
If $$$ISERR(status) do $system.Status.DisplayError(status)
Quit $$$OK
}
以下终端会话显示了此方法的使用情况: java
DHC-APP>w ##class(PHA.TEST.HTTP).WriteMIMEMessage("message text","my header value") CONTENT-TYPE: text/html; charset=us-ascii
Custom-header: my header value
message text
1
要读取MIME
邮件,请使用%Net.MIMEReader
,如下所示:
%Net.MIMEReader
类的实例。OpenFile()
或OpenStream()
。ReadMIMEMessage()
方法。此方法通过引用返回%Net.MIMEPart
的实例作为第一个参数。它返回一个状态,应该检查该状态。本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。