Outlookでメールを送信する方法
今回の目標
Outlook(classic) で、メールを送信する方法について解説します。
メール本文のフォントの変更などの詳細な情報については後編で解説予定です。
目標リスト
- メールを下書き・送信できるようになる
- To, CC, BCC を指定できるようになる
- ファイルを添付して送信できるようになる
Outlookで送る方法について
事前準備
ExcelVBAでは、Outlook(classic) からメールを送信することができます(Outlook ではなく、Outlook(classic) であることに注意してください) 。
ExcelVBAからメールを送信するには、マクロ実行前に Outlook(classic) でメールを送信できるよう準備が必要です。
本ページのサンプルプログラムを実行する前に、メールの送受信ができることを確認してください。
MailItem オブジェクトの基本と主なメソッド・プロパティ
VBAでメールを送信するには、参照設定にチェックを入れるか、CreateObject でオブジェクトを作成する方法があります。 今回は、CreateObject を使用して「Outlook」のオブジェクトを作成します。
メール送信の基礎
CreateObject を使用して「Outlook」のオブジェクトを作成します(①)。
そのオブジェクトのメール機能を指定するため、先のオブジェクトにある CreateItem メソッドに 0 を指定します(②)※ Outlookには、予定や連絡先、タスク管理機能などがあります。
この ② で作成したオブジェクト(MailItem 型)の変数を操作してメールを送ります。
具体的には、Toプロパティに送信先のメールアドレスを指定し(③)、Sendメソッドでメールを送信(④)します。
'オブジェクト変数の作成
Dim olApp As Object
Dim olMail As Object
'Outlookのメール機能を使用する
Set olApp = CreateObject("Outlook.Application") ' ← ①
Set olMail = olApp.CreateItem(0) ' ← ②
'[xxx@example.com]宛にメールを送る
olMail.To = "xxx@example.com" ' ← ③
olMail.Send ' ← ④
MailItem オブジェクトのメソッドやプロパティの一覧
MailItem オブジェクトで業務でよく使うメソッドやプロパティを紹介します。
まず、よく使う MailItem オブジェクトのメソッドを紹介します。
| メソッド名 | 説明 |
|---|---|
| Attachments.Add | 添付ファイルのフルパスを指定。複数のファイルを添付する場合は、添付したいファイル数の数だけ呼び出す。 |
| Display | Outlook のウィンドウを表示する。 |
| Send | 作成したメールを送信する。 |
| Save | 作成したメールを下書き保存する。 |
次に、よく使う MailItem オブジェクトのプロパティを紹介します。
| プロパティ名 | 説明 |
|---|---|
| To | To(メインの宛先)。セミコロン区切りで複数指定可。 |
| CC | CC(情報共有の宛先)。セミコロン区切りで複数指定可。 |
| BCC | BCC(情報共有の宛先)。他の受信者にアドレスを知られずにメールを送れる。セミコロン区切りで複数指定可。 |
| Subject | メールの件名。 |
| Body | メールの本文(プレーンテキスト)。改行文字は「vbCrLf」 。 |
| HTMLBody | メールの本文(HTML形式)。太字などの文字を装飾する際に使用。 |
| Importance | メールの重要度。0 = 低い、1 = 普通、2 = 高い。 |
詳細については、Microsoft の公式ページを確認してください。
【外部リンク】MailItem オブジェクト (Outlook)
Outlookを表示したり、メールを下書き・送信する
Outlook(classic) を表示する
MailItem オブジェクトの Display メソッドを呼び出すことで、Outlook(classic) を表示できます。 下記サンプルは、メールの件名や本文、宛先を入力せずに、Outlook(classic) を画面に表示します。
サンプルコード
Sub OutlookMail1()
Dim olApp As Object
Dim olMail As Object
' Outlookアプリケーションを取得
Set olApp = CreateObject("Outlook.Application")
' 新規メールを作成
Set olMail = olApp.CreateItem(0)
' Outlook(classic) を画面に表示する
olMail.Display
' オブジェクト変数をリセットする
Set olMail = Nothing
Set olApp = Nothing
End Sub
出力結果
Outlook(classic) のメール作成画面を表示します。
宛先や件名、本文には何も入力されていない状態です。
メールを下書きとして保存する
MailItem オブジェクトの To プロパティで宛先、Subject プロパティで件名、Body プロパティで本文を設定できます。
MailItem オブジェクトの Save メソッドを呼び出すことで、作成したメールを下書き保存することができます。
下記サンプルは、宛先、件名、本文を入力したうえで、Outlook(classic) を画面に表示、下書き保存をします。
Outlook(classic) を表示せずに下書き保存したい場合は .Display (★マーク)の行を削除してください。
サンプルコード
Sub OutlookMail2()
Dim olApp As Object
Dim olMail As Object
' Outlookアプリケーションを取得
Set olApp = CreateObject("Outlook.Application")
' 新規メールを作成
Set olMail = olApp.CreateItem(0)
With olMail
.To = "xxx@example.com" ' 宛先
.Subject = "メールタイトル" ' 件名
.Body = "メールの本文です" ' 本文
.Display ' ★Outlook(classic) を画面に表示する
.Save ' 下書き保存する
End With
' オブジェクト変数をリセットする
Set olMail = Nothing
Set olApp = Nothing
End Sub
出力結果
Outlook(classic) のメール作成画面を表示します。
また、宛先や件名、本文を入力して、下書き保存します。
CCやBCCを設定して送信する
MailItem オブジェクトの To プロパティで宛先(To)、CC プロパティで宛先(CC)、BCC プロパティで宛先(BCC)を設定できます。
宛先が2件ある場合は、半角セミコロン(;)で区切ります。
MailItem オブジェクトの Attachments コレクションの Add メソッドを呼び出すことで、ファイルを添付することができます。
メールの作成が完了したら、Send メソッドでメールを送信します。
下記サンプルは、宛先(To2件/CC1件/BCC1件)、件名、本文を入力、ファイルを添付して送信します。
※ プログラムのテストが終了するまでは、Send メソッドで送信せず、Save メソッドで下書きして作成内容を目視確認してから手動で送信しましょう。
サンプルコード
Sub OutlookMail3()
Dim olApp As Object
Dim olMail As Object
Dim toAddr As String ' To のメールアドレスを保存する
Dim ccAddr As String ' CC のメールアドレスを保存する
Dim bccAddr As String ' BCC のメールアドレスを保存する
Dim attachPath As String ' 添付ファイルのフルパスを保存する
' Outlookアプリケーションを取得
Set olApp = CreateObject("Outlook.Application")
' 新規メールを作成
Set olMail = olApp.CreateItem(0)
' 添付ファイルのフルパスを指定する( "¥" は区切り文字です)
attachPath = ThisWorkbook.Path & "¥" & "Test.pdf"
' 送付先を指定する(2件以上ある場合、";" で区切る)
toAddr = "山田様<xxx1@example.com>;佐藤様<xxx2@example.com>"
ccAddr = "高橋様<xxx3@example.com>"
bccAddr = "坂本様<xxx4@example.com>"
With olMail
.To = toAddr ' 宛先(To)
.CC = ccAddr ' 宛先(CC)
.BCC = bccAddr ' 宛先(BCC)
.Subject = "テストメールです" ' 件名
.Body = "本文1行目です。" & vbCrLf & _
"本文2行目です。" ' 本文
'.Attachments.Add attachPath ' ファイルを添付する
'.Save ' メールを下書き保存する
.Send ' メールを送信する
End With
' オブジェクト変数をリセットする
Set olMail = Nothing
Set olApp = Nothing
End Sub
出力結果
実行後の例です。
下の画像は、Gmailあてに送信した場合の受信側の画面です。
メールを送信できなかった場合
プログラムは問題が無いのにメールを送信できない場合があります。
そのような場合は下記事項を参照してください。
送信者側の問題
Microsoft アカウントの不具合
Microsoftのドメインである outlook.com や outlook.jp、hotmail.co.jp を使用している場合、Web 版の Outlook にログインすると解消する場合があります。
下記のURLか、検索サイトから Web 版の Outlook にログインしてください。
【Microsoft】Outlook.com にサインインする方法
Outlook(classic) の準備が出来ていない
新しい Outlook の設定が完了していても、Outlook(classic) の設定をしていないと、ExcelVBAでは、メールを送信できません。
下の画像が、新しい Outlook のインターフェース画面です。
ExcelVBA では、この Outlook を操作できません。
こちらの画像が、Outlook(classic) のインターフェース画面です。
ExcelVBA では、この Outlook を操作します。
受信側の問題
迷惑メールに振り分けられている
送信したメールが、受信側のメールサーバーが自動的に迷惑メールに振り分けている可能性があります。
企業から送信されたメールや、本文や件名が少ない文字数の場合、迷惑メールと判断される場合があります。
これは筆者の経験ですが、3大キャリアの一角である Docomo は、強力なフィルタリングにより迷惑メールと判断されることが多かったです。
重ねてになりますが、自動的に振り分けられるため、先方(受信者)の「迷惑メールのフィルタリング機能を使用していない」を信用しすぎないようにしましょう。
メールボックスやメールサイズが上限を超えている
受信側のメールボックスが最大容量に達していたり、1通のメールサイズが上限を超えているとメールを受信できません。
自分自身に送信(送信するアドレスと受信するアドレスを同じにして送信)して、送受信できることを確認できる場合、容量が原因の場合があります。
有名な会社のメールボックスの最大容量及びメール1通のサイズ上限を紹介します。
| アカウント | メールボックスの最大容量 | メール1通のサイズ上限 |
|---|---|---|
| Apple | 5GB ※ | 20MB |
| 15GB | 25MB | |
| Microsoft | 15GB | 25MB |
| Yahoo! | 2~10GB | 25MB |
