本主题描述如何使用InterSystems IRIS发送和接收MIME
电子邮件消息。
注意:本主题中的示例是经过组织的,因此管理电子邮件的方法可以用于不同的电子邮件服务器,这在测试和演示期间非常有用。这不一定是最适合生产需要的代码组织。
电子邮件使用标准协议通过Internet发送消息。 InterSystems IRIS支持以下三种协议:
MIME
电子邮件的对象表示形式。它支持文本和非文本附件、单部分或多部分邮件正文,以及ASCII
和非ASCII
字符集的标题。SMTP
服务器发送电子邮件。SMTP
(简单邮件传输协议)是发送电子邮件的Internet标准。POP3
从电子邮件服务器检索电子邮件,POP3
是从远程服务器检索电子邮件的最常用标准。注意:InterSystems IRIS不提供邮件服务器。相反,它提供了连接到邮件服务器并与之交互的功能。
MIME
电子邮件首先,了解InterSystems IRIS如何表示MIME
电子邮件非常有用。
通常,多部分MIME
邮件由以下部分组成:
Mime-Type
标头和Content-Type
标头。对于多部分消息,Content-Type
头必须是多部分/混合或多部分的其他子类型;MIME
标准有许多变体。
Content-Type
标头和特定于此部件的其他标头。InterSystems IRIS使用两个类来表示电子邮件:%Net.MailMessage
和%Net.MailMessagePart
,即%Net.MailMessage
的超类。下图显示了这些类之间的关系:
%Net.MailMessage
%Net.MailMessage
作为父消息,并使用%Net.MailMessagePart
的多个实例作为其部分。要创建由单个部分组成的电子邮件,请使用%Net.MailMessage
类。要创建邮件,请执行以下操作:
%Net.MailMessage
的实例。提示:可以将字符集指定为%New()
;的参数,如果这样做,则会设置消息的CharSet
属性。
To
、From
和Subject
属性。To
收件人-此邮件将发送到的电子邮件地址列表。此属性是标准的InterSystems IRIS列表类;要使用它,需要使用标准列表方法:Insert()
、GetAt()
、RemoveAt()
、Count()
和Clear()
。From
发件人-此邮件的发件人电子邮件地址。Subject
主题-邮件的主题(如果您使用的SMTP服务器需要该主题)。IsHTML
属性设置为1。IsBinary
属性设置为1。CharSet
属性。重要提示:在添加消息内容之前指定字符集非常重要。
HTML
,请使用TextData
属性,该属性是%FileCharacterStream
的实例。不需要指定此流的TranslateTable
属性;当指定邮件的字符集时,该属性会自动发生。BinaryData
属性,该属性是%FileBinaryStream
的实例。提示:指定流的Filename
属性时,请确保使用用户有权写入的目录。
要使用这些属性,请使用标准流方法:Write()
、WriteLine()
、Read()
、ReadLine()
、Rewind()
、MoveToEnd()
和Clear()
。还可以使用流的Size
属性,该属性提供消息内容的大小。
注意:应该了解正在使用的SMTP
服务器的要求。例如,某些SMTP
服务器要求包含主题标头。同样,某些SMTP
服务器不允许任意FROM
标头。
类似地,一些SMTP
服务器识别优先级报头,而其他服务器则识别X-Priority
。
示例1:CreateTextMessage()
以下方法创建一条简单消息并为其指定地址:
ClassMethod CreateTextMessage() As %Net.MailMessage
{
Set msg = ##class(%Net.MailMessage).%New()
set msg.From = "test@test.com"
Do msg.To.Insert("xxx@xxx.com")
Do msg.Cc.Insert("yyy@yyy.com")
Do msg.Bcc.Insert("zzz@zzz.com")
Set msg.Subject="subject line here"
Set msg.IsBinary=0
Set msg.IsHTML=0
Do msg.TextData.Write("This is the message.")
Quit msg
}
示例2:SimpleMessage()
在实际发送邮件时指定地。上例的以下变体生成一条没有地址的文本消息:
ClassMethod SimpleMessage() As %Net.MailMessage
{
Set msg = ##class(%Net.MailMessage).%New()
Set msg.Subject="Simple message "_$h
Set msg.IsBinary=0
Set msg.IsHTML=0
Do msg.TextData.Write("This is the message.")
Quit msg
}
Samples
命名空间中还有其他示例。要查找它们,请在该命名空间中搜索%Net.MailMessage
。
要创建由多部分组成的电子邮件,请执行以下操作:
%Net.MailMessage
的实例,并将其To
、From
和Subject
属性设置为。可以选择设置其他属性以指定其他邮件标头。IsMultiPart
属性设置为1。MultiPartType
属性设置为以下值之一: "related"
, "alternative"
, 或 "mixed"
。这会影响整个消息的Content-Type
标头。%Net.MailMessagePart
的实例并指定其属性,如从步骤4开始的“创建由单个部分组成的电子邮件”中所述。Parts
属性,该属性是一个数组。将每个子消息部分插入到此数组中。发送邮件时,%Net.SMTP
类会根据需要自动设置邮件的Content-Type
标头(给定MultiPartType
属性值)。
如前所述,消息本身和消息的每个部分都有一组标头。
%Net.MailMessage
和%Net.MailMessagePart
类提供的属性使可以轻松访问最常用的标头,但可以添加所需的任何标头。本节提供有关所有标头以及如何创建自定义标头的信息。
给定消息部分的标头使用由该部分的CharSet
属性指定的字符集。
注意:应该了解正在使用的SMTP
服务器的要求。例如,某些SMTP
服务器要求包含主题标头。同样,某些SMTP
服务器不允许任意FROM
标头。
类似地,一些SMTP
服务器识别优先级报头,而其他服务器则识别X-Priority
。
设置以下属性(仅在%Net.MailMessage
中)以设置邮件本身最常用的标头:
To
-(必填)此邮件将发送到的电子邮件地址列表。此属性是标准的InterSystems IRIS列表;要使用它,请使用标准列表方法:Insert()
、GetAt()
、RemoveAt()
、Count()
和Clear()
。发送邮件时,邮件和每个邮件部分的Content-Type
标头会自动设置如下:
IsHTML
等于0,IsBinary
等于0),则Content-Type
标头被设置为 "text/plain
。HTML
(IsHTML
等于1,IsBinary
等于0),则Content-Type
标头设置为“text/html”
。IsBinary
等于1),则Content-Type
报头设置为如果消息是二进制的(IsBinary
等于1),则Content-Type
报头设置为"application/octet-stream"
.MultiPartType
属性的值适当设置Content-Type
标头。%Net.MailMessage
和%Net.MailMessagePart
都提供了contentType
属性,使可以访问Content-Type
标头。
%Net.MailMessage
和%Net.MailMessagePart
都提供了ContentTransferEncoding
属性,该属性提供了一种指定消息或消息部分的Content-Transfer-Encoding
头的简单方法。
此属性可以是以下属性之一:"base64" "quoted-printable" "7bit" "8bit"
默认值如下:
对于二进制消息或消息部分:"base64"
重要提示:请注意,如果内容为“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")
对于文本消息或消息部分:"quoted-printable"
使用%Net.MailMessage
和%Net.MailMessagePart
,可以通过访问Headers
属性设置或获取自定义标题,该属性是一个具有以下结构的数组:
数组键 | 数组值 |
---|---|
标头的名称,如“Priority” | 标头的值 |
此属性用于包含其他标头,如X-Priority
和其他标头。例如:
do msg.Headers.SetAt(1,"X-Priority")
do msg.Headers.SetAt("High","X-MSMail-Priority")
do msg.Headers.SetAt("High","Importance")
不同的电子邮件服务器和客户端可以识别不同的标头,因此设置多个相似的标头以确保服务器或客户端接收到的邮件具有它可以识别的标头是很有用的。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有