本ページには広告が含まれています。
目次
メールのHTML形式の本文を表す文字列型の値を取得または設定します。
HTML形式のメールを作成するにはMailItem.BodyFormat プロパティを olFormatHTMLに設定します。
- 構文
- String = MailItem.HTMLBody
- 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を使用します。
<!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にします。この値を大きくしすぎるとスクロールが必要になり見づらくなるためです。
<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メールに最低限必要なスタイルを適用すると以下のようになります。
<!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カラムで文章を入れていく場合は、以下のように記述します。
<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)
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 : 開くファイルのパス名
// 【戻り値】
// <a href="https://uwsc.jp/com/excel/" >Excel オブジェクト</a>
//////////////////////////////////////////////////
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を繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
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で定義して代入しています。
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
使用関数
解説
参考文献
- MailItem.HTMLBody プロパティ (Outlook) | Microsoft Learn
- HTMLメールはどうやって作成するの?基本と特徴を徹底解説!【保存版】
- 画像の横幅によって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オブジェクトのセットが含まれています。