MailItem.HTMLBodyエイチティエムエルボディ プロパティ

本ページには広告が含まれています。

メールのHTML形式の本文を表す文字列型の値を取得または設定します。

HTML形式のメールを作成するにはMailItem.BodyFormat プロパティを olFormatHTMLに設定します。

構文
  1. String = MailItem.HTMLBody
  2. MailItem.HTMLBody = String
引数
戻り値
メールのHTML形式の本文を表す文字列型(String)

MailItem オブジェクトを返すメソッド・プロパティ

MailItem.HTMLBody プロパティ
Items オブジェクトからItemオブジェクトを返します。
Application.CreateItem メソッド
新しいOutlookのアイテムを表すオブジェクトを作成します。

HTMLメールの作り方

DOCTYPE宣言

まずはDOCTYPE宣言でHTMLメールのベースを作ります。

DOCTYPEは"XHTML 1.0"または"HTML 4.01"の2種類がありますが、XHTMLは廃止されたのでHTML 4.01を使用します。

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta name="viewport" content="target-densitydpi=device-dpi,width=device-width,maximum-scale=1.0,user-scalable=yes">
	<meta http-equiv="Content-Language" content="ja">
	<meta charset="shift_jis">
	<title></title>
</head>
<body>
</body>
</html>

マークアップ

次にメールの中身を作成していきます。HTMLメールは基本的にテーブルレイアウトで作成していきます。bodyタグ直下にtableタグを記述し幅は600pxにします。この値を大きくしすぎるとスクロールが必要になり見づらくなるためです。

HTML
<body>
	<table width="600px"></table>
</body>
よく使うHTMLタグ
<table>
テーブルを作成する際に使用します。子要素にtr、tdタグを使用することで構造を作ります。
  • width
  • border
  • cellpadding
  • cellspacing
  • align
  • id
  • style
<tr>
テーブルの1行を表します。子要素にtdタグを指定できます。
  • style
<td>
表示するデータを記述します。
  • style
<p>
文章を記述する際に使います。
<img>
画像を表示する際に使用します。src属性に画像のパス(httpから始まるフルパス)。alt属性は画像が表示できなかったときに表示されるテキスト。
  • src
  • alt
  • width
  • height
<a>
リンクを作成する際に使用します。imgタグの入れ子にすることで画像にリンクを設定することもできます。
  • href
  • target
<br>
改行する際に使用します。

スタイリング

メールの中身をマークアップした後は、CSSを使いスタイリングしていきます。ウェブ開発の場合外部から読み込むのが一般的ですが、HTMLメールではCSSの外部読み込みをサポートしていません。そのため「インライン形式」または「埋め込み形式」でスタイリングしていきます。body直下のtableタグでは、cellpadding、cellspacing、borderの値は0にします。

インライン形式
各HTMLタグ内にCSSを直接指定する形式。
埋め込み形式
headタグ内にCSSをまとめて記述する形式。
よく使うスタイル
cellpadding
テーブルのセル内の余白を指定します。HTMLメールの場合0を指定します。tableタグで使えます。
cellspacing
テーブルのセル同士の間隔を指定します。HTMLメールの場合0を指定します。tableタグで使えます。
border
テーブルの枠線の太さを指定します。HTMLメールの場合0を指定します。
style
各タグ内でスタイルの指定を行うことができます。
  • margin
  • padding
  • background-color
  • color
  • font-family
  • font-size
  • font-weight
  • text-align
  • border-radius
  • line-height
  • background
  • display
  • text-decoration
  • box-sizing
font-size
フォントの大きさを指定します。style属性で使えます。
font-weight
文字の太さを指定します。style属性で使えます。
color
文字色を指定します。style属性で使えます。

テンプレート

HTMLメールに最低限必要なスタイルを適用すると以下のようになります。

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta name="viewport" content="target-densitydpi=device-dpi,width=device-width,maximum-scale=1.0,user-scalable=yes">
	<meta http-equiv="Content-Language" content="ja">
	<meta charset="shift_jis">
	<title></title>
</head>
<body>
	<table border="0" cellpadding="0" cellspacing="0" width="600px"></table>
</body>
</html>

レイアウト

セル結合のrowspanやcolspanは使わず、tableダクを入れ子にすることでレイアウトを作成していきます。

画像
文章1 文章2

画像の下に2カラムで文章を入れていく場合は、以下のように記述します。

UWSC
<body>
<table border="0" cellpadding="0" cellspacing="0" width="600px">
	<tr>
		<td><img src="○○○.jpg" alt="○○○"></td>
	</tr>
	<tr>
		<table border="0" cellpadding="0" cellspacing="0" width="600px">
			<tr>
				<td>文章1</td>
				<td>文章2</td>
			</tr>
		</table>
	</tr>
</table>
</body>

プログラム実行例

指定期間のメール情報を取得(Outlook)

UWSC
CONST olFolderInbox = 6
CONST xlTop = -4160
CONST xlLeft = -4131

DIM Excel = ExcelBoot()

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2021/01/01"
DIM end = "2021/01/02"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] < '" + end + "'")

DIM array[][1] = "受信日時", "ReceivedTime", + _
					"送信者メールアドレス", "SenderEmailAddress", + _
					"送信者", "SenderName", + _
					"CC", "CC", + _
					"BCC", "BCC", + _
					"件名", "Subject", + _
					"本文", "Body", + _
					"HTML本文", "HTMLBody"

Excel.Application.ScreenUpdating = FALSE

FOR i = 0 TO UBound(array)
	Excel.Cells(1, i + 1).Value = array[i][0]
NEXT

DIM row = 2

FOR MailItem IN Items
	FUKIDASI(row + "/" + Items.Count)
	WITH MailItem
		FOR i = 0 TO UBound(array)
			Excel.Cells(row, i + 1).Value = EVAL("." + array[i][1])
		NEXT
	ENDWITH
	row = row + 1
NEXT

WITH Excel.Range("A1").CurrentRegion
	.ColumnWidth = 20
	.RowHeight = 30
	.VerticalAlignment = xlTop
	.HorizontalAlignment = xlLeft
ENDWITH

Excel.Application.ScreenUpdating = TRUE

//////////////////////////////////////////////////
// 【引数】
//   path : 開くファイルのパス名 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION ExcelBoot(path = "")
	DIM Excel = CREATEOLEOBJ("Excel.Application")
	Excel.Visible = TRUE
	IFB path = "" THEN
		Excel.Workbooks.Add
	ELSE
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB FSO.GetParentFolderName(path) = "" THEN
			path = GET_CUR_DIR + "\" + path
		ENDIF
		Excel.Workbooks.Open(path)
	ENDIF
	RESULT = Excel
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
使用関数

HTMLメールを送信(Outlook)

HTMLメールの本文は長くなるので、TEXTBLOCKで定義して代入しています。

UWSC
CONST olMailItem = 0
CONST olFormatHTML = 2

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM MailItem = Outlook.Application.CreateItem(olMailItem)

WITH MailItem
   .BodyFormat = olFormatHTML
   .Subject = "HTMLメールのテスト"
   .HTMLBody = Body
   .To = "contact@example.com"   // 送信先
   Account = Outlook.Session.Accounts.Item("info@example.com")    // 送信元
   .SendUsingAccount = Account
   .Send
ENDWITH

TEXTBLOCK Body
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional/a/EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
       <meta name="viewport" content="target-densitydpi=device-dpi,width=device-width,maximum-scale=1.0,user-scalable=yes">
       <meta http-equiv="Content-Language" content="ja">
       <meta charset="shift_jis">
       <title></title>
   </head>
   <body>
       <table border="0" cellpadding="0" cellspacing="0" width="600px">
           <tr>
               <td><img alt="画像" src="http://example.com/image.jpg" width="600px" style="width:600px;"></td>
           </tr>
           <tr>
               <table border="1px" cellpadding="0" cellspacing="0" width="600px">
                   <tr>
                       <td width="50%">テキスト1</td>
                       <td width="50%">テキスト2</td>
                   </tr>
               </table>
           </tr>
       </table>
   </body>
</html>
ENDTEXTBLOCK
使用関数
解説

参考文献

  1. MailItem.HTMLBody プロパティ (Outlook) | Microsoft Learn
  2. HTMLメールはどうやって作成するの?基本と特徴を徹底解説!【保存版】
  3. 画像の横幅によってHTMLメールの表示が崩れる場合|かんばらあい

関連記事

MailItem オブジェクト
メールメッセージを表します。
Items.Restrict メソッド (Outlook)
Items コレクションにフィルタを適用し、フィルタに一致する元のすべてのアイテムを含む新しいItems コレクションを返します。
MailItem.Attachments プロパティ (Outlook)
メールに添付されているすべての添付ファイルを表すOutlook.HTMLBodyを返します。
MailItem.BodyFormat プロパティ (Outlook)
メール本文の形式を表すOlBodyFormatクラスの定数を取得または設定します。
MailItem.Parent プロパティ (Outlook)
指定したオブジェクトの親オブジェクトを返します。
MailItem.ReceivedTime プロパティ (Outlook)
アイテムを受信した日付と時刻を示す日付型(Date)の値を取得します。
MailItem.To プロパティ (Outlook)
Outlook アイテムの宛先の受信者の表示名一覧を表す、セミコロン(;)で区切られた文字列型(String) の一覧を設定します。
CDO.From プロパティ
メッセージの差出人(From)を指定します。
Account オブジェクト
Accountオブジェクトは、現在のプロファイルに定義されているアカウントを表します。
Accounts オブジェクト
現在のプロファイルで利用できるアカウントを表すAccountオブジェクトのセットが含まれています。