asp.netでユーザーの既定のメールを起動する

このQ&Aのポイント
  • asp.netとVBでアプリケーションを作成し、クライアントPC側の既定のメーラーを起動させたい
  • クライアントPCのデバッグモードではメーラーが起動するが、サーバーに移して実行させると何の反応もない
  • 質問者はそれが可能かどうか分からず、サーバーの設定の問題なのか知りたい
回答を見る
  • ベストアンサー

asp.netでユーザーの既定のメールを起動する

asp.net とVBでアプリケーションを作ろうとしています。 やりたいことは、クライアントPC側のそれぞれの既定の メーラーを起動させることです。 以下のようなプログラムを書いて実行させたところ、 クライアントPCのデバッグモードではメーラーが起動しましたが、 サーバーに移して実行させたところ、何の反応もありません。 知識が乏しいもので、そもそも、そのような事が可能なのか、 サーバーの設定の問題なのか、何も分かりませんので、 どなたかご教示頂けませんか? Private Sub メール処理(ByVal x As String) Dim encMail As String = String.Format("mailto:{0}?subject={1}", "mailto:" & x, "事務連絡") System.Diagnostics.Process.Start(encMail) End Sub ちなみに上記のSubは、メール送信のコマンドボタンをクリックすると 呼び出されるsubで、xには、メールアドレス(送付先)が入ります。

質問者が選んだベストアンサー

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.4

> Page_Load時以外の動作は、クライアント側で実行されるというような記述を以前何かで読んだ > 記憶があったのでコマンドボタン_Clickのイベント時のプログラムの中に書いておけば > クライアントPCの環境が反映されると思っているのですが。 記事の間違いか記憶の間違い(たぶん記憶の間違い)でしょう。 コードビハインド側に記述したプログラムはすべてサーバー上で実行されます。 > 例えば、Page_Loadイベントに クライアント側のドライブを指定しても無効ですが、 > それ以外のイベント(例えばコマンドボタン_Clickイベント)では有効なので そんなことはありえません。 開発サーバーでの動作とクライアント側の動作がごっちゃになってますね。 まずはそこをきちんと区分けできることを目標に学習するとこから、かなぁ。 > 何とかasp.netでクライアントPCから既存のメーラーを起動させるプログラムは > 出来ないものでしょうか? ASP.NETでできることはHTMLを生成するまで、です。 クライアントPCでなにか動作させる、というのはHTMLでできること以上のことは できません。 なので、HTMLについてきちんと学習しましょう。

holy2002jp
質問者

補足

onos様。ご回答ありがとうございました。 (1)VBでHTMLを生成する、(2)Javascriptで別Windowを開く、(3)Respons.Redirect("mailto:" & メールアドレス)などでみたいと思います。 >開発サーバーでの動作とクライアント側の動作がごっちゃになってますね。 >まずはそこをきちんと区分けできることを目標に学習するとこから、かなぁ。 ありがとうございます。ローカルwebサーバーの環境を作って今後、確認しながら勉強したいと思います。この度は、貴重なアドバイスをありがとうございました。

その他の回答 (3)

  • WebSurfer
  • ベストアンサー率55% (33/59)
回答No.3

> 何とかasp.netでクライアントPCから既存の > メーラーを起動させるプログラムは出来な > いものでしょうか? onos さんがレスされているじゃないですか。 ちゃんとレスを読んでますか? ただし、スパムの問題があるので注意してく ださい。

holy2002jp
質問者

補足

ご回答ありがとうございました。 (1)VBでHTMLを生成する (2)Respons.Redirect("mailto:" & メールアドレス)を使う (3)Javascriptで別Windowを開く のいずれかで対応したいと思います。

  • WebSurfer
  • ベストアンサー率55% (33/59)
回答No.2

> Diagnostics.Process.Start命令もクライアント側で > 行われるのではないかと思っています。 違います。Web サーバーです。 ASP.NET 開発サーバーでテストしていると分からないか もしれませんが、よーく考えてみてください。

holy2002jp
質問者

補足

webSurferさん。ご回答ありがとうございました。 そうなんですね。わかりました。ところで、他の 方法でも良いので何とかasp.netでクライアントPCから 既存のメーラーを起動させるプログラムは出来ないもの でしょうか?

  • onos
  • ベストアンサー率81% (127/155)
回答No.1

えーと、このプログラム、とくにDiagnostics.Process.Startが「どこ」で動くか認識できてますか? というのがひとつ。 あと、クライアント側でメーラー起動させたいんですよね? HTMLに関して、セキュリティがだんだん厳しくなってきているのはご存知だと思いますが、 Webアプリではそこでできること「しか」できないです。 なので、HTMLレベルでなにがどこまでできるか調べられるのがよいかと。 HTMLにmailtoを書いておいて、ユーザーにクリックしてもらえればとりあえずメーラーは 立ち上がりますが、、、それでは仕様として問題あるのかな? あと、メーラーは立ち上がりますが、subjectに設定している日本語はメーラーの種類によって 文字化けすることもありますので、使うかどうかの判断は慎重に。

holy2002jp
質問者

補足

 onos様、ご回答をありがとうございます。  やろうとした事をもう少し詳しく書きますと、 検索条件に合致したデータのみ.aspxに配置されたテーブル(氏名、メールアドレス、送信ボタン)に表示し、送りたい相手の欄にあるコマンドボタンをクリックすればメーラーが立ち上がるというものです。  Page_Load時以外の動作は、クライアント側で実行されるというような記述を以前何かで読んだ記憶があったのでコマンドボタン_Clickのイベント時のプログラムの中に書いておけばクライアントPCの環境が反映されると思っているのですが。  例えば、Page_Loadイベントに クライアント側のドライブを指定しても無効ですが、それ以外のイベント(例えばコマンドボタン_Clickイベント)では有効なのでDiagnostics.Process.Start命令もクライアント側で行われるのではないかと思っています。 subjectに関しては、仰るとおり「文字化け」の問題があるので外すことにします。

関連するQ&A

  • メール

    VBから変数Aを本文に自動的に貼り付ける方法を教えてください。 なお下は以前開発したものです。応用して使えるでしょうか? Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal ipopperation As String, ByVal lpfile As String, _ ByVal lpparameters As String, ByVal lpdirectory As String, ByVal nshowcmd As Long) As Long --------- Private Sub ??_Click() Dim LngReturn As Long Dim StrCommand As String StrCommand = Trim$(Text_mail_pc) If LCase(Left(StrCommand, 7)) <> "mailto:" Then StrCommand = "mailto:" & StrCommand End If LngReturn = ShellExecute(Me.hwnd, "open", StrCommand, vbNullChar, vbNullChar, Sw_Shownormal) End Sub ---------- ※↓のVBの質問とは全く関係ありません。

  • BASP21を使ってEXCELからメールの送信

    BASP21を使ってEXCELからメールの送信をしたいのですが、できません。 自分なりに調べた結果、下記のコードになったのですが、どこかおかしいのでしょうか? エラー表示は次になります。 530 5.7.1 client was not authenticated from メールアドレス よろしくお願いいたします。 Sub ボタン2_Click() ''[送信]ボタン Dim bobj, msg As String, i As Long Dim Server As String, Mailto As String, MailFrom As String Dim Subject As String, Attach As String, Body As String On Error Resume Next Set bobj = CreateObject("basp21") ''BASP21オブジェクト ''BASP21がインストールされているかどうかを判定する If Err = 429 Then MsgBox "BASP21がインストールされていません。", vbCritical Exit Sub End If ''必須データのチェック Server = "mail.○○○.com:587:60" ''SMTPサーバー Mailto = "○○○@hotmail.co.jp" ''宛先 MailFrom = "△△△@×××.co.jp" ''差出し人 Subject = "更新連絡" ''タイトル Body = "システムが更新しました" ''本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, Attach) Set bobj = Nothing If msg <> "" Then MsgBox msg, vbExclamation Else MsgBox "メールを送信しました。", vbInformation End If End Sub

  • VB.NETでフリーメールアドレスにメール送信できない

    VisualStudio2005で開発をしています。 SmtpClientクラスを使ってメールを自動送信するアプリを作成中なのですが、 社内サーバー同士でのメール送信は問題ないのですが、社外のメールサーバーのアドレスを指定した場合に、メールが送信されなくて困っています。 ○例:)yyyyyy@xxxxxx.co.jp → zzzzzz@xxxxxx.co.jp ×例:)yyyyyy@xxxxxx.co.jp → zzzzzz@zzzzz.com 調べてはみたのですが、原因を特定することができなかったので質問させていただきました。 1.googleやyahooなどのメールサーバーに対してでもメール送信できるようにしたいのですが、どの様にすればいいでしょうか? 2.上記のように書きましたが、本当はメールサーバまでは送信されていて、クライアントが受け取れていないという可能性もあるのでしょうか? 皆様のお力を借りたく思います。 どうかよろしくお願いいたします。 ↓↓↓以下、現在作成中のソースコード↓↓↓ Private Sub btn_Send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Send.Click '送信者 Dim senderMail As String = "xxxxx@yyyyy.co.jp" ''宛先 Dim recipientMail As String = "xxxxx@yyyyy.com" '件名 Dim subject As String = "タイトル" '本文 Dim body As String = "本文1行目" + vbCrLf + vbCrLf + "本文3行目" Dim sc As New System.Net.Mail.SmtpClient() ' メールメッセージインスタンスの生成 Dim objMessage As New System.Net.Mail.MailMessage(senderMail, recipientMail, subject, body) 'SMTPサーバーを指定する sc.Host = "mail.yyyyy.co.jp" sc.Port = 25 'メールを送信する sc.Send(objMessage) End Sub

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • HTMLからメーラーを起動しメール送信

    こんにちわ。 ブラウザのフォームに入力された内容をメールで送信させたいと思っております。 開発しているサーバにはメールサーバソフトはいれてないので、メーラーを起動してメールを送ろうと考えております。(メールサーバはないことを前提にお願いします) そこで、<a href="mailto:・・・でメーラーの起動はできると思うのですが、ユーザーのオペレーションとして、メーラーの送信作業をせずに、メールを送ることは可能でしょうか。ブラウザであて先、タイトル、本文等を入力し、送信ボタンを押すだけで、ユーザー側のメーラーを起動し、送信させることはできないでしょうか。 よろしくお願いします。

  • ASP.net 処理はサーバ上?クライアント上?

    ASP.netについて質問です。 お聞きしたいのは、 ◆1.WithEventsおよび、Handles で書かれた処理は、クライアントで動いているのか?サーバで動いているのか? と、 ◆2.iOSなど、クライアントに.Net Framework の入っていない環境では、ASP.netは動かないのか? です。 aspx.vb側に、 Private Sub Button1_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click End Sub と書かれてあるときでも、 クライアント側では、単なるHTMLなわけですが、どのような仕組みで動いているのでしょうか? (1)Windowsや、iOSの、システムフォルダにdllか何かがダウンロードされ、 クライアントに入っているAPIで動いている? ⇒ iOSなど、クライアントに.Net Frameworkがない環境では動かない?   サーバとの通信は発生しない? (2)サーバにRequestされている? (クライアント側で、クリックされたことが捕捉されたタイミングで、  サーバ側にRequestされている?) ⇒ iOSなど、クライアントに.Net Frameworkがない環境でも動く?   サーバとの通信が発生する? 宜しくお願い致します。 .

  • ASP.NET OleDbConnectionが定義がされていません

    ACCESS2003 で 以下のサンプルを実行すると OleDbConnectionが定義がされていません。 というエラーが発生していて対処方法をしらべ てもわかりませんでした。 何方かご教授ください。よろしくお願いいたします。 Public Sub InsertRow(ByVal connectionString As String, _ ByVal insertSQL As String) Using connection As New OleDbConnection(connectionString) Dim command As New OleDbCommand(insertSQL) command.Connection = connection Try connection.Open() command.ExecuteNonQuery() Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Sub 以下のOleDbConnectionオブジェクトの作成は行いました。 http://www.atmarkit.co.jp/fdotnet/aspexp/aspexp03/aspexp03_01.html

  • プログラムの起動が遅い

    VB2010とSQL Server 2008 R2 でWindoswアプリケーションを開発中です。 クライアントにはWindows7を使っています。 (A) メニューを立ち上げた後、そこから各プログラムのボタンをクリックすると、 すぐに立ち上がるものと、起動までに時間がかかるものがある、という現象が 出て困っています。 遅いものはどれも起動までに20秒くらいかかります。 メニューのボタンのうち、起動に時間がかかるものは決まったもので、 確実に起動まで20秒かかります。 (B) ところが、一旦起動すると、1回目では遅かったボタンのプログラムも 2回目はすぐに起動します。 (C) この現象はユーザーにある10台のPC(いずれも同時期に導入した、 同一メーカーの同一仕様マシン)で再現しますが、私が自分の ノートPCを持ち込んだときはこの現象は出ません。 (B)を考えるとキャッシュの問題だと思うのですけど、具体的にどのように 対処したらいいのかわかりません。 (C)を考え合わせるとユーザーにある10台のPCの設定の問題だと思うんですけど、 (A)のこともあるので、起動の速い(普通の)プログラムと 起動の遅いプログラムのコードを示します。   どうしてこんな違いが出るのでしょうか。 どなたか、よろしくお願いします。 【起動が遅いもののひとつ】 Imports System.Text.RegularExpressions Public Class formUriageRegistMainSono2 Private dbCtrl As dbControl Public whereString As String Public sortString As String Public NewId As Integer Public NewNo As Integer Friend friAryShohinid(7) As Integer Friend friArySuryo(7) As Integer '画面が読み込まれたときの処理 Private Sub formUriage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load dbCtrl = New dbControl DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy年MM月dd日(ddd)" Call setInitialView() cboUriKubun.Text = "売上" End Sub 【起動が速いもののひとつ】 Public Class formMitsumoriRegist Private dbCtrl As dbControl Public whereString As String Public sortString As String Public NewMitsumoriId As Integer Public NewMeisaiId As Integer Friend friAryShohinid(7) As Integer Friend friArySuryo(7) As Integer Friend friIntNum As Integer Friend friIntGyo As Integer '画面が読み込まれたときの処理 Private Sub formMitsumoriRegist_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load dbCtrl = New dbControl DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy年MM月dd日(ddd)" '各行のコントロールの配列化を呼び出す ControlArray() Call setInitialView() End Sub

  • VBA内でのGetPixelを使用した時のRGB値取得の方法

    初めまして、 現在、ExcelVBAを勉強中です。 表題の通りですが、LoadPicture関数でbmpを読み込み、ピクセルのRGB値を取得しようとしているのですがうまくいきません。色々と検索して回ったのですが、探し方が悪いのか見つかりませんでした。 以下はソースになります。 Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long Sub Sample(bmpfile as String) bmpdata = LoadPicture(bmpfile) 'デバッグ用表示 MsgBox (Hex(GetPixel(bmpdata, 1, 1))) End Sub サンプルで使用した画像データは10x10のすべて黒(#000000)で塗りつぶしたデータですが、デバッグ表示で見てみると何故かFFFFFFFFと表示されます。ほかの色も試しましたがデバッグ表示結果は同じでした。 どなたか詳しい方、原因などを教えて頂けますでしょうか。 よろしくお願いいたします。

  • VB.NETで値や参照について ByRefなど

    VB.NETで値や参照について、まだ初学ですがよろしくお願いします。 VBは2008です。 以下のようなs文字列を参照引数にしたSetDataメソッドがあります。 ByRef s As Stringという引数は、SetData内でsを書き換えると、 呼び出したSetDataメソッド外でも中身が変わるので 私のByRefの認識ではポインタと解釈しています。間違っているでしょうか? SetData(1,1, buf)とすれば、DataGridViewの中は、「初期値」という文字が表示されます。 別のメソッド(KaKikae)でbufを"あ"という文字に変えた場合、SetDataメソッドを使わなくても 書き換わっていると思っていたのですが、実際実行してみると書き換わりません。 値や参照について理解が足りないからだと思いますがわかりません。 どのようにすれば、それが実現できるのでしょうか? Public Class HogeClass Private buf As String = "初期値" Private Sub SetData(ByVal x As Integer, ByVal y As Integer, ByRef s As String) As Boolean Dim dg As DataGridView dg = DataGridView1 dg.Item(x, y).value = s End Sub Private Sub KaKikae() buf = "あ" End Sub End Class