BASP21については、ご自身で調べてくださいな。
メールの受信にはRcvMailメソッドとReadMailメソッドを使います。RcvMailメソッドは、メールボックスにアクセスしてメールを受信します。ReadMailメソッドは、受信したメールを解析してタイトルや送信者・本文などに分解します。
まずメールを受信するRcvMailメソッドからいきましょう。なお、サーバー名やアカウント、パスワードなどはサンプルです。このコードをそのまま実行するとエラーになりますので、ご利用の環境に合わせてサーバー名やアカウント、パスワードなどを適切に設定してください。
Sub Sample() Dim bobj, ar Dim Server As String, User As String, Pass As String, Command As String, Folder As String Set bobj = CreateObject("basp21") ''BASP21オブジェクト Server = "pop.xxxxx.com" ''POP3サーバー User = "toru_tanaka" ''アカウント名 Pass = "password" ''パスワード Command = "SAVEALL" ''コマンド Folder = "<" & ThisWorkbook.Path & "\mail" ''保存するフォルダ ar = bobj.RcvMail(Server, User, Pass, Command, Folder) If IsArray(ar) Then MsgBox "メールを受信しました" Else MsgBox "新着メールはありません" End If Set bobj = Nothing End Sub
RcvMailメソッドの構文は次の通りです。
RcvMail(Server, User, Pass, Command, Folder)
引数ServerにはPOP3サーバー名を指定します。
引数Userにはアカウント名、引数Passにはパスワードを指定します。
引数Commandはメールの受信方法を指定します。指定したメールだけを受信したり、サーバーにあるメールを削除することなどもできます。「SAVEALL」を指定するとサーバーにあるすべてのメールを受信します。
引数Folderには受信したメールを保存するフォルダを指定します。添付ファイルもこのフォルダに保存されます。ここには存在するフォルダ名を指定してください。存在しないフォルダ名を指定しても自動的にフォルダは作成されませんし、エラーも発生しません。
引数Folderのフォルダ名に「<」をつけると、すでに受信済みのメールは受信しなくなります。つまり新着のメールだけを受信するようになります。このへんは細かい設定が可能ですので、詳しくはBASP21のヘルプをご覧ください。
なお上記のサンプルはThisworkbook.Pathフォルダの中に「mailフォルダ」を作り、そこにメールを受信するように指定しています。ブックを一度も保存していない場合はThisworkbook.Pathが空欄を返しますので、マクロを実行するときは保存したブックでお試しください。
さて、フォルダに受信したメールを解析するのはReadMailメソッドです。ReadMailメソッドは引数に指定したメールを解析して送信者やタイトルなどを返します。ReadMailメソッドの構文は次の通りです。
ReadMail(Mail, Para, Folder)
引数Mailには、読み込むメールをフルパスで指定します。
引数Paraには、どのヘッダを読み込むのかを指定します。
引数Folderには、添付ファイルが保存されているパスを指定します。
RcvMailメソッドは、メールを受信すると、保存したメールのフルパスを配列で返します。したがって、RcvMailメソッドの返り値が配列だった場合はメールを受信したことになり、配列でなかった場合は受信していないことになります。
Sub Sample() Dim bobj, ar, Mail, retv Dim Server As String, User As String, Pass As String, Command As String, Folder As String Dim Para As String Set bobj = CreateObject("basp21") ''BASP21オブジェクト Server = "pop.xxxxx.com" ''POP3サーバー User = "toru_tanaka" ''アカウント名 Pass = "password" ''パスワード Command = "SAVEALL" ''コマンド Folder = "<" & ThisWorkbook.Path & "\mail" ''保存するフォルダ ar = bobj.RcvMail(Server, User, Pass, Command, Folder) If IsArray(ar) Then Para = "from:subject:" For Each Mail In ar retv = bobj.ReadMail(Mail, Para, Folder) If Not IsArray(retv) Then MsgBox "メールの受信に失敗しました" Else Range("A65536").End(xlUp).Offset(1, 0) = retv(0) ''From Range("A65536").End(xlUp).Offset(1, 0) = retv(1) ''Subject Range("A65536").End(xlUp).Offset(1, 0) = retv(2) ''Body End If Next Mail Else MsgBox "新着メールはありません" End If Set bobj = Nothing End Sub
引数Paraには「From」と「Subject」を指定しましたので、ReadMailメソッドは、この2つのヘッダ情報と本文(Body)の3つを配列で返します。何らかのエラーでメールを読めなかった場合は配列を返しません。上記サンプルではIsArray関数で判定しています。
受信したメールの「From」「Subject」「Body」は配列retvに格納されていますので、後はそれをどうしようと自由です。上記のサンプルではアクティブシートに書き出しています。なお、それぞれのデータには「From:」などのヘッダ名が先頭に付加されますので留意してください。