|
こんにちは。かみちゃん です。
>メールサーバにメールを読みにいって、そのメールをエクセルに落としたい
[#20447]の私の発言を参考にしていただきありがとうございます。
私もメールデータをExcelに取り込むことをしていますが、概ね以下のような
感じでできると思います。
(BSMTP.DLLを使用していますので、BSMTP.DLLをインストールしてあることが前提
で、一応、動作確認はしてあります。)
Option Explicit
Private Declare Function RcvMail Lib "bsmtp" _
(szServer As String, szUser As String, szPass As String, _
szCommand As String, szDir As String) As Variant
Private Declare Function ReadMail Lib "bsmtp" _
(szFilename As String, szPara As String, szDir As String) As Variant
Sub Macro1()
'------------------------------------------------------------
'メールを受信する
'------------------------------------------------------------
Dim szServer As String, szUser As String, szPass As String
Dim szCommand As String, szDir As String
Dim ar As Variant, v As Variant
Dim szFilename As String, szPara As String
Dim retv As Variant, v2 As Variant
szServer = "your pop3 server" 'SMTPサーバ名と同じでよい。
'タブで区切ってポート番号を指定できます。
szUser = "your-name" 'メールアカウント名
szPass = "pass" 'パスワード
' 2000/05/20 APOPをサポート
' APOP 認証をするには、パスワードの前に "a" または "A" に 1個の
' ブランクをつけます。
' "a xxxx" : サーバがAPOP 未対応なら通常のUSER/PASS 処理をします。
' "A xxxx" : サーバがAPOP 未対応ならエラーになります。
szCommand = "SAVE 1-3" 'コマンド メールの1件目から3件目までを受信
' szDir = "c:\maildata" '受信したメールを保存するディレクトリ
szDir = ThisWorkbook.Path 'このマクロと同じフォルダに保存する。
ar = RcvMail(szServer, szUser, szPass, szCommand, szDir)
'戻り値が返る変数は、Variantタイプを指定すること。
'受信したメール1通ごとにファイルが作成されます。
'メールに添付されたファイルは、本文と共に1つのファイルに含まれます。
'ReadMail関数で添付ファイルを取出します。
If IsArray(ar) Then '正常終了時のSAVEコマンドの戻り値は、配列になります。
For Each v In ar
' Debug.Print v 'メールデータが保存されたファイル名がフルパスで戻ります。
'このファイル名をReadMailのパラメータとして渡します。
'------------------------------------------------------------
'ReadMail関数を使ってメールの内容を読む
'------------------------------------------------------------
szFilename = v ' ファイル名にはRcvMailの戻り値の配列からファイル名を設定
szPara = "subject:from:date:" ' ヘッダーの指定
' nofile: とすると添付ファイルを保存しません。
retv = ReadMail(szFilename, szPara, szDir)
If IsArray(retv) Then
For Each v2 In retv
' Debug.Print v2
Range("A65536").End(xlUp).Offset(1).Value = v2
Next
Else
' Debug.Print retv
MsgBox "retv=" & retv
End If
Next
Else
' Debug.Print ar 'エラー発生時は、配列でなくメッセージが戻ります。
MsgBox "ar=" & ar 'エラー発生時は、配列でなくメッセージが戻ります。
End If
MsgBox "終了しました"
End Sub
このコードだけでは、たぶん、本当にしたいことはできないかもしれませんが、
何かわからないことがあれば、聞いてください。
|
|