電子メール・メッセージの作成
ここでは、InterSystems IRIS® データ・プラットフォームで電子メール・メッセージを作成する方法について説明します。
シングルパートの電子メール・メッセージの作成
シングルパート電子メール・メッセージを作成するには、%Net.MailMessageOpens in a new tab クラスを使用します。メール・メッセージを作成する手順は以下のとおりです。
-
%Net.MailMessageOpens in a new tab のインスタンスを作成します。
Tip:%New() への引数として文字セットを指定できます。このようにした場合、メッセージに対して Charset プロパティが設定されます。このメッセージへの影響については、"自動エンコードと文字変換" を参照してください。
-
インスタンスの To プロパティ、From プロパティ、および Subject プロパティを設定します。
-
To — このメッセージの送信先の電子メール・アドレスのリスト。このプロパティは、標準の InterSystems IRIS リスト・クラスです。これを使用するには、標準のリスト・メソッドである Insert()、GetAt()、RemoveAt()、Count()、および Clear() を使用します。
-
From — このメッセージの送信元の電子メール・アドレス。
-
Subject — 使用している SMTP サーバで必要な場合、メッセージの件名。
-
-
オプションで、Date プロパティ、Cc プロパティ、Bcc プロパティ、およびその他のプロパティを設定します。詳細は、"基本的な電子メール・ヘッダの指定" を参照してください。
-
メッセージが平文でない場合、以下のプロパティを設定して、作成しているメッセージの種類を示します。
-
これが、HTML メッセージの場合、IsHTML プロパティを 1 に設定します。
-
これがバイナリ・メッセージの場合、IsBinary プロパティを 1 に設定します。
-
-
メッセージおよびそのヘッダの文字セットを指定するには、必要に応じて、Charset プロパティを設定します (このメッセージへの影響については、"自動エンコードと文字変換" を参照してください)。
Important:メッセージ・コンテンツを追加する前に文字セットを指定することが重要です。
-
メッセージ・コンテンツを追加します。
-
平文または HTML の場合は、%FileCharacterStreamOpens in a new tab のインスタンスである、TextData プロパティを使用します。このストリームの TranslateTable プロパティを指定する必要はありません。メール・メッセージの文字セットを指定したときに自動的に指定されています。
-
バイナリ・データの場合は、%FileBinaryStreamOpens in a new tab のインスタンスである、BinaryData プロパティを使用します。
%FileCharacterStreamOpens in a new tab および %FileBinaryStreamOpens in a new tab は非推奨になっていますが、このような使用法は引き続きサポートされています。このユース・ケースで別のストリーム・クラスに置き換えることはお勧めできません。
Tip:ストリームの Filename プロパティを指定する際は、必ず、ユーザが書き込みアクセス権を持つディレクトリを使用してください。
これらのプロパティを使用するには、標準ストリーム・メソッドである Write()、WriteLine()、Read()、ReadLine()、Rewind()、MoveToEnd()、および Clear() を使用します。ストリームの Size プロパティも使用もできます。これによりメッセージ・コンテンツのサイズが分かります。
-
使用している SMTP サーバの要件を理解しておく必要があります。例えば、SMTP サーバの中には、Subject ヘッダを含める必要があるものがあります。同様に、SMTP サーバの中には、任意の From ヘッダを許可しないものもあります。
同様に、SMTP サーバの中には、Priority ヘッダを認識するものもあれば、代わりに 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()
実際にメッセージを送信するときにアドレスを指定したい場合もあります ("SMTP サーバを使用した電子メールの送信" にある "例 3 : SendMessage()" を参照)。前の例の以下のバリエーションでは、アドレスのないテキスト・メッセージが生成されます。
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
}
マルチパートの電子メール・メッセージの作成
マルチパートの電子メール・メッセージを作成する手順は以下のとおりです。
-
%Net.MailMessageOpens in a new tab のインスタンスを作成し、その To プロパティ、From プロパティ、および Subject プロパティを設定します。オプションで、その他のプロパティを設定し、その他のメッセージ・ヘッダを指定します。
-
IsMultiPart プロパティを 1 に設定します。
-
MultiPartType プロパティを "related"、"alternative"、"mixed" のいずれかに設定します。これは、メッセージ全体の Content-Type ヘッダに影響します。
-
メッセージに含まれる各部分について、%Net.MailMessagePartOpens in a new tab のインスタンスを作成し、"シングルパートの電子メール・メッセージの作成" の説明のとおり (手順 4 から開始)、そのプロパティを指定します。
-
親電子メール・メッセージの場合は、Parts プロパティを設定します。これは配列です。各子メッセージ部分をこの配列に挿入します。
メッセージを送信するときに、%Net.SMTPOpens in a new tab クラスは、必要に応じて (MultiPartType プロパティの値がある場合) 自動的にメッセージに対して Content-Type ヘッダを設定します。
電子メール・メッセージ・ヘッダの指定
前述のように、メッセージ自体とメッセージの各部分の両方に、ヘッダのセットがあります。
%Net.MailMessageOpens in a new tab および %Net.MailMessagePartOpens in a new tab クラスは、最も一般的に使用されるヘッダに簡単にアクセスできるプロパティを提供しますが、必要な任意のヘッダを追加することもできます。このセクションでは、すべてのヘッダについて説明し、さらにカスタム・ヘッダを作成する方法についても説明します。
指定したメッセージの部分のヘッダは、その部分の Charset プロパティによって指定された文字セットを使用します。
使用している SMTP サーバの要件を理解しておく必要があります。例えば、SMTP サーバの中には、Subject ヘッダを含める必要があるものがあります。同様に、SMTP サーバの中には、任意の From ヘッダを許可しないものもあります。
同様に、SMTP サーバの中には、Priority ヘッダを認識するものもあれば、代わりに X-Priority を認識するものもあります。
基本的な電子メール・ヘッダの指定
以下のプロパティを設定して (%Net.MailMessageOpens in a new tab 内のみ)、メッセージ自体の最も一般的に使用されるヘッダを設定します。
-
To — (必須) このメッセージの送信先の電子メール・アドレスのリスト。このプロパティは、標準の InterSystems IRIS リストです。これを使用するには、標準のリスト・メソッドである Insert()、GetAt()、RemoveAt()、Count()、および Clear() を使用します。
-
From — (必須) このメッセージの送信元の電子メール・アドレス。
-
Date — このメッセージの日付。
-
Subject — (必須) このメッセージの件名を含む文字列。
-
Sender — メッセージの実際の送信者。
-
Cc — このメッセージの送信先のカーボン・コピー・アドレスのリスト。
-
Bcc — このメッセージの送信先のブラインド・カーボン・コピー・アドレスのリスト。
Content-Type ヘッダ
メッセージを送信するときに、メッセージおよび各メッセージ部分の Content-Type ヘッダが、以下のとおりに自動的に設定されます。
-
メッセージが、平文 (IsHTML が 0 で、IsBinary が 0) の場合、Content-Type ヘッダは "text/plain" に設定されます。
-
メッセージが HTML (IsHTML が 1 で、IsBinary が 0) の場合、Content-Type ヘッダは "text/html" に設定されます。
-
メッセージがバイナリ (IsBinary が 1) の場合、Content-Type ヘッダは "application/octet-stream" に設定されます。
-
メッセージがマルチパートの場合、Content-Type ヘッダは MultiPartType プロパティの値に応じて設定されます。
%Net.MailMessageOpens in a new tab と %Net.MailMessagePartOpens in a new tab にはどちらも ContentType プロパティが用意されており、Content-Type ヘッダにアクセスできます。
Content-Transfer-Encoding ヘッダ
%Net.MailMessageOpens in a new tab と %Net.MailMessagePartOpens in a new tab にはどちらも、ContentTransferEncoding プロパティが用意されており、メッセージまたはメッセージの部分の Content-Transfer-Encoding ヘッダを簡単な方法で指定できます。
このプロパティは、"base64"、"quoted-printable"、"7bit"、"8bit" のいずれかです。
既定値は、以下のとおりです。
-
バイナリ・メッセージまたはメッセージ部分の場合、"base64" です。
Important:コンテンツを "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.MailMessageOpens in a new tab と %Net.MailMessagePartOpens in a new tab の両方で、以下の構造を持つ配列である 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")
各種の電子メール・クライアントおよびサーバでは認識するヘッダも異なるので、複数の類似ヘッダを設定して、確実に認識できるヘッダの付いたメッセージを受信したほうが便利となります。
メッセージへの添付の追加
添付を電子メール・メッセージまたはメッセージの部分 (具体的には、%Net.MailMessagePartOpens in a new tab または %Net.MailMessageOpens in a new tab のインスタンス) に追加できます。この操作には、以下のメソッドを使用します。
これらのメソッドは、それぞれ、添付を元のメッセージ (またはメッセージの部分) の Parts 配列に追加し、自動的に IsMultiPart プロパティを 1 に設定します。
method AttachFile(Dir As %String,
File As %String,
isBinary As %Boolean = 1,
charset As %String = "",
ByRef count As %Integer) as %Status
指定したファイルを電子メール・メッセージに添付します。既定では、ファイルはバイナリの添付として送信されますが、代わりにテキストであると指定することができます。テキストの場合、そのファイルが使用する文字セットを指定することもできます。
具体的には、このメソッドは、%Net.MailMessagePartOpens in a new tab のインスタンスを作成し、適宜、ファイルのコンテンツを BinaryData プロパティまたは TextData プロパティに配置し、必要に応じて、Charset プロパティおよび TextData.TranslateTable プロパティを設定します。メソッドは、Parts 配列内のこの新規メッセージ部分の位置を示す整数を参照によって返します。
このメソッドは、メッセージまたはメッセージの部分の Dir プロパティおよび FileName プロパティも設定します。
method AttachStream(stream As %Stream.Object,
Filename As %String,
isBinary As %Boolean = 1,
charset As %String = "",
ByRef count As %Integer) as %Status
指定したストリームを電子メール・メッセージに添付します。Filename が指定されている場合、この添付はファイル添付と見なされます。指定されていない場合、インライン添付と見なされます。AttachFile() の説明を参照してください。
method AttachNewMessage() as %Net.MailMessagePart
%Net.MailMessageOpens in a new tab の新規インスタンスを作成し、それをメッセージに追加して、新たに変更された親メッセージまたはメッセージの部分を返します。
method AttachEmail(mailmsg As %Net.MailMessage)
電子メール・メッセージ (%Net.MailMessageOpens in a new tab のインスタンス) がある場合、このメソッドは、それをメッセージに追加します。このメソッドは、メッセージまたはメッセージの部分の Dir プロパティおよび FileName プロパティも設定します。
このメソッドは、ContentType を "message/rfc822" に設定します。この場合、その他の添付は追加できません。
例 : MessageWithAttachment()
以下の例は、ハードコードされた添付が 1 つある簡単な電子メール・メッセージを生成します。メッセージのアドレスは提供しません。実際にメッセージを送信するときにこの情報を設定できます ("SMTP サーバを使用して電子メールを送信" の "例 3 : SendMessage()" を参照)。
ClassMethod MessageWithAttachment() As %Net.MailMessage
{
Set msg = ##class(%Net.MailMessage).%New()
Set msg.Subject="Message with attachment "_$h
Set msg.IsBinary=0
Set msg.IsHTML=0
Do msg.TextData.Write("This is the main message body.")
//add an attachment
Set status=msg.AttachFile("c:\", "GNET.pdf")
If $$$ISERR(status) {
Do $System.Status.DisplayError(status)
Quit $$$NULLOREF
}
Quit msg
}
その他の例については、%Net.MailMessagePartOpens in a new tab クラスのクラス・リファレンスを参照してください。
エンコードと文字変換
電子メールのメッセージ部分には、使用されている文字セットおよび使用されている Content-Transfer-Encoding (存在する場合) の両方についての情報が含まれています。参照のため、このセクションでは、この情報の使用方法について説明します。
文字セットおよび変換テーブルの詳細は、"変換テーブル" を参照してください。
%Net.SMTPOpens in a new tab は、各部分の Charset プロパティを確認し、適切な変換テーブルを適用します。
指定した部分に対して Charset プロパティを指定しない場合、InterSystems IRIS では UTF-8 が使用されます。
%Net.SMTPOpens in a new tab も ContentTransferEncoding プロパティを確認します。このプロパティが "base64" または "quoted-printable" の場合、メッセージを作成するときに、%Net.SMTPOpens in a new tab が、必要に応じて本文をエンコードします。(コンテンツ転送エンコードが "7bit" または "7bit" の場合、エンコードは必要ありません。)
コンテンツを "base64" でエンコードする場合、Unicode 文字を含めることはできません。送信するコンテンツに Unicode 文字が含まれている場合は必ず、$ZCONVERT を使用してコンテンツを UTF-8 に変換してください。