Excel VBA質問箱 IV

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

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


7226 / 13644 ツリー ←次へ | 前へ→

【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 お礼[未読]

【39994】VBAでメールの受信
質問  lime  - 06/7/5(水) 3:38 -

引用なし
パスワード
   メールサーバにメールを読みにいって、そのメールをエクセルに落としたいと
無謀なことを考えて検索してみました(勝手にコピペしてかみちゃんさん、ごめんなさい)
以下検索の引用
**************************************************************************
20447】Re:メールの内容をエクセルの表にしたいのですが 
 
  かみちゃん  - 04/12/9(木) 12:40 - 

  こんにちは。かみちゃん です。

>この状態でも、もし何か方法があるようでしたら

SMTPサーバー名があらかじめわかっていることが前提ですが、BSMTP.DLLが使えると思います。
次のURLにExcelのサンプルがあります。ただし送信部分だけですが。
http://www.hi-ho.ne.jp/babaq/vbtips.html

もちろん、受信することもでき、あとは、本文を解析すればいいかと思うのですが、この本文解析が一番大変かもしれません。

私も会社で同じようなことをしていますので、もし、わからないことがあれば、質問してください
**************************************************************************
(引用ここまで)
↑この、受信方法?(リンクの本文を読んだのですが、受信はあったのですが
それをエクセルに反映させる方法とか(これが解析??)よく分かりません)

メールを送るのは色々と(「EXCELでお仕事」のHPとか)でているのですが
いまだ、メールを読んでエクセルに反映させたり、FTPに読みにいってデータを
引っ張ってくるとかのHPを見つけることができません。

その情報が載っているHPか、VBAの方法を教えてください
ぶしつけな質問でごめんなさい

【39995】補足
発言  lime  - 06/7/5(水) 4:00 -

引用なし
パスワード
   簡単なHPを作り、そこにメルアドとか名前とか、色々なことを書き込んでもらう
欄を作りました
それをSendMailで送るCGIをお友達が作ってくれて、自分のところにメールが来るように
なったのですが、それをエクセルで整理しようとしたら、IEが暗号化(?)っていうか
1つのファイルになっちゃってて(IEって、メールごとにTEXTファイルだと思ってた・・・)

それで、IEがイケズするなら、エクセルで直接読みにいけばいいかな?っと
ど素人の恐ろしい発想で検索してみたんです

メールは「,」切りのJISで送られてきてるそうです(CGIをつくった子によると)

XPHomeエディション EXCEL2003 です

【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

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

【40232】Re:VBAでメールの受信
発言  lime  - 06/7/10(月) 1:13 -

引用なし
パスワード
   お礼が遅くなってごめんなさい(お仕事の都合上、金土はなかなかINできなくて・・・)

新しくメルアド作って、(test@xxxxみたいな?)挑戦しています

 szServer = "your pop3 server" 'SMTPサーバ名と同じでよい。
                'タブで区切ってポート番号を指定できます。
 szUser = "your-name" 'メールアカウント名
 szPass = "pass"    'パスワード

↑SMTPサバとpop3サバと同じでよい、ってありますが
受信でもSMTPでいいのですか?(やってみれば分かることだろうけど、怖くて・・・)
 
   "A xxxx" : サーバがAPOP 未対応ならエラーになります。
 szCommand = "SAVE 1-3" 'コマンド メールの1件目から3件目までを受信

これは、メルを3つだけ読み込むということですか?
すべてとかじゃなくて?
全部読むとかって設定あるのかしら?
"SAVE1-100"とかして、1つもなきゃエラでるのかなあ・・・(これもやってみれば
回答でそうだけど・・・)

【40303】Re:VBAでメールの受信
発言  かみちゃん  - 06/7/11(火) 0:54 -

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

>↑SMTPサバとpop3サバと同じでよい、ってありますが
>受信でもSMTPでいいのですか?(やってみれば分かることだろうけど、怖くて・・・)

私のところでは、大丈夫のようです。

> szCommand = "SAVE 1-3" 'コマンド メールの1件目から3件目までを受信
>↑
>これは、メルを3つだけ読み込むということですか?

そうです。

>すべてとかじゃなくて?
>全部読むとかって設定あるのかしら?
>"SAVE1-100"とかして、1つもなきゃエラでるのかなあ・・・(これもやってみれば
>回答でそうだけど・・・)

[#20447]で紹介しているリンク先に説明があります。
----以下引用です
コマンドは、次のように指定します。
 STAT ...... メールボックスに到着しているメール数と総バイト数のみを返します
 LIST [n[-n2]] ...... メールのSubject、From、Dateヘッダーの内容のみを
       返します。範囲も指定できます。
 SAVE n[-n2] .... n番目のメールを受信します。範囲も指定できます。
 SAVD n[-n2] .... n番目のメールを受信し、サーバのメールボックスから
       削除します。範囲も指定できます。
 SAVEALL ... 全てのメールを受信します
 SAVEALLD .. 全てのメールを受信し、サーバのメールボックスから
       削除します
 DELE n[-n2] .... n番目のメールをメールボックスから削除します。
       範囲も指定できます。
-----

【40450】Re:VBAでメールの受信
お礼  lime  - 06/7/13(木) 23:34 -

引用なし
パスワード
   こんばんは、かみちゃんさん

試行錯誤しましたが、ついに出来ました!
本当にありがとうございました
(アクションボタンとかつけて、その辺りのエラ〜で苦しみました)
(めちゃいらんことしい!だと反省しました・・・)

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