Windows2000でVB6.0のSP5を使用していますが、メールの自動送信を行いたいのですが、VBだけではできないのでしょうか?
できる事ならあまり環境に依存したくないので、ActiveXやAPI等の使用は避けたいのですが、それしか方法がないのでしょうか?
メールは新規メールが起動するのではなく、完全にプログラムからの自動送信を考えています。
つまり、データベース等のデータを使用してメール送信を全自動で行いたいのです。
どうぞ、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

私だったら市販またはフリーのOCX, DLLを探します。

    • good
    • 0
この回答へのお礼

その方向性を忘れていました。
調査してみます。
ありがとうございました。

お礼日時:2002/03/08 00:08

haporunさんのおっしゃる様に、WindowsAPIならば外部のモジュールは必要ないので環境依存は少なくなります。


ただ、OSによってWin32APIの実装が微妙に違うので、95からXPまで動くようにするには、それなりに調査が必要ですね。
そういった前提でメール送信をしようとすると、まんまソケットプログラミングをVBでする事になります。
つまり、SMTPを実装するって事ですね。
必要ならMIMEエンコードも自力で実装します。
Winsockプログラミング本は結構ありますが、大抵の場合CやC++を前提にしてるので、VBに応用しようとする場合、それなりに工夫やひねりが必要です。
ポインタや構造体を引数に持ってる場合なんかがやらしいんですよね。
つまり面倒だって事ですね。
ですが、不可能では無いと思います。
    • good
    • 0
この回答へのお礼

つまり、同一のAPIで動作しない場合は、VBで簡単にメール送信を行うのは難しいということですね。
ありがとうございます。

お礼日時:2002/03/08 00:05

ActiveXはバージョンが違うと動作しないこともありますが、APIはほとんど環境には影響されませんよ。

この回答への補足

メールに使用するAPIを詳しく調べてないのですが、Win95系とWinNT系ともに同じAPIで動くのでしょうか?
調べれば良いのですが、APIのヘルプがない為、御存知なら教えて下さい。

補足日時:2002/03/08 00:01
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qselect(ソケット)

ソケットを用いてプログラミングしていると、よく出てくると思うのですが、次の意味を教えてください。
select(SH); $| = 1; select(STDOUT);
$|(特殊記号)やSTDOUTなど、なるべる細かく教えて頂けると幸いです。
よろしくお願いします。

Aベストアンサー

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれます。

また、デフォルトではSTDOUTが選択状態になっていますので
> print "hello.\n";

> print STDOUT "hello.\n";
の省略形というわけです。

余談ですが、Perl使いは面倒くさがりが多いので慣用句みたいに
> select((select(SH),$|=1)[0]);
と、まとめて書く人もいます。
これはselectが返す値が直前まで選択されていたソケットだからできる技です。

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれま...続きを読む

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

QTCP/IPプログラミングでのselectについて

selectは使用しているソケットのディスクリプタを登録させれば、send、writeシステムコールからのデータの受信等は検知しますよね。
では、コネクション要求(connect)は、検知するのでしょうか?
どなたか回答よろしくお願いします。

Aベストアンサー

もちろん検知しますよ。
LISTENしているソケットに対しての要求を検知したら
acceptしてやればOKです。

QVB(6.0)で作成したActiveX(ocx)をVBで呼び出す方法

普通OCXを使用する時は、
デザイン時にフォームにOCXを貼り付け
実行するとそのOCXが表示されると思うのですが
今回の質問はそうではなく
デザイン時には何も貼り付けず
VC++で言うCreateObjectの様に
実行時にOCXのオブジェクトを生成する事が
出来るのでしょうか?

Aベストアンサー

レジストリに登録してあれば、VBでもCreateObjectでできます。

Qselectの意味

selectの意味

リファレンスマニュアルと本のselectの説明がわかりません。
説明の文はなんとかわかるのですが、引数のとり方が「reads[, writes[, excepts[, timeout]]]」となっていて、これは 3 要素の配列を返しているように見えないので、混乱します。「reads[, writes[], excepts[], timeout[]」という書き方なら3 要素の配列を返していると納得できるのですが、ここで返しているのはreadsの中にwritesがあり、更にその中にtimeoutがある配列を返しているんでしょうか?

手元の本に「selectはリクエストを受信すると、リクエストを検出したソケットだけをリストに返します。」とあるのですが、ここで言うソケットとは入力、出力、例外を指していて、リストというのはつまり配列のことなんでしょうか?

Aベストアンサー

a = hoge.select(ARGS)

の場合に、ARGSの部分が引数です。
ここは、「reads[, writes[, excepts[, timeout]]]」とかかれているので
以下の4種類の書き方ができます。
hoge.select(reads, writes, excepts, timeout)
hoge.select(reads, writes, excepts)
hoge.select(reads, writes)
hoge.select(reads)

また、aに代入される値が戻り値です。
ここには、
「戻り値は、timeout した時には nil を、そうでないときは 3 要素の配列を返し、その各要素が入力/出力/例外待ちのオブジェクトの配列です(指定した配列のサブセット)」
と書かれているので
nil 若しくは [???,???,???]の形で値が代入されます。

これでご理解いただけるのではないでしょうか。

QVBSでuser32.dll(Win32API)を使用する方法を教えてください。

はじめてネットで質問します。失礼があったらすみません。

VBSでマウスカーソルの座標を設定する方法を教えてください。
このサイトやあちこち検索してみましたが、VBでのやり方は見つかったのですがVBSでのやり方が見つからなくて心が折れてしまいました。

自分で調べた結果、user32.dll(Win32API )のSetCursorPos を使用する必要があるところまではなんとなく理解しましたがどうやってuser32.dllを使用できように宣言するのかが解りません。

宣言さえできれば

SetCursolPos 0,0

で画面左上にマウスカーソルが移動すると思っています。

この問題で会社と家で3日ほどはまってます。
ご回答よろしくお願い致します。

Aベストアンサー

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm
  [Dynacall] サンプル
  http://www.geocities.jp/seiotaq/DynaHP/index.html#three2

などの Dll をインストールして、そこを経由することになります。

私見ですが、新たなインストールを避けたい場合や面倒に感じるので
あれば Excel VBA を使った方が良いと思います。

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http:/...続きを読む

Qソケットプログラミングで・・

簡単なソケットプログラムを作ろうとしておりまして、サイトで調べたりしておりましたところ、なんとか分かってきたのですが、ひとつどうしてもわからないことがありますので教えていただけますでしょうか。
ソケットから受信するメッセージの生成のところなんですが、
「WSAAsyncSelect(m_socket,m_hWnd,WM_USER_ASYNC_SELECT,FD_READ | FD_WRITE)」
で、2番目の引数「m_hWnd」がわかりません。
教えていただけないでしょうか?よろしくお願いします。

Aベストアンサー

こちらの「III.非同期ソケット通信」のところが参考になりませんか?
WSAAsyncSelect()で、例えば受信データありの場合にイベントとして通知する
ウィンドウのハンドルをここに記述しておき、そのウィンドウのイベント
ハンドラで受信処理を行なうようなプログラミングを可能にします。
http://yonex1.cis.ibaraki.ac.jp/~yonekura/2002kadai/lecture03.html

参考URL:http://yonex1.cis.ibaraki.ac.jp/~yonekura/2002kadai/lecture03.html

QVBからAPIを使用してスケジュールの追加(月末指定で)

VB6.0 SP5 WIN2000 で開発しています。
VBからAPIでスケジュールを追加する(バックアップを取る)
プログラムを作っているのですが
曜日や日付の指定はわかったのですが
月末の指定で疑問があります。
毎月31日とすると31日が無い月はどうなるのでしょうか?
実行されないとしたら30日しかない月の
スケジュールを追加すればいいと思うのですが
APIで月の指定がどのように指定すれば
いいのか解りませんでした。
例)
1月・3月・5月・7月・8月・10月・12月は31日
4月・6月・9月・11月は30日
2月は28日と3つのスケジュールをVBから追加したいです
どなたか解る方がいらっしゃいましたら教えてください。

Aベストアンサー

31日を指定すると、30日までしかない月は実行されるのかされないのかは知らないのですが(システム日付をコントロールパネルなり BIOS なりで操作して、一度試されてみてはどうでしょうか。)、もし、31日を指定した場合、30日までしかない月は実行されないなら、
・スケジュールを毎月ではなく1回だけ実行するものにする。
・スケジュラーから呼び出されるプログラムが
(1) バックアップの処理
(2) 次の月のスケジュールを追加する
というようにしてみてはいかがでしょうか。
つまり、スケジュールを追加するプログラムとスケジュラーから呼び出されるプログラムが同じってことになります。VB だと翌月は何日まであるか知ることができますよね。( No.2 の方の回答を参考にしてください。 )

Qint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識だとreadfds,writefdsが引数として与えられているとしても、
どちらかのfd_setのうち、一つでも動きがあればselect文は
抜けてしまうことになります。とすると、戻り値として
「readfds, writefds, exceptfds 中の 1 になっているビットの総数」
は常に1ということになってしまいます。しかし、総数というからには
複数同時に1になることもあるはずです。

私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。
select文の動きについて詳しく教えていただけないでしょうか。
または良いページがあれば教えてください。

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きが...続きを読む

Aベストアンサー

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビットが一度にONになっているはずです。
一方、相手が、一切電文を送ってない状態で、selectを呼び出した場合は、何れかのビットがONになればリターンするので、そのときは、貴方が想像しているように
ビットの総数は1になる可能性が高いです。
従って、相手が電文を送る前にselectを呼び出すか、送った後にselectを呼び出すかは、その時のタイミングにより異なります。従って、ビット数の総和が常に1であるとは、考えない方が無難です。(1つのソケットしか使用しない場合は別ですが・・・)

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビ...続きを読む

QVB.NETとVB6.0でAPIを使う場合、書き方は違いますか?

VB.NETで使うAPIというものを勉強してみたいと思って
本を探しているのですが、.NET用の本が少ないようです。

APIを使う部分のコードの書き方は.NETと6.0では大きく違うでしょうか?

Aベストアンサー

BLUEPIXYさんが言われているように、使用するための引き込みの宣言が微妙に異なります。

大きく違う部分としては、メモリを意識する方法だと思います。
何かと
Imports System.Runtime.InteropServices.Marshal
クラスを多用することになります。


例えばVB6時代に
・VarPtrを使用しなければならない場合
・APIの引数に構造体を利用し、構造体内部のメンバに配列が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバに固定長の文字列型が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバのIN/OUTなどの属性を細かく設定しなければならない場合
・APIの引数に、構造体の領域サイズ長を渡す必要がある場合
・API関数実行後、取得したポインタから、特定の型にキャストする場合
などなど、、、

http://okwave.jp/kotaeru.php3?q=2092957
に、Marshalクラスを多用しているサンプルを書いてますので、よろしければどうぞです。



ちなみに私の場合は、.NETの書籍は一冊も購入しておりません。
VB6時代に購入した、APIの書籍
「Visual Basic Tips 1000」
http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-ISBN=4883371980
を愛用しております。
ガリバーさんが出している書籍で、今は亡き[vbvbvb.com]のAPIサンプルが出ております。
HTMLで一覧が出ているので、秀丸などでGREPして、使用したい目的のAPIが素早く検索できます。

さらに
http://www.microsoft.com/japan/msdn/net/general/win32map.asp
で、本当にAPIを使用しなければならないかを調べた後、どうしてもAPIならば、サンプルソースをEXCELのVBAなどに張って、変換を行っております。


APIで使用するDLLは「VB6用」でもないし「.NET用」でもないですよね。
わたしは最近本屋さんに行っておりませんので、.NET用で多くのサンプルがある本が出版されているのか知らないのですが、、、
「.NET用の本」として固執せずに、多くのサンプルが出ている本を求めた方が、何かと便利だと思います。
「どのようなAPI関数が存在するか」「API関数で可能なこと」
が見えます。


VB6用の本を購入した場合、どうしても変換がわからない場合は、ここのような掲示板や、メーリングリストに投稿してはいかがでしょうか?
変換は「慣れ」です。繰り返し行うことで、自然と身につきます。変換のパターンは、経験上、それほど多いとも思いません。

そうすることにより、「このAPIは、、、」という技術ではなく「このタイプのAPIは、、、」という、参考文献の存在しないAPI関数にも強くなれると思います。
機会があれば、自分でCで呼び出される側のDLLを作成してみるのも、スキルアップだと思いますよー
http://okwave.jp/kotaeru.php3?q=235547

BLUEPIXYさんが言われているように、使用するための引き込みの宣言が微妙に異なります。

大きく違う部分としては、メモリを意識する方法だと思います。
何かと
Imports System.Runtime.InteropServices.Marshal
クラスを多用することになります。


例えばVB6時代に
・VarPtrを使用しなければならない場合
・APIの引数に構造体を利用し、構造体内部のメンバに配列が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバに固定長の文字列型が存在する場合
・APIの引数に構造体を利用し、構...続きを読む


人気Q&Aランキング

おすすめ情報