Excel VBA質問箱 IV

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

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


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

【42115】メール受信 ike-kin 06/9/1(金) 15:00 質問[未読]
【42161】Re:メール受信 Kein 06/9/3(日) 9:51 発言[未読]
【42172】Re:メール受信 inoue 06/9/3(日) 19:37 発言[未読]
【42175】Re:メール受信 りん 06/9/3(日) 19:59 発言[未読]
【42183】Re:メール受信 inoue 06/9/3(日) 22:11 回答[未読]
【42197】Re:メール受信 ike-kin 06/9/4(月) 7:12 質問[未読]
【42205】Re:メール受信 ike-kin 06/9/4(月) 11:14 質問[未読]
【42206】Re:メール受信 かみちゃん 06/9/4(月) 11:32 発言[未読]
【42214】Re:メール受信 inoue 06/9/4(月) 12:43 発言[未読]
【42233】Re:メール受信 ike-kin 06/9/4(月) 17:49 お礼[未読]

【42115】メール受信
質問  ike-kin  - 06/9/1(金) 15:00 -

引用なし
パスワード
   質問させていただきます。

エクセル2003を使って、売上日報を作成。
売上日報のシートにボタンを付けて、メールで
金額1
金額2
金額3
合計金額
を、A氏・B氏・C氏に送信するものを作成しています。

CDOで作成しましたがPOP befor SMTPでエラーになってしまいます。
メールソフトはそのWin2000サーバでは使用できません。

CDOで受信ってできないのですか?
BSMTP.DLLで送受信と言う手がありそうですが具体的にどうすればよいのか困っています。

どなたか教えていただけないでしょうか?

【42161】Re:メール受信
発言  Kein  - 06/9/3(日) 9:51 -

引用なし
パスワード
   DLLのみでなく、それを実装してさらにいろいろと便利に使えるようにした
コンポーネント「BASP21」を入れて作成されたら良いでしょう。
ダウンロードと解説があるサイトは↓です。
http://www.hi-ho.ne.jp/babaq/basp21.html
メール受信については、そのサイトの RcvMailメソッド の解説を参考にして下さい。

【42172】Re:メール受信
発言  inoue E-MAILWEB  - 06/9/3(日) 19:37 -

引用なし
パスワード
   質問がよく分かりません。

>を、A氏・B氏・C氏に送信するものを作成しています。
>CDOで作成しましたがPOP befor SMTPでエラーになってしまいます。
これは送信に関する問題ですね。

>CDOで受信ってできないのですか?
>BSMTP.DLLで送受信と言う手がありそうですが具体的にどうすればよいのか困っています。
なんで受信に変わってしまうのですか。

【42175】Re:メール受信
発言  りん E-MAIL  - 06/9/3(日) 19:59 -

引用なし
パスワード
   inoue さん、こんばんわ。

こっちがメインのツリーになってしまっていますが。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=42131;id=excel

>なんで受信に変わってしまうのですか。

>>CDOで作成しましたがPOP befor SMTPでエラーになってしまいます。
下線部のとおりです。
マクロのメインは送信ですが、問題点は受信の様です。

【42183】Re:メール受信
回答  inoue E-MAILWEB  - 06/9/3(日) 22:11 -

引用なし
パスワード
   >>>CDOで作成しましたがPOP befor SMTPでエラーになってしまいます。
>下線部のとおりです。
>マクロのメインは送信ですが、問題点は受信の様です。
一般のメール送信サーバでは、送信時には認証は行ないませんから
CDOでもBASP21でも、これらの参考コードには「ユーザーID」や「パスワード」は
出てきません。
ですが、スパムメール対策などで送信時にも認証を行なうメールサーバが
出てきており、これを使ってメール送信を行なうのならば、
送信時にも「ユーザーID」「パスワード」を指定して認証を行なわないと
送信もできないということです。

「POP befor SMTP」というのは送信の直前に受信を行なって認証を通す
というようなことのようですが、
VBAでの受信と送信は同一セッションと見なされるのかとかが不明です。
また、送信前に受信を行なう必要があるので、
VBA側で受信を行なって良いのかということも疑問です。

回答者でそのような環境を使って実現させている人がいないと
回答は明言できないと思います。
ただ、これが実現可能だとしてもCDOではメール受信はできないので
BASP21を使用することになると思います。

単に送信認証を行なえるメールサーバであればCDOでも、
'--------------------------------------------------------
.Item(cdoSMTPAuthenticate) = cdoBasic
.Item(cdoSendUserName) = "HOGE"    ' ユーザーID
.Item(cdoSendPassword) = "HOGE"    ' パスワード
'--------------------------------------------------------
のようなコードを追加して認証を行なうことができるかも知れません。

【42197】Re:メール受信
質問  ike-kin  - 06/9/4(月) 7:12 -

引用なし
パスワード
   皆様いろいろありがとうございます。

サーバーへアドミン権限の私のIDでログインしてBsmtp.dllのみいれようとしたらregsvr32実行時にエラーになりました。

なので、AdministratorでログインしてBASP21をインストールしてみようと思っています。

.Item(cdoSMTPAuthenticate) = cdoBasic
.Item(cdoSendUserName) = "HOGE"    ' ユーザーID
.Item(cdoSendPassword) = "HOGE"    ' パスワード
ですが、サーバーの会社に確認したら受信で認証解除15分間だそうです。
やっぱり受信してから送信しないとだめみたいです。
重複しますがメーラーの使用はサーバーの管理者から要望でNGなのです。

どうやら、BASP21が頼みの綱みたいです。

また、実行してみたら報告いたします。
引き続き宜しくお願いいたします。

【42205】Re:メール受信
質問  ike-kin  - 06/9/4(月) 11:14 -

引用なし
パスワード
   その後の報告です。

サーバーにAdministratorでログインしてBASP21をインストールしました。
インストールは正常に終了しました。
その後受信も正常終了。
ですが、送信でパスワードエラーになります。

送信のコードは

Sub MailSend()
  Dim sts As Integer
  sts = MsgBox("メール送信してもいいですか?", vbOKCancel)
  If sts = vbCancel Then
    Exit Sub
  End If
  If Worksheets("設定").Cells(2, 2) = "" Then
    MsgBox "SMTPサーバが設定されていません" + vbCrLf + "処理を終了します"
    Exit Sub
  End If
  If Worksheets("設定").Cells(5, 2) = "" Then
    MsgBox "送信元メールアドレスが設定されていません" + vbCrLf + "処理を終了します"
    Exit Sub
  End If
  If Worksheets("設定").Cells(8, 1) = "" Then
    MsgBox "題名(Subject)が設定されていません" + vbCrLf + "処理を終了します"
    Exit Sub
  End If
  If Worksheets("設定").Cells(10, 1) = "" Then
    MsgBox "メール内容(Body)が設定されていません" + vbCrLf + "処理を終了します"
    Exit Sub
  End If
  
  Dim ret As String
  Dim szServer As String, szTo As String, szFrom As String
  Dim szSubject As String, szBody As String, szFile As String

  szServer = Worksheets("設定").Cells(2, 2)  ' SMTPサーバ名。
               'タブで区切ってポート番号を指定できます。
  szFrom = Worksheets("設定").Cells(5, 2)   ' 送信元

  Dim i As Long
  i = 3
  Do While Worksheets("設定").Cells(i, 6) <> ""
    DoEvents

    szTo = Worksheets("設定").Cells(i, 6)   ' 宛先
    ' 複数の宛先に送付するときは、アドレスをタブで区切って
    ' いくらでも指定できます。
    szSubject = Worksheets("設定").Cells(8, 1)   ' 件名
    szBody = Worksheets("設定").Cells(10, 1)
    szFile = ""  ' ファイル添付なし

'文字列変換
    Dim stradd As Integer
    Do While InStr(szBody, "%name%") <> 0
      DoEvents
      stradd = InStr(szBody, "%name%")
      szBody = Mid(szBody, 1, stradd - 1) + Worksheets("設定").Cells(i, 5) + Mid(szBody, stradd + 6, Len(szBody) - stradd - 5)
    Loop
'    Debug.Print szServer, szTo, szFrom, szSubject, szBody, szFile
    ret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile)
  
    ' 送信エラーのときは、戻り値にエラーメッセージが返ります。
    If Len(ret) <> 0 Then
      MsgBox "エラー" & ret
    End If
    i = i + 1
  Loop
  MsgBox "送信終了" + vbCrLf + CStr(i - 3) + "通送りました"
End Sub

です。デバックではパスワードは正常にはいっています。
エラーメッセージは
エラー550 5.7.1 aaa@bbb.com Relaying denied to aaa@bbb.com
というものです。
何ででしょう?どなたか心当たりはないでしょうか?

【42206】Re:メール受信
発言  かみちゃん  - 06/9/4(月) 11:32 -

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

>エラーメッセージは
>エラー550 5.7.1 aaa@bbb.com Relaying denied to aaa@bbb.com
>というものです。
>何ででしょう?どなたか心当たりはないでしょうか?

ネットワークは、あまり詳しくないのですが、以下のようなものが参考になりませんか?
http://www.stackasterisk.jp/tech/engineer/practiceNetwork05_03.jsp

なお、私も、Web検索した結果ですので、内容はわかりません。
ご自身でも検索してみることをおすすめします。

また、別のスレッドや、他の掲示板で解決ができた場合には、それぞれのスレッド
で解決結果を教えていただければ、ありがたいです。

【42214】Re:メール受信
発言  inoue E-MAILWEB  - 06/9/4(月) 12:43 -

引用なし
パスワード
   >デバックではパスワードは正常にはいっています。
コードの記述上ではパスワードを入れている形跡がありませんが、
何をデバックして正常だと確認したのですか?

【42233】Re:メール受信
お礼  ike-kin  - 06/9/4(月) 17:49 -

引用なし
パスワード
   ▼inoue さん:

ike-kinです。

>>デバックではパスワードは正常にはいっています。
>コードの記述上ではパスワードを入れている形跡がありませんが、
>何をデバックして正常だと確認したのですか?

おせわになっております。送信のときはパスワード必要なかったので受信のときのデバッグをこちらに書いてしまいました。
紛らわしくてゴメンナサイ。

それから、皆様ありがとうございました。
実は私のアカウントの記述に誤りがありまして、そこを修正したら正常に動作しました。
本当にありがとうございました。

結局受信は以下のコードでOK
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=42215;id=excel
送信は以下のコードでOK
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=42205;id=excel
そして BASP21はAdminでインストール

で、解決しました。
本当にありがとうございました。

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