【先着1,000名様!】1,000円分をプレゼント!

System.Net.Mailを使ってメールを送信するのに、例えば存在しないメールアドレスなどを受け取りにして試したのですが、SmtpFailedRecipientsException ex で例外をキャッチしようとしても(MSDNのサイトにあった例を使用)されませんでした(勘違いでなければですが・・)。プログラム上でメールがちゃんと送信されたか確認するにはどうすればいいでしょうか?

VS2005、ウィンドウズアプリケーション、C#

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

A 回答 (1件)

ちゃんと送信できてるんじゃない? メール送信は最寄りのSMTPサーバが受け付ければ成功です。


存在しないアドレスであっても最寄りのSMTPサーバはとりあえず受け付けるので正常に送信できます。アドレスが存在しないものならその先でエラーになり後からエラーメールが返ってくるだけでしょう。

例外が起きるのはSMTPサーバ自体がないとか、相手先マシンに直接ポストしてアドレス不在でリジェクトされたとか、そういう場合くらいじゃないかな。
    • good
    • 0
この回答へのお礼

ではその場でメールがちゃんと受信されるかどうかはわからないのですね。勉強になります。

あとSMTPサーバがダウンしてるときとかは、ではちゃんと例外が起きるんですよね。

質問してよかったです。ありがとうございます!

お礼日時:2008/08/30 12:53

このQ&Aに関連する人気のQ&A

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

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

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

QC#で共有変数の定義をするには

C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています)
Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

Aベストアンサー

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    // ここに記述
    static public string strArg = null;
  }
}

メインクラスのメンバーとしてスコープが有効な場所に記述します

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(n...続きを読む

QC# ログイン画面からメイン画面への画面遷移について

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示することがある為)

---------------------------------------------------------------------
private void LoginButton_Click(object sender, EventArgs e)
{
   /* ログイン処理 */

   //ログイン成功時
   //メイン画面インスタンス生成
   MainForm mainForm = new MainForm();
   //ログイン画面インスタンスを代入
   mainForm.loginForm = this;
   //メイン画面表示
   mainForm.Show();
   //ログイン画面非表示
   this.Visible = false;
}
---------------------------------------------------------------------

また上記の方法だとメイン画面を閉じても、アプリケーションは終了しない為
メイン画面の閉じるボタンを押した場合に以下の処理を行っています。

---------------------------------------------------------------------
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
   //ログイン画面クローズ
   loginForm.Close();
}
---------------------------------------------------------------------

以上、宜しくお願いします。

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示す...続きを読む

Aベストアンサー

#2です。
最初にログイン画面のみを表示したいなら
メイン画面のForm_menu_Load(loadイベント処理)
の中で、ログイン画面をモーダル表示し、
NGならメイン画面のcloseのほうがよいかも知れません。

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

QDATE型変数を初期化する方法

他の変数みたいに
ゼロや""では初期化は出来ないのでしょうか?

Aベストアンサー

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Day(d)
End Sub
Form1には00:00:00、89/12/30が表示され、MSGBOXでは1899、12,30(31で無い)と表示されました。
こう言うことはエクセルの日付に似ており、シリアル値
のスタート日を表示しているところから、その値でセットされているはず。したがってd+1とか整数的演算が可能と
言うことであり、表示する時だけyyyy/mm/ddほか書式に
したがってVBが表示してくれると思う。
ただこの利用法は思いつかないが。
""に付いてはやっていませんが。

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Da...続きを読む

Q日数算出SQL

すみません教えてください。
DB→Oracle9iで「日付A」と「日付B」の間の日数を表示させようとしているのですが、うまくいきません。
参考書などでは、「Months_Between関数」でも試してみたのですが、うまくいきません。単純なやりかたあればおしえていただきたいのですが、よろしくお願いいたします。

Aベストアンサー

こんにちは。

Months_Betweenは、差分を月で表す場合に使います。
この場合は1ヶ月未満は小数になってしまいますね・・・。

日付だけでいいなら単純に引き算します。
SELECT to_date(日付A)-to_date(日付B)
FROM テーブル
です。
(^^ゞ

QSQL、2つのテーブルで条件一致したものだけdeleteする方法は?

オラクルSQLで質問です

やりたいことは、
テーブルAから以下の条件に該当するデータを削除する。
基本的にはテーブルBの内容と比較して、一致したもの。

条件(全ての条件を満たすこと)
 テーブルA.AAA = テーブルB.AAA
 テーブルA.BBB = テーブルB.BBB
 テーブルB.CCC > 0


調べたところ、SQLサーバでは以下のように
from を2つ書いて実現できるようです。
が、今回はオラクルなので文法エラーになります。

delete FROM テーブルA FROM テーブルB
where
テーブルA.AAA = テーブルB.AAA
AND
テーブルA.BBB = テーブルB.BBB
AND
テーブルA.CCC > 0
;
commit;


よろしくお願いします

Aベストアンサー

delete 文の細かい構文はちょっと覚えてませんが
サブクエリ使えばいいんじゃないですか

delete from table_a
where 主キーカラム = (
select table_a.主キーカラム
from table_a, table_b
where
指定の条件
)

Q存在しないアドレスへ送信した場合に確実に不達エラーを受ける事は可能でしょうか?

ASP環境にてBASP21を使用してクライアント側がフォームに入力した情報をメールで送信する形を作っております。
その際に入力されたメールアドレスに確認のメールを送っているのですが入力間違い等で存在しないメールアドレスが入力されていた場合に、どの入力者が間違ったアドレスを指定していたのか確認が必要になります。
[reply-to]で設定したアドレスに不達エラー(MAILER-DAEMON)が戻ってくるのですが、なぜかその不達エラーが戻ってこない時があります。
ドメインによって戻ってこない事があるようなのですがそういった不達エラーのメールを確実に返信させるようなことは可能なのでしょうか?

どうにも確認が出来ずに困っております。ご教授お願いいたします。

Aベストアンサー

不可能です。
不達のエラーメールを返送するのは、あくまでも相手方システムの為。
近年のSPAMメール流行の弊害とあきらめるしかありません。

システム的な対応として、
「初回の確認メールに短期間で応答が無ければ登録プロセス停止」
等を行うのが現実的な解法です。

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QAUTO_INCREMENTのあるテーブルにinsertできません(長文)

mysql5.0.27(RedhatLinux 9)です。
属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。
Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。
状態をまとめると、以下のようになります。

・下記のテーブル定義で、テーブルは普通にcreateできた。
・descで確認しても、ちゃんとテーブルはできているよう。
・下記のinsert文で、その下のエラーメッセージが出て、データを登録できない。
・どうみても、コラム数は合っている(と思う)。
・下記のテーブル定義の属性数を適当に減らす(id, item1, item4, item6くらいにする)と、エラーが出ずデータがちゃんとinsertできる。
私はなにか、とんてもない勘違いをしているのでしょうか?かなりの時間試行錯誤しているのですが、一向にわかりません。。。

===== テーブル定義 =====
CREATE TABLE hoge (
id MEDIUMINT UNSIGNED AUTO_INCREMENT NOT NULL,
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (32) NOT NULL,
item4 VARCHAR (64),
item5 VARCHAR (64),
item6 VARCHAR (16) NOT NULL,
CONSTRAINT PK_HOGE PRIMARY KEY (id)
) type=innodb;
CREATE INDEX IDX_HOGE_1 ON hoge(item1);
CREATE INDEX IDX_HOGE_2 ON hoge(item2);
CREATE INDEX IDX_HOGE_3 ON hoge(item3);
CREATE INDEX IDX_HOGE_4 ON hoge(item4);
CREATE INDEX IDX_HOGE_5 ON hoge(item6);

===== descの出力 =====
+---------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| item1 | varchar(64) | NO | MUL | | |
| item2 | varchar(64) | NO | MUL | | |
| item3 | varchar(32) | NO | MUL | | |
| item4 | varchar(64) | YES | MUL | NULL | |
| item5 | varchar(64) | YES | | NULL | |
| item6 | varchar(16) | NO | MUL | | |
+---------------------+-----------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

===== insert文 =====
insert into hoge (item1, item2, item3, item4, item5, item6)
values ( 'data1','data2', 'data3', 'data4', 'data5', 'data6');

===== エラーメッセージ =====
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1

長文大変申し訳ありません。よろしくお願いします。

mysql5.0.27(RedhatLinux 9)です。
属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。
Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。
状態をまとめると、以下のようになります。

・下記のテーブル定義で、テーブルは普通にcrea...続きを読む

Aベストアンサー

試しに
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (32) NOT NULL,
item4 VARCHAR (64),
item5 VARCHAR (64),
item6 VARCHAR (16) NOT NULL,
↑全て同じにしてみたらいかがでしょうか?
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (64) NOT NULL,
item4 VARCHAR (64) NOT NULL,
item5 VARCHAR (64) NOT NULL,
item6 VARCHAR (64) NOT NULL,
これでINSERTできるのならデータかテーブル構成かどちらかです。


人気Q&Aランキング