Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


41816 / 76735 ←次へ | 前へ→

【39996】Re:VBAでメールの受信
回答  かみちゃん E-MAIL  - 06/7/5(水) 7:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>メールサーバにメールを読みにいって、そのメールをエクセルに落としたい

[#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

このコードだけでは、たぶん、本当にしたいことはできないかもしれませんが、
何かわからないことがあれば、聞いてください。
0 hits

【39994】VBAでメールの受信 lime 06/7/5(水) 3:38 質問
【39995】補足 lime 06/7/5(水) 4:00 発言
【39996】Re:VBAでメールの受信 かみちゃん 06/7/5(水) 7:25 回答
【40232】Re:VBAでメールの受信 lime 06/7/10(月) 1:13 発言
【40303】Re:VBAでメールの受信 かみちゃん 06/7/11(火) 0:54 発言
【40450】Re:VBAでメールの受信 lime 06/7/13(木) 23:34 お礼

41816 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free