none
VB6でのメール送信プログラム RRS feed

  • 質問

  • はじめて質問します。

    Windows Xp SP3 + VB6 SP6 で、OEのメール機能を利用したプログラムを作成しました。

    使用するPCの老朽化で Win7 Sp1 のマシンにしたのですが、OEの代わりに VB6 SP6 から

    Win7 の メーラーを利用する方法がよく解りません。

    ご経験のある方がおられましたら、ご教授下さい。

     

    プログラムは、送信のダイアログに MAPISession と MAPIEssages との2つのコントロール

    を貼り付けて使用していました。

     

     

    2011年6月29日 7:11

回答

  • 経験はありませんが、以下のページの一番下に書いてある、
    Windows Live Mail as of Sept 09, does not support MAPISendmail
    が参考になるかもしれません。

    MAPISendMail Function
    http://msdn.microsoft.com/en-us/library/dd296721(v=vs.85).aspx

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年6月29日 12:29
    モデレータ
  • Windows 7にデフォルトのMail Clientはないはずですが、Windows Live Mailのことをおっしゃっているのでしたらtrapemiyaさんの回答がドンピシャそうですね。
    MAPIのためだけにThunderbirdを入れるのもなんですが、試してみてはいかがでしょうか。

    ところで、私の環境にはOutlook 2010が入っているため、送信が可能でした。
    #ただ、許可を求めるダイアログボックスは出ましたが^^;

    Call Me.MAPISession1.SignON
    Me.MAPISession1.DownloadMail = False
    Me.MAPIMessages1.SessionID = Me.MAPISession1.SessionID
    Me.MAPIMessages1.Compose
    Me.MAPIMessages1.RecipDisplayName = "test"
    Me.MAPIMessages1.RecipAddress = "SMTP:foobar@hogehoge"
    Me.MAPIMessages1.MsgSubject = "題名:それは題名"
    Me.MAPIMessages1.MsgNoteText = "本文:これは本文"
    Me.MAPIMessages1.Send (False)
    Call Me.MAPISession1.signoff
    
    

     

    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年7月4日 10:32
  • 補足すると、MAPIで使用されるメールソフトは、コントロールパネルのメール(Windows 7だと「コントロールパネル」-「ユーザー アカウントと家族のための安全設定」-「メール」)に登録されているアプリケーションです。

    Windows XPの場合、Outlook Expressが登録されているでしょうし、OfficeをインストールするとOutlookが登録されます。

    しかし、Windows Live メールの場合、ここには登録されず、MAPIを使うことはできません。

    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年7月4日 13:52
  • それが回避できたらspam送信プログラムが簡単に作成でき、spam業者が大喜びですよね?
    • 回答としてマーク Abikuzi 2011年10月24日 4:16
    2011年10月10日 14:24

すべての返信

  • 経験はありませんが、以下のページの一番下に書いてある、
    Windows Live Mail as of Sept 09, does not support MAPISendmail
    が参考になるかもしれません。

    MAPISendMail Function
    http://msdn.microsoft.com/en-us/library/dd296721(v=vs.85).aspx

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年6月29日 12:29
    モデレータ
  • Windows 7にデフォルトのMail Clientはないはずですが、Windows Live Mailのことをおっしゃっているのでしたらtrapemiyaさんの回答がドンピシャそうですね。
    MAPIのためだけにThunderbirdを入れるのもなんですが、試してみてはいかがでしょうか。

    ところで、私の環境にはOutlook 2010が入っているため、送信が可能でした。
    #ただ、許可を求めるダイアログボックスは出ましたが^^;

    Call Me.MAPISession1.SignON
    Me.MAPISession1.DownloadMail = False
    Me.MAPIMessages1.SessionID = Me.MAPISession1.SessionID
    Me.MAPIMessages1.Compose
    Me.MAPIMessages1.RecipDisplayName = "test"
    Me.MAPIMessages1.RecipAddress = "SMTP:foobar@hogehoge"
    Me.MAPIMessages1.MsgSubject = "題名:それは題名"
    Me.MAPIMessages1.MsgNoteText = "本文:これは本文"
    Me.MAPIMessages1.Send (False)
    Call Me.MAPISession1.signoff
    
    

     

    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年7月4日 10:32
  • 補足すると、MAPIで使用されるメールソフトは、コントロールパネルのメール(Windows 7だと「コントロールパネル」-「ユーザー アカウントと家族のための安全設定」-「メール」)に登録されているアプリケーションです。

    Windows XPの場合、Outlook Expressが登録されているでしょうし、OfficeをインストールするとOutlookが登録されます。

    しかし、Windows Live メールの場合、ここには登録されず、MAPIを使うことはできません。

    • 回答としてマーク 山本春海 2011年7月14日 7:30
    2011年7月4日 13:52
  • こんにちは、Abikuzi さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    その後いかがでしょうか。みなさんからの情報は確認されましたか?

    みなさんから有効な情報をいただいているかと思われましたので、他の方にも有効利用いただくために勝手ながら私のほうで回答としてマークをつけさせていただきました。
    情報くださったみなさん、ありがとうございます。

    Abikuzi さん、もし意図されていることと違っていたり、不明点などあるようであれば、その内容を投稿されると有効な情報を得られるかもしれません。
    今後とも、MSDN フォーラムをよろしくお願いいたします。
                                                       
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年7月14日 7:30
  • ご回答頂いた、trapemiya様, Chuki様, 佐祐理様, ならびにモデレータの山本様、ありがとうございます。

    遅くなりましたが、各ご回答にお礼申し上げます。早速にでも手を着けたいのですが、結果をご報告できるのは秋口以降になりそうです。質問を出していおながら、ご回答頂いた方々に恐縮です。

     

    今後も宜しくご指導下さい。

     

    Azikubi

    2011年8月25日 3:00
  • デモデレータの山本様、trapemiya様、Chuki様、佐祐理様、大変遅い作業となってしまいましたが、下記のような小型プログラムを書き、添付書類付きでメール送信できることが解りました。

    大変ありがとうございました。

    しかしながら、後半に記述しているような新たな問題が判明しました。ご教授願えれば幸いです。

     

    ----------------------------------------------------------------------------------------------------------

    Private Sub Command1_Click()

        Dim MailUser(4) As String

     

        MailUser(0) = "SMTP:aaa@center.jsb-imsbb.jp"

        MailUser(1) = "SMTP:arikuni@center.jsb-imsbb.jp"

        MailUser(2) = "SMTP:center@center.jsb-imsbb.jp"

        MailUser(3) = "SMTP:debug@center.jsb-imsbb.jp"

     

        Call Me.MAPISession1.SignOn

        Me.MAPISession1.DownLoadMail = False

        Me.MAPIMessages1.SessionID = Me.MAPISession1.SessionID

        Me.MAPIMessages1.Compose

        Me.MAPIMessages1.RecipDisplayName = "Mail"

        Me.MAPIMessages1.RecipAddress = MailUser(0)

    '   Me.MAPIMessages1.RecipAddress = MailUser(0)+MailUser(1)+MailUser(2)+MailUser(3)

        Me.MAPIMessages1.MsgSubject = ""                        ' 題名

        Me.MAPIMessages1.MsgNoteText = "0"                      ' 本文

    '   For i = 0 To 3 Step 1

    '       Me.MAPIMessages1.RecipAddress = MailUser(i)

    '       Me.MAPIMessages1.Send (False)

    '   Next i

        Me.MAPIMessages1.AttachmentPathName = \

    "C:\IMS_SYSTEM\IMS-Data\SendMail\20110506183606.bmp"

        Me.MAPIMessages1.AttachmentName = "20110506183606.bmp"

        Me.MAPIMessages1.Send (False)

        Call Me.MAPISession1.SignOff

    End Sub

    ----------------------------------------------------------------------------------------------------------

    使用したOutlookはOutlook 2007で、マシン購入時に同時購入したOfficeに付属していたものです。
    「'」にてコメントアウトした部分は、Chuki様ご指摘の「許可を求めるダイアログボックス」を一斉メール
    で避けようと試みたものです。

    Me.MAPIMessages1.RecipAddressの指定には最初のコメント部分の「やぶれかぶれ版」以外に

    "SMTP:aaa@center.jsb-imsbb.jp:arikuni@center.jsb-imsbb.jp:..."

    "SMTP:aaa@center.jsb-imsbb.jp SMTP:arikuni@center.jsb-imsbb.jp:..."

    "SMTP:aaa@center.jsb-imsbb.jp arikuni@center.jsb-imsbb.jp:..."

    "SMTP:aaa@center.jsb-imsbb.jp, arikuni@center.jsb-imsbb.jp:..."

    等のデリミタを試みましたが、どれも不可でした。
    このシステムは、マンション内の各居室内の弊社機器に添付のビットマップファイルのメールを出すもので、
    100室のマンションでは100回の「許可」作業が必要になり実用的では有りません。
    「許可」操作を避けるスイッチがOutlook 2007のどこかにあるかと調べましたが見つけられませんでした。
    RecipAddressの一斉メール送信の正しい記述フォーマットを調べなくてはならないことは解るのですが、
    2011/10/10時点では、発見できていません。
    ご存知の方は、ご教授頂ければありがたいです。
    宜しくお願い致します。

    2011年10月10日 7:32
  • それが回避できたらspam送信プログラムが簡単に作成でき、spam業者が大喜びですよね?
    • 回答としてマーク Abikuzi 2011年10月24日 4:16
    2011年10月10日 14:24
  • VB6であれば有名どころとしてBASP21がありますが、ご存じでないかもしれないと思い、一応ご紹介しておきます。

    BASP21 に脆弱性
    http://mythic.blog99.fc2.com/blog-entry-2.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年10月11日 0:53
    モデレータ
  • trapemiyaさんが紹介されているBASP21を使うとか、てっとり早くCDOなどでインターネットプロバイダのSMTPを叩いた方が速いかと……

    「Hey, Scripting Guy!CDO を使用して送信メールにファイルを添付するにはどうすればよいでしょうか。」
     http://gallery.technet.microsoft.com/scriptcenter/e7dfcfb7-1f64-48ca-8d16-107091be99cc/

     

    2011年10月11日 8:40
  • 佐祐里様、trapemiya様、Chuki様、ありがとうございます。お礼が遅れて申し訳有りません。

    メール送信での許可確認は、昨今のスパム対策なので、オペレータの方にご無理をお願いすることと致します。

    長期間に渡り、ご指導頂きありがとうございました。

    本件は、これでクローズさせて頂きます。

     

    Azikubi

     

    2011年10月24日 4:17
  • メール送信での許可確認は、昨今のスパム対策なので、オペレータの方にご無理をお願いすることと致します。

    運用コスト < (違う方法でメール送信するように改造する)開発コスト と判断されたと言うことなのかなぁ。
    頻繁にこの操作を 100 回も繰り返すとなると、オペレーターの方からのクレームがひどいことになると思ったのですが…。

    よっぽど頻度が低くない限り、メール送信部を作り直すのが妥当な道だと思っていましたが、そうならない現場もあるということでしょうか。ちょっと心配です。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年10月24日 13:18
    モデレータ