注文メールの内容をサーバーから受信しExcelに取り込む仕組みのサンプル
こちらの記事について、楽天の注文確認メールの取り込みのデモを作成しました。詳しくはこちらをご覧ください。
こちらの記事について、カスタマイズ・設定のサポートを開始しました。詳しくはこちらをご覧ください。
先日、http://www.simple-sys.com/blog/2008/04/04/289/の記事で、注文メールの内容をエクセルに取り込む仕組みについて書きました。
その際は、メールの本文をExcelのシートに貼り付けて取り込んでいく、というものでした。
ただ、取り込むメールの件数が増えてくれば、その作業も結構面倒なものになります。
エクセル上からメールの受信→内容の解析→内容を取り込みExcel上に貼り付ける、という一連の流れをボタン1つで実行する仕組みのサンプルを作ってみました。
この仕組みをサンプルで動作させるには、以下のものが必要です。
- mailtorikomi.xls
- BSMTP.DLL メールを受信するために使用します。
- メールを受信するメールアドレス(普段使っていないメールアドレスでお試しください)
- 取り込みのテストを行うためのダミーのメール。
以下、操作手順です。
まず、BSMTP.DLLをインストールします。
Down Load! BASP21-2003-0211.exe (1.44MB)をダウンロードして実行するか、Down Load! Bsmtp20070629-587.lzh(119KB)をダウンロードし、解凍してbsmtp.dllを Windowsのsystemディレクトリ(c:¥windows¥system¥ c:¥winnt¥system¥ 等)にコピーしてください。
次にmailtorikomi.xlsをダウンロードして、開いてください。

Sheet1のメールサーバー等を設定する欄(青の部分)を入力してください。
使用するメールアドレスは普段使わないメールアドレスでメールサーバーに未受信のメールがない状態でご使用ください。
(フリーメールなどでもPOP3で読み出せるのであれば、問題ありません)
件名が「楽○注文メール」から始まるメールを取り込むように設定してありますが、不具合などで取り込み対象以外のメールが削除されても当方では責任を負いかねます。ご了承ください。
メール保存フォルダには、受信したメールがファイルにして保存されます。あらかじめフォルダ(初期値はc:¥maildataとなっています)を作成して置いてください。
ここまで設定して、「サーバー内の全メール件数を確認」ボタンを押してください。

このように「0件」と表示されることを確認してください。
(エラーが表示される場合は、BSMTP.DLLがきちんとインストールされているか、または青い部分の設定が間違っていないかをご確認ください。)
それでは実際にメールの取り込みをやってみます。
ダミーのメールが必要です。メールを取り込むメールアドレスのアカウントから、
のアドレスに空メールを送信してください。しばらくすると、メールが届きますので、そこに記載されているアドレスへアクセスしてください。

このようなページが表示されますので、フォームからダミーでデータを入力してください。
メールを作成するのが面倒であれば、「ダミー8件送信」のボタンを押すと、8件ダミーで送信します。
送信ボタンを押すと、件名が「楽○注文メール」というメールが空メールを送信したメールアドレスに届きます。
(この際、メールソフトで受信してしまうと、mailtorikomi.xlsから受信できなくなってしまうので、受信しないで下さい)
では取り込んでみます。mailtorikomi.xlsの「サーバー内の全メール件数を確認」ボタンを押してみてください。

このように、サーバー内の全てのメールの件数が表示されます。
「メール取り込み実行」ボタンを押すと、取り込みを開始します。

このようにメールの内容を取り込みます。
もちろん、このプログラムでは決まった形式のメールしか受信できませんが、VBAで記載されている内容を修正すれば、いろいろな形式でのメールを取り込むことが可能になります。
ご質問などがあれば、toi@simple-sys.com (@は半角に直してください)までお問い合わせください。
途中までは指示どおり、うまくいったかたとおもいますが、貴殿から頂いたサンプルメールの取り込みが出来ません。問題点をご教示願います。
荒木さま
コメントありがとうございます。こちらからのメールの取り込みが出来ない、との事ですが、
どのような状況なのでしょうか?
可能であれば、
・使用されているOS
・使用されているExcelのバージョン
・http://www.simple-sys.com/blog/mailtorikomi/
の記事の、どこの画面の操作をすると、どのようなエラーや内容が表示されて取り込みができないのか?
(例:mailtorikomi.xlsの「サーバー内の全メール件数を確認」ボタンを押すとエラーが「xxxxx」と表示される 等)
をメールにて教えていただけますでしょうか?
toi@simple-sys.com 米本あてまでお送りください。
はじめまして!
注文メール・・・非常に軽くてべんりです。
メールの添付ファイルを取り込むような仕組みってありますか?
添付の写真を任意のフォルダに格納するとか・・・
長崎さま
コメントありがとうございます。
添付ファイルを取り込む仕組みについてですが、
BSMTP.DLL の機能に、添付ファイルを扱う機能があるようです。
そちらの機能を使ってVBAを作成すれば、任意のフォルダに格納したり、
受信した添付ファイルの写真をExcelに張り付けたり、といったことも
可能かと思われます。
後ほど、時間が取れましたら、サンプルを作成してみますね。
長崎さま
添付ファイルをダウンロードして、Excelに張り付けるサンプルを作成してみました。
よろしければ、http://www.simple-sys.com/blog/2011/04/02/469/
の記事をご覧ください。
こんにちは!
大変興味のあるシステムですね、使ってみたくなり設定を行ったのですが「サーバー内全メール確認」のボタンを押すと”エラーが発生しましたPath is not Directory”とのエラーメッセージがでました。一応設定に間違いはないと思うのですが・・・
OSはVISTAでExcelは2007です。
宜しくお願い致します。
新井川さま
コメントありがとうございます。
「Path is not Directory」のエラーは、メール保存フォルダ
で設定されたフォルダが作成されていない場合に表示されるようです。
フォルダを作成し、改めて試してみてください。
はじめまして
試しに使わせていただきましたが、非常に便利ですね。
ただ、共用のアドレスで使いたいのですが…
ダウンロードするとサーバーのメールが削除されてしまうようです。
マクロの設定でダウンロードしてもサーバーにメールのコピーを置くようにできないでしょうか?
ご多忙とは存じますがよろしくお願い致します。
河上さま
コメントありがとうございます。
サーバー上にメールのコピーを残すことは可能です。
その場合、マクロの一部を修正する必要があります。
「メール取り込み実行ボタン_click」の部分の、
szCommand = “SAVD ” + Trim(Str(torikomitaishou.Item(i)) – (i – 1))
となっている部分を
szCommand = “SAVE ” + Trim(Str(torikomitaishou.Item(i)))
と変更すれば、サーバー内のメールは削除せずに、取り込むことが可能です。
ただ、この場合サーバー内のメールを削除しない限り、「メール取り込み実行」ボタンを
押すと、一度取り込んだメールも何度でも取り込んでしまいます。
以上、お試しください。
早々のご返事ありがとうございます。
早速試します。
重複の取り込みはマクロで調整できそうですね。
ご丁寧な回答ありがとうございました。
使用するメールアドレスは普段使わないメールアドレスでメールサーバーに未受信のメールがない状態でご使用ください。
これが、よく分からないんですが、普段使わないメールアドレスとはどようなものでしょうか?メールアドレスはひとつだけだと思うんですが・・・・・。
(この際、メールソフトで受信してしまうと、mailtorikomi.xlsから受信できなくなってしまうので、受信しないで下さい)
これもよく分かりません、メールソフトで受信しないとなると、何で受信するのでしょうか・・・・。
上記2点が分かりませんまま、普段使うメールアドレスで、メールソフトで受信したところ、現在受信トレイには
「toi@simple-sys.com」と言うメールが8通届いてます。
そして、≪サーバー内の全メール件数確認≫をクリックすると「0件」、、≪メールを取り込み実行≫をクリック
すると、当然ながら「取り込むメールがありませんでした」と表示されます。
たぶん、上記2点の関係だと思いますが、何せ理解出来てないので、どのようにすればいいか全く分かりません
ご教授のほどよろしくお願い申し上げます。
浅井さま
コメントありがとうございます。
>使用するメールアドレスは普段使わないメールアドレス
こちらの意味ですが、普段お使いになられているプロバイダー(biglobeやNiftyなど)の
メールアドレスとは別に、このデモ用にフリーメール(Yahooやgoogleなど)で
新たに別途メールアドレスを作成して、そちらのメールアドレスでお試しください、という意味です。
このデモを動かす際に、普段お使いのメールアドレスを使用してしまうと、万が一、
このデモのプログラムを実行する際、不具合や設定ミスなどがあった場合、
本来取り込むべきではないメールを誤ってExcelで取り込んでしまう可能性があるためです。
>この際、メールソフトで受信してしまうと、mailtorikomi.xlsから受信できなくなってしまうので、受信しないで下さい
このデモは、受注メールを普段お使いのメールを受信するソフト(WindowsメールやOutLookExpressなど)の
代わりにExcelに直接取り込むデモとなります。
Excelが取り込みを行う前に普段のメールを受信するソフトを使用してしまうと、メールサーバー上は
空っぽになってしまいますので、Excelが取り込もうとしても「取り込むメールがない」となってしまいます。
8件のメールが「toi@simple-sys.com」から届くと思いますが、そのメールを普段お使いのメールを受信するソフト
で受信してしまう前に、このExcelのデモのプログラムで取り込んでください、という意味です。
またわからないことがありましたら、コメント、または toi@simple-sys.comまでメールください。
そうすると、mailtorikomi@simple-sys.comはデモ用で直接Excelに取り込むlものなんですか・・・・。
ん、違うかな・・・・。
>メールサーバーに未受信のメールがない状態
とは、メールサーバーがからっぽの状態と言う意味ですか・・・・。
ん、これも違うかな・・・・。
>このデモ用にフリーメール(Yahooやgoogleなど)で
>新たに別途メールアドレスを作成
すみません、これってやったことがないんですが、簡単に作成できるんですか?
それと、mailtorikomi.xls のRange(“B2″)に入力するpop3サーバーはOutLookExpress (私の場合このメールソフトですが)のpop3サーバーでよろしいんですよね。
又、デモではなく、正式にmailtorikomi.xls を使用する場合はやはり、OutLookExpress の普段使っているメールアドレスをmailtorikomi.xls のRange(“B3″)に入力すると言うことですよね。
ん、勘違いしてるかな・・・・・。
すみません、どうも「デモ」と「普段のメール扱い」とがこんがらがってしまって・・・・・。
最後に、デモが無事成功したものとしましての質問ですが、
>このプログラムでは決まった形式のメールしか受信できませんが、VBAで記載されている内容を修正すれば、
>いろいろな形式でのメールを取り込むことが可能になります。
これは、下記モジュールの ≪注文年月日≫ の部分を自分のメール項目名に書き換えて、この項目数は何個で
も設定可能と言うことでしょうか?
Do
If InStr(mailline(j), “注文年月日:”) = 1 Then
Sheets(“Sheet1″).Cells(dataline, 6).Value = Mid(mailline(j), InStr(mailline(j), “:”) + 1)
・
・
・
・
・
Else
j = j + 1
End If
Loop While j <= endline
以上宜しくご教授のほどお願い申し上げます。
浅井さま
コメントありがとうございます。
>そうすると、mailtorikomi@simple-sys.comはデモ用で直接Excelに取り込むlものなんですか・・・・。
mailtorikomi@simple-sys.comへ空メールを送っていただくと、こちらから、
「サンプル登録用フォームURL」というタイトルのメールをお送りします。
このメールに記載されたURLへアクセスすると、フォームと「ダミー8件送信」というボタンの
画面が出たかと思います。このダミーのサンプルメールを送るためのアドレスが
mailtorikomi@simple-sys.comとなります。
>>メールサーバーに未受信のメールがない状態
>とは、メールサーバーがからっぽの状態と言う意味ですか・・・・。
はい。メールサーバーがからっぽの状態という意味になります。
>>このデモ用にフリーメール(Yahooやgoogleなど)で
>>新たに別途メールアドレスを作成
>
>すみません、これってやったことがないんですが、簡単に作成できるんですか?
簡単かどうかはやってみていただかないと分かりませんが、Yahooだとトップページ
http://www.yahoo.co.jp/
の右のほうに「メールアドレス取得」というリンクがあります。そこから手順に従って
やっていって見てください。
なお、Yahooの場合、メールアドレスを取得した後、POP3で受信できるように
設定する必要があります。この手順は少し難しいかもしれません。
フリーメールを取得するのが難しければ、今お使いのプロバイダーのメールアドレスでも
お試しいただけます。
ただ、普段お使いのメールアドレスには、いろいろなメールが届くと思います。
このデモを動かしている最中にもメールが届く可能性がありますので、
もし万が一、プログラムや設定に不具合があり、本来OutLookExpressで受信すべき
メールを間違ってこのプログラムで受信してしまったり、削除してしまう可能性が
ないとはいえません。それを避けるため、テストされる際はできるだけ、
普段お使いのメールアドレス以外でお願いしています。
>それと、mailtorikomi.xls のRange(“B2″)に入力するpop3サーバーはOutLookExpress (私の場合このメールソフトですが)のpop3サーバーでよろしいんですよね。
フリーメールを使用される場合は、フリーメール用のpop3サーバーになります。
今お使いのプロバイダーのメールアドレスをご利用いただく場合は、
OutLookExpressで設定されているpop3サーバーになります。
>又、デモではなく、正式にmailtorikomi.xls を使用する場合はやはり、OutLookExpress の
>普段使っているメールアドレスをmailtorikomi.xls のRange(“B3″)に入力すると言うことですよね。
そういう事になります。B2~B4に現在お使いのメールサーバーの設定をする形になります。
>最後に、デモが無事成功したものとしましての質問ですが、
>>このプログラムでは決まった形式のメールしか受信できませんが、VBAで記載されている内容を修正すれば、
>>いろいろな形式でのメールを取り込むことが可能になります。
>これは、下記モジュールの ≪注文年月日≫ の部分を自分のメール項目名に書き換えて、
>この項目数は何個でも設定可能と言うことでしょうか?
いえ、このモジュールのプログラムはあくまで、このサンプルメールの形式のメールを取り込む
為のプログラムになります。
浅井さんがご利用のメールがどのような形式かわかりませんが、
「注文年月日」の部分だけを書き換えても、おそらく取り込むことはできないと思います。
浅井さんがご利用のメールの形式に合わせて、
Do
・
・
Loop While j<=endline
の間のプログラムの全体を書き換える必要があると思います。
そのプログラムを浅井さんが取り込みたいメールの形式に書き換えれば、項目は
何個あっても取り込みは可能だと思います。
またわからないことがありましたら、コメント、または toi@simple-sys.comまでメールください。
>浅井さんがご利用のメールの形式に合わせて、
>Do
>・
>・
>Loop While j<=endline
Do~Looop間だけでよろしいですか、
If InStr(result(0), "Subject: 楽○注文")
↑
あとここも勿論換えなくてはいけませんよね
私のメール形式は下記のようになっています。
【受付日時】2011/04/09 09:26.32
↑
項目はこのようなものなのですが、全部で40項目あります。
そうしますと、下記のような感じになるかと思いますが
Do
If InStr(mailline(j), "【受付日時】") = 1 Then
Sheets("Sheet1").Cells(dataline, 6).Value = Mid(mailline(j), InStr(mailline(j), ":") + 1)
j = j + 1 ↑
この部分 はどのようにすればいいのでしょうか?
宜しくご教授お願いいたします。
浅井さま
コメントありがとうございます。
>Do~Looop間だけでよろしいですか、
>If InStr(result(0), “Subject: 楽○注文”)
> ↑
>あとここも勿論換えなくてはいけませんよね
そうですね、そこも変えないといけません。
その他、メールの形式などによっては、
Do~Loop間以外の部分も変えなければならないかもしれません。
>【受付日時】2011/04/09 09:26.32
> ↑
>項目はこのようなものなのですが、全部で40項目あります。
>
>そうしますと、下記のような感じになるかと思いますが
>
>Do
>If InStr(mailline(j), “【受付日時】”) = 1 Then
>Sheets(“Sheet1″).Cells(dataline, 6).Value = Mid(mailline(j), InStr(mailline(j), “:”) + 1)
>j = j + 1 ↑
> この部分
>はどのようにすればいいのでしょうか?
まず、元々の
—
If InStr(mailline(j), “注文年月日:”) = 1 Then
Sheets(“Sheet1″).Cells(dataline, 6).Value = Mid(mailline(j), InStr(mailline(j), “:”) + 1)
—
のVBAの中身はご理解いただいていますか?
メール本文の行の先頭が「注文年月日:」から始まっている場合、
その行の最初の「:」の次の文字以降を抜き出し、その値をセルに代入する、
という意味になります。
>【受付日時】2011/04/09 09:26.32
という文字列が行の先頭にある場合、「】」の次の文字以降を抜き出すとしたら、
抜き出す部分は
Mid(mailline(j), InStr(mailline(j), “】”) + 1)
になるかと思います。
以上、お試しください。
有り難うございました。
取りあえずSubject部分
If InStr(result(0), “Subject: 楽○注文”)
と項目部分の
If InStr(mailline(j), “【受付日時】”) = 1 Then
Mid(mailline(j), InStr(mailline(j), “】”) + 1)
の部分を40項目全てに反映させて試してみたいと思います。
不具合がありましたら、また相談に載っていただき、ご教授下さいますようお願い申し上げます。
すみません、早速またひとつお聞きしなくてはならないことが出来ました。
If InStr(result(0), “Subject: 楽○注文”) = 1 Then
このSubject部分なのですが、私のメール形式の場合
If InStr(result(0), “Subject [〇〇〇〇] の依頼がありました。【54784】”) = 1 Then
となるのですが
この 【54784】 の部分の数字が1メール事に変化してしまうのですが、
どう対処したらよろしいでしょうか、この番号はオーダーナンバーで出来ればそのまま
とりこみたいのですが・・・・・・。
よろしくお願い申し上げます。
浅井様
コメントありがとうございます。
今回のデモのプログラムではメールの件名が固定であることを前提で作成されています。
また、VBAの内容について、個別のメールの仕様に合わせた改造はご自身でお願いいたします。
これ以上のサポートをご希望の場合、有償にて対応させていただきますので、
お手数ですが、toi@simple-sys.com、米本宛にメールにてお問い合わせいただけますでしょうか?
なお、ご希望である
・メールの件名が固定ではなく
・さらに、その件名の一部分の情報を抜き出し、セルに反映させる
ことはメールの形式にもよりますが、おそらく可能だとは思われます。
以上、よろしくお願いいたします。
申し訳ありませんでした。
>VBAの内容について、個別のメールの仕様に合わせた改造はご自身でお願いいたします。
分かりました、何とか自分で改造したいと思います。
最後にあと一つだけ、suggestion をいただけたらと・・・・・・・。
個別のメールの仕様に合わせた改造を出来たとしまして、これを試す方法なのですが、
メール文のファイル(.eml)はたくさんあるのですが、このファイルのフォルダにmailtorikomi.xls から
どのようにアクセスたらよいか(メール取り込みボタンをクリックで取り込めるように)と言うことなんですが・・・・・。
もしちょっと複雑でシェアーになるようでしたら、料金を教えていただけませんでしょうか?会社に稟議してみようと
思います。
宜しくお願いいたします。
浅井様
コメントありがとうございます。
>個別のメールの仕様に合わせた改造を出来たとしまして、これを試す方法なのですが、
>メール文のファイル(.eml)はたくさんあるのですが、このファイルのフォルダにmailtorikomi.xls から
>どのようにアクセスたらよいか(メール取り込みボタンをクリックで取り込めるように)と言うことなんですが・・・・・。
この.emlで保存されているメールはおそらくすでに受信済みのメールとなりますよね?
mailtorikomi.xlsは、「メールサーバー上にあるメールを直接受信してexcelに取り込む」サンプルですので
すでに受信済みのメールを取り込むことは想定して作っておりません。
ですので、メールを受信する部分の記述がおそらく全く必要なくなり、代わって、保存されている.emlファイルを
読み込んでいくような仕組みに変えなければならないかと思います。
>もしちょっと複雑でシェアーになるようでしたら、料金を教えていただけませんでしょうか?
>会社に稟議してみようと思います。
浅井様の環境や取り込みたいメールの内容、状態などを把握していませんので、現状では
料金を算出することができません。
お手数ですが、以降、toi@simple-sys.com、米本宛にメールにてお問い合わせいただけますでしょうか?
具体的に、どのようなメールの文章を取り込みたいのかや、取り込んだ結果、どのようなxlsファイル
をお作りになりたいのかのサンプル、使用しているOSやExcelの環境などをお送りいただければ、
その後詳細を確認させていただいたうえ、お見積りができるかと思います。
以上、よろしくお願いいたします。