Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >收发电子邮件

收发电子邮件

作者头像
用户7741497
发布于 2022-06-09 05:51:34
发布于 2022-06-09 05:51:34
3.2K00
代码可运行
举报
文章被收录于专栏:hml_知识记录hml_知识记录
运行总次数:0
代码可运行

收发电子邮件

本主题描述如何使用InterSystems IRIS发送和接收MIME电子邮件消息。

注意:本主题中的示例是经过组织的,因此管理电子邮件的方法可以用于不同的电子邮件服务器,这在测试和演示期间非常有用。这不一定是最适合生产需要的代码组织。

支持电子邮件协议

电子邮件使用标准协议通过Internet发送消息。 InterSystems IRIS支持以下三种协议:

  • InterSystems IRIS提供MIME电子邮件的对象表示形式。它支持文本和非文本附件、单部分或多部分邮件正文,以及ASCII和非ASCII字符集的标题。
  • 可以通过SMTP服务器发送电子邮件。SMTP(简单邮件传输协议)是发送电子邮件的Internet标准。
  • 还可以通过POP3从电子邮件服务器检索电子邮件,POP3是从远程服务器检索电子邮件的最常用标准。

注意:InterSystems IRIS不提供邮件服务器。相反,它提供了连接到邮件服务器并与之交互的功能。

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类。要创建邮件,请执行以下操作:

  1. 创建%Net.MailMessage的实例。

提示:可以将字符集指定为%New();的参数,如果这样做,则会设置消息的CharSet属性。

  1. 设置实例的ToFromSubject属性。
  • To收件人-此邮件将发送到的电子邮件地址列表。此属性是标准的InterSystems IRIS列表类;要使用它,需要使用标准列表方法:Insert()GetAt()RemoveAt()Count()Clear()
  • From发件人-此邮件的发件人电子邮件地址。
  • Subject主题-邮件的主题(如果您使用的SMTP服务器需要该主题)。
  1. 可以选择设置日期、抄送、密件抄送和其他属性。
  2. 如果邮件不是纯文本,请设置以下属性以指示您要创建的邮件的类型:
  • 如果这是一封HTML邮件,请将IsHTML属性设置为1。
  • 如果这是二进制消息,请将IsBinary属性设置为1。
  1. 若要指定消息及其标头的字符集,请根据需要设置CharSet属性。

重要提示:在添加消息内容之前指定字符集非常重要。

  1. 添加消息内容:
  • 对于纯文本或HTML,请使用TextData属性,该属性是%FileCharacterStream的实例。不需要指定此流的TranslateTable属性;当指定邮件的字符集时,该属性会自动发生。
  • 对于二进制数据,请使用BinaryData属性,该属性是%FileBinaryStream的实例。

提示:指定流的Filename属性时,请确保使用用户有权写入的目录。

要使用这些属性,请使用标准流方法:Write()WriteLine()Read()ReadLine()Rewind()MoveToEnd()Clear()。还可以使用流的Size属性,该属性提供消息内容的大小。

注意:应该了解正在使用的SMTP服务器的要求。例如,某些SMTP服务器要求包含主题标头。同样,某些SMTP服务器不允许任意FROM标头。 类似地,一些SMTP服务器识别优先级报头,而其他服务器则识别X-Priority

示例1:CreateTextMessage()

以下方法创建一条简单消息并为其指定地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

在实际发送邮件时指定地。上例的以下变体生成一条没有地址的文本消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

创建多部分电子邮件

要创建由多部分组成的电子邮件,请执行以下操作:

  1. 创建%Net.MailMessage的实例,并将其ToFromSubject属性设置为。可以选择设置其他属性以指定其他邮件标头。
  2. IsMultiPart属性设置为1。
  3. MultiPartType属性设置为以下值之一: "related", "alternative", 或 "mixed"。这会影响整个消息的Content-Type标头。
  4. 对于邮件应包含的每个部分,创建%Net.MailMessagePart的实例并指定其属性,如从步骤4开始的“创建由单个部分组成的电子邮件”中所述。
  5. 对于父电子邮件,设置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()
  • From-(必填)发送此邮件的电子邮件地址。
  • Date-此消息的日期。
  • Subject-(必选)包含此邮件主题的字符串。
  • Sender-邮件的实际发件人。
  • Cc-此邮件将发送到的抄送地址列表。
  • Bcc-此邮件将被发送到的密件副本地址列表。

内容类型标题

发送邮件时,邮件和每个邮件部分的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编码。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set BinaryText=$ZCONVERT(UnicodeText,"O","UTF8")
set Base64Encoded=$system.Encryption.Base64Encode(BinaryText)

收件人必须使用相反的过程来解码文本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set BinaryText=$system.Encryption.Base64Decode(Base64Encoded)
set UnicodeText=$ZCONVERT(BinaryText,"I","UTF8")

对于文本消息或消息部分:"quoted-printable"

自定义标题

使用%Net.MailMessage%Net.MailMessagePart,可以通过访问Headers属性设置或获取自定义标题,该属性是一个具有以下结构的数组:

数组键

数组值

标头的名称,如“Priority”

标头的值

此属性用于包含其他标头,如X-Priority和其他标头。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
处理收到的电子邮件
本节介绍如何处理通过%Net.POP3检索到的电子邮件(%Net.MailMessage)。
用户7741497
2022/07/04
1.9K0
向邮件添加附件
可以将附件添加到电子邮件或消息部分(具体地说,是添加到%Net.MailMessagePart或%Net.MailMessage的实例)。要执行此操作,请使用以下方法:
用户7741497
2022/06/09
2.3K0
使用.Net发电子邮件小结
电子邮件是通过互联网发出去的,互联网中传输层协议有TCP/IP协议,邮件服务在基于TCP/IP底层协议之上的应用层实现SMTP、POP3、IMAP4等协议,通过这些协议实现了邮件的收发服务。
小蜜蜂
2019/08/06
1.7K0
使用.Net发电子邮件小结
使用python的email、smtplib、poplib模块收发邮件
https://blog.csdn.net/weixin_35955795/article/details/52881044
用户1214487
2018/07/31
1.1K0
电子邮件实现详解(上)
电子邮件是大家日常工作生活中最常用的交流方式之一,我们常提到的SMTP和POP3协议分别是用来做什么的呢?MUA和MTA又是具体指哪些组件呢?邮件发送和接收过程是怎样的?SMTP邮件格式是什么样子,用python/django又如何实现发送邮件呢?本文将一一解释上述问题,并与第三方提供的API对比学习代码结构。日拱一卒,我们开始吧~
才浅Coding攻略
2022/12/12
3K0
电子邮件实现详解(上)
创建、编写和阅读MIME邮件
Iris提供了一个可以用于创建MultiPart Mime消息(%Net.MimePart)的类。创建要添加到SOAP消息的附件时,请使用此类;请参阅创建Web服务和Web客户端。因为MIME是一个常见的标准,所以有许多其他可能的应用程序,例如电子邮件处理和HTTP Multipart Post。
用户7741497
2022/07/04
1.1K0
从POP3服务器提取电子邮件
如果拥有所需的权限,并且邮件服务器正在运行,则可以使用POP3协议从该服务器下载和处理电子邮件。通常,要与POP3服务器通信,请登录,执行一系列影响邮箱的操作,然后提交或回滚任何更改。要在系统间IRIS中执行此操作,请执行以下操作:
用户7741497
2022/06/10
1.6K0
Python进阶-生成电子邮件
Python 的 email 包处理并管理整个电子邮件消息的 MIME 部分,使用 email 包和 smtplib 包。email 包有多个组件,分别用来解析和生成电子邮件。
小团子
2019/07/18
1.5K0
Python进阶-生成电子邮件
发送电子邮件
在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。
用户8442333
2021/05/20
2.4K0
ASP.NET 实现发送邮件 + 多个收件人 + 多个附件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/42011431
DannyHoo
2018/09/13
2.1K0
ASP.NET 实现发送邮件 + 多个收件人 + 多个附件
电子邮件实现详解(下)
书接上回,上篇中主要介绍了电子邮件协议格式等理论相关内容,这篇中我们从JavaMail、Python的smtplib以及Django的django.core.mail模块三个视角来实现发送邮件这件事。
才浅Coding攻略
2022/12/12
2K0
电子邮件实现详解(下)
邮件发送功能开发
作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为“消息推送”的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下的“邮件发送”,做一个细致的分析! 一、who需要邮件功能 1、服务提供方:需提供邮件收发客户端或Web服务。如:QQ邮箱、GMail邮箱、126、163等知名邮件服务提供商。注:如果你使用的第三方不知名邮件服务商提供的邮件收发服务,通过其发出的邮件,可能会被其他知名邮件服务提供商的STMP服务器视为是"恶意邮件或垃圾邮件"! 2、消息推送:消息推送
郑小超.
2018/01/26
4.1K0
Spring Boot – 通过 SMTP 发送电子邮件
Spring Boot提供了使用JavaMail库通过 SMTP 发送电子邮件的功能。在这里,我们将说明开发可用于发送带或不带附件的电子邮件的 Restful Web 服务的分步指南。为了开始执行这些步骤,我们首先使用 Spring Initializer 创建一个 Spring Boot 项目。
用户1418987
2023/10/26
6750
Spring Boot – 通过 SMTP 发送电子邮件
邮件实现详解(三)------邮件的组织结构
IT可乐
2018/01/04
3K0
邮件实现详解(三)------邮件的组织结构
使用Python发送自定义电子邮件
电子邮件仍然是事实。 尽管存在各种弊端,但它仍然是向大多数人发送信息的最佳方法,特别是允许邮件排队等待收件人的自动方式。
用户7886150
2021/01/28
3.1K0
关于.NET邮件的收发问题总结
        最近因为项目需要,研究了一下邮件的发送和接收,发现现在这方面的问题很多.虽然网上这方面的资料很多,但是真正应用起来 仍然会发现不少问题,而且很多人都抱怨书上或者网上的一些代码应用起来是失败的,并且针对附件方面的处理不太完善,针对这种情况我把最近研究所得做一个小小的总结,希望能对大家有所帮助。         首先来谈谈发送邮件的问题。
跟着阿笨一起玩NET
2018/09/19
7950
使用Python实现电子邮件群发功能
在某些应用中,可能会需要由管理员给所有用法群发电子邮件,或者类似的应用。本文代码使用Python详细模拟了这个过程。 import email from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.base import MIMEBase import smtplib sender =
Python小屋屋主
2018/04/16
2.3K0
Python模块smtplib让群发邮件变得简单1.smtplib模块介绍2.email.utils模块使用3.发送email的其它几个模块4.实例
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Python创建 SMTP 对象语法如下:
Python攻城狮
2018/08/23
8360
Python模块smtplib让群发邮件变得简单1.smtplib模块介绍2.email.utils模块使用3.发送email的其它几个模块4.实例
31.1企业级开发进阶3.1:发送电子邮件
从古代的八百里加急,到现在的电子邮件,邮件的发展见证了上下五千年的发展史,这些当然是废话,只是要说说邮件的重要性。
大牧莫邪
2018/08/27
1.7K0
Windows下Email安装配置与发信
描述:最近正好在学邮件发信与激活的小程序开发,顺便把邮箱发信的基础知识理一理方便后续的开发工作以及安全相关的一些知识;
全栈工程师修炼指南
2022/09/28
1.1K0
Windows下Email安装配置与发信
相关推荐
处理收到的电子邮件
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验