BASP21 Sendmailは送信できるけど、SendmailExだけ送信できない

※IIS7 、IIS8 等のレガシーASPでBASP21を動作させるための設定は、Google先生に聞いてみてください。親切な同士がたくさんいますよ。

症状

Windows Server 2012 (IIS8.5) でレガシーASP実行時のエラーです。
BASP21を使用して、Sendmailは送信できるけど、SendmailExだけ送信できない。

ログ

送信エラー Cant connect Server 11001 …

Google先生によると、どうやらWinSockのエラーコードらしいです。
WinSock Error 11001:そのようなホストは不明です。

推測・・・SMTPサーバーの名前解決ができていないのではないか?

SMTP指定をIPアドレスに変更してみる → 送信完了 (ビンゴ!)

原因

SendmailExはASPとは別プロセスです。別プロセスの起動アカウントに名前解決のための権限がなかったようです。

解決策

IISマネージャーを開きます。

アプリケーションプール → 対象のアプリケーションプールを選択
→ 詳細設定 → プロセスモデル → ID

ApplicationPoolIdentity になっていると思います。
NetworkService や LocalSystem に変更するか、
この ApplicationPoolIdentity で動作できるように権限を付与していきます。

ADO.NET C#で エクセルファイル(xls)を読み込む

C#でエクセルファイルを読み込む場合の参考ソース。Jet OLE DBプロバイダを使用するのが一般的なようです。

        String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=" + Server.MapPath(filePath) + ";" +
            "Extended Properties=\"Excel 8.0;\"";
        OleDbConnection objConn = new OleDbConnection(sConnectionString);
        objConn.Open();
        OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM ItemMaster", objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
        objAdapter1.SelectCommand = objCmdSelect;
        DataSet objDataset1 = new DataSet();
        objAdapter1.Fill(objDataset1, "XLData");

ただ、現在のバージョンでは注意が必要です。

データ型について

従来のデータベースとは異なり、Excel テーブルの列に直接データ型を指定する方法はありません。OLE DB プロバイダが列内の 8 行をスキャンして、そのフィールドのデータ型を推測します。スキャンする行数は、接続文字列の拡張プロパティで、MAXSCANROWS の設定に 1 ~ 16 の値を指定することで変更できます。

だそうです。自動で「数値型」と認識された列に、文字列が入り込んでいる場合、なんと!「データなし」とされてしまいます。

ならば、データ型の推測対象をヘッダ行のみにすれば、すべて文字列型として認識されるはず。

Extended Properties="Excel8.0;HDR=NO;MAXSCANROWS=1;"

結果は同じでしたorz.. MAXSCANROWS 効かない。。。セルの書式設定を「文字列」にしてもやっぱり、数字のみで文字列を読み込みません。

別角度の対策が必要そうです。

553 Invalid RFC821 mailbox specification

Mercury/32 で送信エラー

553 Invalid RFC821 mailbox specification

原因

宛先の書式が不完全でした。

ログをよ~く見てください。
ログ:553 Invalid RFC821 mailbox specification. to info@nusoft.jp localhost …
< と > で囲われていません。

対策

メールアドレスを囲ってあげます。
$mailto = “<” .  inputMailaddress .  “>”;

送信できました。

…他のMTAで怒られたことはないんだけどなぁ。

ActiveX コンポーネントはオブジェクトを作成できません。

Microsoft VBScript 実行時エラー エラー ‘800a01ad’
ActiveX コンポーネントはオブジェクトを作成できません。

従来のasp で、Server.CreateObject() できない。

原因

64ビット環境で、32ビットDLLを呼び出そうとした。

対策

IISの設定→該当アプリケーションプール→詳細設定

「32ビットアプリケーションの有効化」(デフォルトFalse) をTrueに!

メディア ファミリが正しい形式ではありません。SQL Server はこのメディア ファミリを処理できません・・・

SQLServerのバージョン番号

 
SQL Server 2000 539
SQL Server 2005 611
SQL Server 2008 655
SQL Server 2008 R2 661

下位バージョンでは、バックアップファイルをリストアできません。

エラーメッセージ例

  • メディア ファミリが正しい形式ではありません。SQL Server はこのメディア ファミリを処理できません・・・
  • バックアップされたデータベースのディスク上の構造はバージョン661のものです・・・このデータベースの復元またはアップグレードは実行できません。

 

SQLスクリプトを書き出して置いたほうが扱いやすいかも。2008以降に添付のManagement Studio であれば、「データスクリプトを作成」というオプションがあります。MySQLとかで作成するようなダンプファイルを一撃で作成することができますので、Management Studioだけでもインストールしておいたほうがいいです。

正規表現の文字列否定 例外付きの置換

.net framework 上での文字列置換です。

やりたいこと

| はマッチして欲しいけど、[|] はマッチして欲しくない。

答え

(?<!\[)\|(?!\])

文字列否定は結構厄介と、Google先生もおっしゃっていました。行錯誤の結果たどり着いた答え。.net framework では、ゼロ幅の否定的先読みアサーション、ゼロ幅の否定的後読みアサーション が使えます。このキーワードで検索してみてください。

参考

(?<!  ) 直前にこのパターンが現れないことを確認する
(?!   ) 直後にこのパターンが現れないことを確認する