「みんな教えて! 選手権!!」開催のお知らせ

WindowsXP Visuai Basic 2005 EE でWindowsアプリケーションを開発し
ています。メールの送信でSMTPの自動送信ではなく一旦OutlookExpressの
「メッセージの作成」を表示させ、ユーザが内容確認のうえ[送信]ボタンを
押させる方法をとりたいと考えています。
出来れば次のことを指定して表示できればと欲張っています。
・宛先アドレス
・送信者アドレス
・件名
・本文
・添付ファイル
以上よろしくご教示下さい。

A 回答 (7件)

1.Visual Basic 6.0 のランタイムのダウンロードは下記のサイトで可能です。


http://www.vector.co.jp/soft/win95/util/se342080 …

2.Msmapi32.ocxをインストールすれば、[参照の追加]-[COM]を選択した時に Microsoft MAPI Controls 6.0 が表示されるはずなので、それを追加してください。
    • good
    • 0
この回答へのお礼

korin_さん、正常に添付してメール送信が出来ました。
ご指導いただきましたとおり、Visual Basic 6.0 のランタイムのダウンロードし、
Msmapi32.ocxをインストールして、VB.Netの「参照の追加」で[COM]タグにありま
したMicrosoft MAPI Controls 参照の追加を行いました。
今度はご指導いただきましたコードをボタンのイベントハンドラに貼りつけても
エラーはなく、ボタンを押すことによって「メッセージの作成」画面が指定した添付
ファイルと共に正常に表示されました。続けて[送信]ボタンを押すと正常に着信
されました。この方法を他の人にも教えることをこの場を借りてお願いいたします。
感動です。感動です。なんとお礼を申し上げてよいのか・・・
少し、このボタンを押して楽しみたいと思います。ありがとうございました。

お礼日時:2008/11/18 14:12

MAPIを参照設定するためのOCXがないのかもしれません。


Msmapi32.ocx は Visual Basic 6.0 のランタイムにありますので、インストールして確認していただけますか?

この回答への補足

korin_さん、早速の回答ありがとうございます。
私はPCやソフトの開発経験が浅く、korin_さんのご指導内容が十分
理解できなく困っています。以下の追加質問をさせてください。

1.Visual Basic 6.0 のランタイムはどのサイトからインストール
すればいいのでしょうか(私はWindows XP PROです)

2.Visual Basic 6.0 のランタイムの中にMsmapi32.ocx があるのだと
理解しましたが、このMsmapi32.ocxをどのようにすれば Microsoft
MAPI Controls の参照設定(追加)が出来るのでしょうか。

もうしばらくお付き合いいただけますよう、よろしくお願いいたします。

補足日時:2008/11/18 12:03
    • good
    • 0

[COM] - Microsoft MAPI Controls です。

この回答への補足

korin_さん、何度もすみません。
COMの中で「M」の付くControls は下のものしかなく、
見つからないのですが,VB.2005 EEだからでしょうか。
Microsoft Management Cosol 2.0
Microsoft Masked Edit Control 6.0
Microsoft MIMEEDIT Type Library
Microsoft Multicast Addres Allocation Clinet COM

私はWindowsアプリケーションを開発して現在ClickOnceによる配布の
テストをしていますが、次のような問題を感じて、SMTPサーバー名を
使った自動メール送信に疑問を感じております。

1.SMTPサーバー名をユーザーに設定させる時「なにかCPの中身を見られる
パスワードを設定させられている」との意見があります。

2.メールで送信する場合は全自動のため添付送信されているファイルをユーザー側
で確認できなく、何を送信させられているか不安であるとの意見もあります。

3.ウイルス対策ソフトのパーソナルファイアウォールに阻止されて送信できない
PCが多くてトラブルになります。

以上のことからどうしても、「メッセージの作成画面」までは自動にして
ユーザーが添付ファイルを確認してから[送信]ボタンを押すようにして
やりたく考えております。
さらに添付するファイルはClickOnceで配布したデータファイルの圧縮
ファイルで保存場所のフルパスは深くてとてもユーザに設定させること
は難しいと思いますので、ぜひ添付ファイルをプログラムで設定しメール送信
できますようMicrosoft MAPI Controls の参照設定方法をご教授下さい。
よろしくお願いいたします。

補足日時:2008/11/18 10:39
    • good
    • 0

こんにちは。


起動するメーラを MS Outlook または Outlook Express に限定しても良いのなら、MAPIを使用する事でお望みの動作が可能と思います。
一応サンプルコードを載せておきます。

------------------------------------------------------------------------
' 参照の追加で MSMAPI を追加する
Try
Dim mapisettion As New MSMAPI.MAPISession
mapisettion.SignOn()

Dim mapimessages As New MSMAPI.MAPIMessages
With mapimessages
.SessionID = mapisettion.SessionID
.Compose()
.RecipType = 1
.RecipDisplayName = "テストさん"
.RecipAddress = "****@****+++.++.jp"
.MsgSubject = "テスト件名"
.MsgNoteText = "本文内容"
.AttachmentPathName = "C:\Hoge.txt"
' 手動送信
.Send(True)
End With

mapisettion.SignOff()
Catch ex As Exception
' MS Outlookの場合、送信せずにキャンセルされた場合は例外が発生する・・・?
End Try
------------------------------------------------------------------------

この回答への補足

korin_さん、ありがとうございます。昨日と今日のほぼ2日間、いろんな掲示板やGoogleで
添付の仕方を調べていましたが見つからずほぼあきらめていました。本当に助かります。
まだテストしていませんがそのまま貼りつけますとMSMAPI.MAPISession
に「定義されていません」のエラーだ表示されます。おそらくkorin_さんのご指摘の「参照の
追加で MSMAPI を追加する」だと思います。参照設定の方法を勉強して明日テストして報
告いたします。取り急ぎ回答いただいたことをお礼申し上げます。

補足日時:2008/11/18 00:06
    • good
    • 0
この回答へのお礼

korin_さん、捕捉の続きをお礼に記述して申し訳ありません。
参照設定の「参照の追加」画面にMSMAPIが見当たらず、つまずいています。次のどのタグにあるのでしょうか
[.NET][COM][プロジェクト][参照]
よろしくご指導下さい。

お礼日時:2008/11/18 00:28

diashunです。

「Option Explicit」は変数の宣言を明示的に記述する(Dim aaa As String など)ことをいいます。
VBでは変数を宣言しなくても動作はしますが、変数の重複や記述ミスを避けるため、私は必ず「Option Explicit」をモジュールの最初に記述します。VB(私のばあいは、VB6.0 SP6)のメニューバーの「ツール」→「オプション」で「変数の宣言を強制する」にチェックを入れると、自動的にモジュールの先頭行に記述されます。
「oMsg」については「CDO.Message」がObject型であり、そのObjectを継承するクラスとして、バリアント型としています。
「strFROM」、「strCC」についてですが、「strCC」は空文字でも問題ないと思いますが、「strFROM」については、空文字でも送信可能ですが、習慣として明示するようにしています。

この回答への補足

diashunさん、明快な回答ありがとうございました。最初に学んだことな
のに忘れていました。またソフトの勉強は、個の様に他人と接することで
大変勉強になりました。

Option Explicit が変数の明示的宣言を自主規制していること
Dim Ws, Sendcmd, oMsg の型指定がないのはバリアント型であること
strFROM は、習慣として明示するようにしていること

大変明快に理解できました。
続けて、添付に関に関する設定方法ですが、どうしても実現したいと
考えておりますので、どの関連を調べればよいのかご存知であれば
ヒントだけでもご提示たらければありがたいと思っています。
どうも本当に助かりました。
本当にありがとうございました。

補足日時:2008/11/16 11:50
    • good
    • 0

diashunです。

補足です。先ほどのコードでOutlock Express を起動させるにはインターネットオプションでメールプログラムの指定を「Outlock Express」にすることが前提です。

この回答への補足

diashunさん、正常に動作しました。感動です。
ご提示いただきましたコードを私なり書き換え Button_Click 時のイベントハンドラーとしてテストしてみました。

Dim Ws, Sendcmd, oMsg
Dim strTO As String = "****@****+++.++.jp"
Dim strSubject As String = "テストNewtest"
Dim strBody As String = "New1108これはテストテストテスト"
On Error Resume Next '---------------------------------- エラーで停止しない
Ws = CreateObject("WScript.Shell") '-------- COM オブジェクトへの参照を作成
oMsg = CreateObject("CDO.Message") '---------- CDO.Message オブジェクト生成
oMsg.To = strTO '------------------------------------------------- 宛先指定
oMsg.Subject = strSubject '------------------------------------- 件名を指定
oMsg.TextBody = strBody '--------------------------------------- 本文を指定
Sendcmd = "mailto:" & strTO & "?Subject=" & strSubject & "&body=" & strBody
Ws.Run(Sendcmd)

このコードで私には解らない部分がありますので以下に追加で質問させてください。
1、Option Explicitの意味を教えてください
2.Dim Ws, Sendcmd, oMsg とありますのはDim Ws, Sendcmd, oMsg As String の間違いでは?
3.strFROM = "*******@******.**.jp"が作用していないので消しましたが問題ないでしょうか?
4.strCC = "********@+++o.ne.jp"も動作していませんので削除しましたが問題ありませんか
以上
とにかく正常に動作していて感動しています。
添付に関しても少し調査して、わかりましたらここに掲載します。
本当にありがとうございました。

補足日時:2008/11/16 08:53
    • good
    • 0
この回答へのお礼

diashunさん、早速のお返事ありがとうございました。
実は木曜日から悩んでまして、大変助かりました。実際にテストするのは
明日になりますが、取り急ぎお礼だけでもと思い投稿しました。
わからないところがあれば、ここで追加質問させていただきますので
よろしくお願いいたします。

お礼日時:2008/11/16 00:18

ご参考になれば・・・


昔作成したソースの一部ですが、これでOutLoockのメッセージ作成画面が起動できるはずです。
添付ファイルについては他の識者のヘルプ待ちということで・・・。
(strFROM、strTO、strCC は適宜変更してください。)
Option Explicit

Public Sub SendMailTest()
Dim Ws, Sendcmd, oMsg
Dim strFROM As String, strTO As String, strCC As String
Dim strSUBJECT As String, strBody As String
On Error Resume Next '--- エラーで停止しない
Set Ws = CreateObject("WScript.Shell")
Set oMsg = CreateObject("CDO.Message") '--- CDO.Message オブジェクト生成
strFROM = "*******@******.**.jp"
strTO = "****@****+++.++.jp"
strCC = "********@+++o.ne.jp"
strSUBJECT = "テストNewtest"
strBody = "New1108これはテストテストテストテストテストテストテストテストテストテストテストテスト"
oMsg.From = strFROM '--- From を指定
oMsg.To = strTO '--- To を指定
oMsg.CC = strCC '--- To を指定
oMsg.Subject = strSUBJECT '--- Subject を指定
oMsg.TextBody = strBody
Sendcmd = "mailto:" & strTO & _
"?Subject=" & strSUBJECT & _
"&body=" & strBody
Ws.Run Sendcmd
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報