Outlookでメール一括送信する方法(差し込み、HTML形式、添付ファイル複数あり)

メールを一括送信する方法はウェブ上にいくつも紹介されていましたが、以下のすべての条件を満たすものが見つからなかったのであれこれ組み合わせて実現してみました。

【条件】

・メール送信にはOutlookを使用すること

・メール本文はHTML形式であること

・添付ファイルを複数添付できること

・送信先メールアドレス、企業名、氏名を差し込みできること

あとこれは条件にはしていませんでしたが、結果的に

・添付ファイルを送信先別に変える

・件名を送信先別に変える

もできました(変えずに同じにもできます)。

【環境】

Windows7 / Excel 2013 / Outlook 2013

Windows7 / Excel 2010 / Outlook 2010

で確認済み。その他は確認してないというだけでできないわけではないと思います。

【手順】

A:必要なファイルを準備する

1:[スタート]ボタン→[コンピューター]→[ローカル ディスク(C:)]と進み、「work」という名前の新しいフォルダーを作ります。

2:「work」フォルダーの中に添付したいファイルをすべて入れます。

3:アウトルックを立ち上げ、[新しい電子メール]をクリックしてメール本文を入力します。テキスト形式でもHTML形式でも構いません。

このとき、のちのち差し込みたい(送信先ごとに変えたい)箇所を□□や●●などの記号にしておきます。

4:[ファイル]→[名前を付けて保存]と進み、「test」という名前を付けて先ほどの「work」フォルダー内に保存します。このときファイルの種類を「Outlook テンプレート(*.oft)」にします。

5:エクセルを起動して、

・宛先

・企業名

・氏名

・件名

・添付ファイル1

・添付ファイル2

を1行目に記載します。この文字列はのちほど記載するコードと連動していますので変更しないでください。

2行目以降に実際に送る内容を記載していきます。

※同姓同名の人がいた場合、下に記載された方のみが有効になります。

※添付するファイルを人によって変更することはできますが、添付するファイルの数は全員共通でなければ動きません。この例では全員2ファイルを添付します。添付数を変える方法は後述します。

編集が終わったら、好きな名前を付けてエクセルを保存します。

ここまでで「A:必要なファイルを準備する」は完了です。

B:メッセージファイルを生成する

1:先ほど保存したエクセルファイルを開き、[ファイル]→[オプション]と進みます。

[リボンのユーザー設定]を選択し、「開発」にチェックが入っているか確認します。入っていなかったらチェックを入れ、「OK」で設定を保存します。

2:ツールバーに「開発」が追加されるので、[開発]→[Visual Basic]と進みます。

3:「Sheet1(Sheet1)」をダブルクリック

4:出てきたウインドウに以下の内容を貼り付けます。

Enum 列
宛先 = 1
企業名
氏名
件名
添付ファイル1
添付ファイル2
End Enum

Sub メール作成()
Dim ol As New Outlook.Application
Dim m As mailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row
For i = 2 To MaxRow
Set m = ol.CreateItemFromTemplate("c:\work\test.oft")
m.To = Cells(i, 列.宛先).Value
m.Subject = Cells(i, 列.件名).Value
m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル1).Value
m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル2).Value

m.HTMLBody = Replace(m.HTMLBody, "□□", Cells(i, 列.企業名).Value)
m.HTMLBody = Replace(m.HTMLBody, "●●", Cells(i, 列.氏名).Value)
m.SaveAs "c:\work\" & Cells(i, 列.氏名).Value & ".msg"
Next i
End Sub

5:[ツール]→[参照設定]と進み、「Microsoft Outlook 15.0 Object Library」にチェックが入っているか確認します。

入っていない場合は、下の方から探してチェックを入れ「OK」で保存します。

※「15.0」の部分は違う数字の場合がありますが、それで問題ありません

6:[実行]→[Sub/ユーザーフォームの実行]と進みます。

※この画面が出た場合は「実行」をクリック

7:「work」フォルダー内にメッセージファイルが生成されます。

ここまでで「メッセージファイルを生成する」は完了です。

C:メールを一括送信する

1:アウトルックの「送信トレイ」に、先ほど生成されたメッセージファイルをドラッグ&ドロップします。

2:[ファイル]→[オプション]→[リボンのユーザー設定]と進み、エクセルの時と同じ要領で「開発」にチェックが入っているか確認します。入っていなかったらチェックを入れ、「OK」で設定を保存します。

3:ツールバーに「開発」が追加されるので、[開発]→[Visual Basic]と進み、「ThisOutlookSession」をダブルクリック。

4:表示されたウインドウに以下のコードを貼り付けます。

Public Sub SendSelected()
Dim objMail As MailItem

For Each objMail In ActiveExplorer.Selection
objMail.Send
Next
End Sub

5:アウトルックに戻り、「送信トレイ」内にあるメールをすべて選択します。

6:Visual Basicに戻り、[実行]→[Sub/ユーザーフォームの実行]と進みます。

※この画面が出たら「実行」をクリック

これで送信トレイの中のメールが順次送信されていくはずです。

【ちょっとアレンジ】

・添付ファイルの数を変える方法

エクセルのVisual Basicに書いたコードの下記部分をいじってください。

Enum 列
宛先 = 1
企業名
氏名
件名
添付ファイル1
添付ファイル2
End Enum

Sub メール作成()
Dim ol As New Outlook.Application
Dim m As mailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row
For i = 2 To MaxRow
Set m = ol.CreateItemFromTemplate("c:\work\test.oft")
m.To = Cells(i, 列.宛先).Value
m.Subject = Cells(i, 列.件名).Value
m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル1).Value
m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル2).Value

m.HTMLBody = Replace(m.HTMLBody, "□□", Cells(i, 列.企業名).Value)
m.HTMLBody = Replace(m.HTMLBody, "●●", Cells(i, 列.氏名).Value)
m.SaveAs "c:\work\" & Cells(i, 列.氏名).Value & ".msg"
Next i
End Sub

添付ファイルが1つでいい場合は赤字部分を消してください。

添付ファイルを増やしたい場合は、

添付ファイル1
添付ファイル2

添付ファイル3

m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル1).Value
m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル2).Value

m.Attachments.Add "c:\work\" & Cells(i, 列.添付ファイル3).Value

といった感じで追記し、その分の列をエクセルに追記すればOKです。

以上、あくまでまたいつか自分がやる時のためのメモ。

ここに書いた内容を実行される場合はあくまで自己責任でお願いします。

何か被害があった場合、いかなる理由であっても保障いたしかねます。

摘自http://www.bnm.tokyo/entry/2016/05/02/125815

用EXCLE群发outlook邮件的更多相关文章

  1. 妙用Outlook2003群发商业邮件

    妙用Outlook2003群发商业邮件   我们知道,如果需要在Outlook 2003中向多个对象发送邮件,那么只需要在指定收件人时用分号输入多个邮件地址或者使用抄送方式即可:假如对象较多,可以使用 ...

  2. 如何浏览并管理 Outlook 邮件?

    当你的邮件多起来的时候你就不得不考虑这个问题了,如何处理各种邮件? 如何浏览并管理 Outlook 邮件? 待续~

  3. 如何查看Outlook邮件的源码(包括ip)

    如何查看Outlook邮件的源码(包括ip) 一.总结 1.右键点击邮件可出现 view message details. 二.如何查看Outlook邮件的源码(包括ip) 1.点收件箱 2.鼠标右键 ...

  4. 个人永久性免费-Excel催化剂功能第84波-批量提取OUTLOOK邮件附件

    批量操作的事情常常能让人感到十分畅快,区别于一次次的手工的操作,它真正实现了“人工智能”想要的效果,人指挥机器做事情,机器就可以按着人意去操作.此篇给大家再次送了批量操作一绝活,批量下载OUTLOOK ...

  5. Outlook 邮件助手

    Outlook 邮件助手 1 Overview 2 C# 编程 3 Outlook 设置 3.1 Outlook 2013 3.2 Outlook 2010 1 Overview 本章将示例如何开发一 ...

  6. C#结合LumiSoft.Net.dll读取Outlook邮件(.eml格式邮件)

    如果直接从Outlook(或者微软的其它邮件客户端如:Outlook Express.Windows Live Mail)的邮件文件(.eml格式)中提取各种电子邮件内容,使用LumiSoft.Net ...

  7. 读取本地outlook邮件内容

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. outlook邮件中样式问题

    目前要做一个定时发送邮件的功能,邮件的大致内容布局如下: HTML中 在QQ邮件中,可以进行正常显示. 在outlook网页版,也可以正常显示, outlook客户端 但是到了客户端就会出现很多很神奇 ...

  9. smtp outlook邮件发送非授权码模式

    1.起因:send fail SMTP AUTH extension not supported by server. 使用端口25 和587均失效出现此问题 首先前往outlook修改设置pop和I ...

随机推荐

  1. 线程:生命周期、实现方式、start()和run()的区别!

    1.线程的生命周期 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用Thread类及其子类的对象来表示线程,在它的 一个完整的生命周期中通常要经历如下的五种状态: 新建:当一个Thre ...

  2. C#语言————第一章 第一个C#程序

    第一章    第一个C#程序 ******************C#程序***************     ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...

  3. Cache 和 Buffer 都是缓存,主要区别是什么?【转】

    作者:Towser 链接:https://www.zhihu.com/question/26190832/answer/32387918 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  4. EaseType 缓动函数

    EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...

  5. 使用parted创建gpt大分区例子

    [root@VM000000518 ~]# parted /dev/xvde GNU Parted 2.1 Using /dev/xvde Welcome to GNU Parted! Type 'h ...

  6. [HDFS_1] HDFS 的概念和特性

    0. 参考 HDFS你一定要知道,要考的 大数据开发实战:HDFS和MapReduce优缺点分析 SecondaryNamenode的作用详解 1. HDFS 是什么 HDFS :一种分布式文件系统, ...

  7. 安全之路 —— C++实现进程守护

    简介 所谓进程守护,就是A进程为了保护自己不被结束,创建了一个守护线程来保护自己,一旦被结束进程,便重新启动.进程守护的方法多被应用于恶意软件,是一个保护自己进程的一个简单方式,在ring3下即可轻松 ...

  8. ccf-20170303--Markdown

    我的想法如下图: 代码和题目如下: 问题描述 试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Markdown 是一 ...

  9. January 31st, 2018 Week 05th Wednesday

    Real love is not just instinct, but intent. 真正的爱不是身体上的一见钟情,而是要用心去经营. What is real love? Honestly, I ...

  10. January 18th, 2018 Week 03rd Thursday

    To strive, to seek, to find, and not to yield. 去奋斗,去寻觅,去探索,但绝不屈服. Strive for our dreams, seek the ve ...