none
JOB実行結果のデータベースメール送信について RRS feed

  • 質問

  • お世話になっております。
    SQL Server 2005にてJOBの実行結果をデータベースメールの機能を使用して送信しようとしています。
    一連の設定を完了し、「テスト電子メールの送信」では正常にメール送信できるのですが、JOBのプロパティの通知の設定にてJOBの完了時にメールを送付しようとしても送信できません。
    データベースメールのログ表示を行うと以下のエラーが3件記録されています。
    心当たりなどございましたらお教えいただけませんでしょうか。

    ---
    日付  2009/08/19 10:29:15
    ログ  データベース メール (データベース メール ログ)

    ログ ID  80
    最終更新日  2009/08/19 10:29:15
    最終更新者  NT AUTHORITY\SYSTEM

    メッセージ
    ExternalMailQueue で受信した XML メッセージ形式が無効です。conversation_handle: 6759B2B4-5F8C-DE11-B334-00145EEDA298。 message_type_name: {//www.microsoft.com/databasemail/messages}SendMailStatus。メッセージ本文: <?xml version="1.0" encoding="utf-8"?>
    <responses:SendMail xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.microsoft.com/databasemail/responses ResponseTypes.xsd" xmlns:responses="http://schemas.microsoft.com/databasemail/responses">
      <Information>
        <Failure Message="メール サーバー エラーにより、メールを受信者に送信できませんでした。 (アカウント 3 (2009-08-19T10:29:15) を使用してメールを送信しています。例外メッセージ: メール サーバーにメールを送信できません。 (指定された文字列は、電子メール アドレスに必要な形式ではありません。)&#xD;&#xA;)" />
      </Information>
      <MailItemId Id="58" />
      <SentStatus Status="3" />
      <SentAccountId Id="0" />
      <SentDate Date="2009-08-19T10:29:15" />
      <CallingProcess Id="5196" />
    </responses:SendMail>

    日付  2009/08/19 10:29:15
    ログ  データベース メール (データベース メール ログ)

    ログ ID  81
    プロセス ID  5196
    最終更新日  2009/08/19 10:29:15
    最終更新者  NT AUTHORITY\SYSTEM

    メッセージ
    1) Exception Information
    ===================
    Exception Type: System.Data.SqlClient.SqlException
    Errors: System.Data.SqlClient.SqlErrorCollection
    Class: 16
    LineNumber: 1
    Number: 6602
    Procedure: sp_xml_preparedocument
    Server: SV-SYSTEM01
    State: 2
    Source: .Net SqlClient Data Provider
    ErrorCode: -2146232060
    Message: エラーの説明は 'テキストの内容に無効な文字が見つかりました。' です。
    行番号 4、XML テキスト "    <Failure Message="" 付近で、XML 解析エラー 0xc00ce508 が発生しました。
    Data: System.Collections.ListDictionaryInternal
    TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean)
    HelpLink: NULL

    StackTrace Information
    ===================
       場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
       場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
       場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
       場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
       場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
       場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
       場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
       場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       場所 Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.DataAccessAdapter.PostResponse(Response r, Guid convHandle)
       場所 Microsoft.SqlServer.Management.SqlIMail.IMailProcess.ThreadCallBack.PostResponseIfNeeded(MailInfo mi, Response r)
       場所 Microsoft.SqlServer.Management.SqlIMail.IMailProcess.ThreadCallBack.MailOperation(Object o)

    日付  2009/08/19 10:29:15
    ログ  データベース メール (データベース メール ログ)

    ログ ID  82
    最終更新日  2009/08/19 10:29:15
    最終更新者  sa

    メッセージ
    Invalid XML message format received on the ExternalMailQueue. conversation_handle: 6459B2B4-5F8C-DE11-B334-00145EEDA298.  message_type_name: {//www.microsoft.com/databasemail/messages}SendMailStatus.  message body: <?xml version="1.0" encoding="utf-8"?>
    <responses:SendMail xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.microsoft.com/databasemail/responses ResponseTypes.xsd" xmlns:responses="http://schemas.microsoft.com/databasemail/responses">
      <Information>
        <Failure Message="メール サーバー エラーにより、メールを受信者に送信できませんでした。 (アカウント 3 (2009-08-19T10:29:15) を使用してメールを送信しています。例外メッセージ: メール サーバーにメールを送信できません。 (指定された文字列は、電子メール アドレスに必要な形式ではありません。)&#xD;&#xA;)" />
      </Information>
      <MailItemId Id="58" />
      <SentStatus Status="3" />
      <SentAccountId Id="0" />
      <SentDate Date="2009-08-19T10:29:15" />
      <CallingProcess Id="5196" />
    </responses:SendMail>

     

    2009年8月19日 2:19

回答

  • こんにちは、nagino です。

    データベースメールの環境を用意していないので未確認ですが、少々気になることがあります。
    エラーメッセージ中に「&#xD;&#xA;」が含まれていますが、改行コードをエンコードしたように見受けられます。
    何らかの理由で、宛先か送信元のメールアドレスが空、ないしは改行コードが含まれてしまっているのでは無いでしょうか。

    ためしに、以下にあるビューからエラーになったメールのログを探し、宛先や送信元のメールアドレスに改行コードが含まれていないか、あるいは空になっていないか確認してはいかがでしょうか。
    SQL Server Managiment Studio で SELECT する際に、該当の列を varbinary 型に CONVERT すると、改行コードが「0D0A」となりますので、目視で確認できます。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 菊地俊介 2009年9月8日 9:19
    2009年8月21日 1:13
  • こんにちは、nagino です。

    なるほど、SP2 未適用の環境でしたか。
    テスト送信は問題ないのに、実際の送信はエラーになる不具合は、確かに SP2 で直っていますね。

    もともとの修正プログラムや関連情報はこちら。

    SP2 に関する情報はこちらですが、「詳細」を探すと(ページ内を検索すると早いです)上記の 928789 が含まれていますね。

    他に原因となるものは思いつきませんし、過去の事例と状況がまったく一致しているようですので、928789 の事例だと考えてよろしいかと思います。

    過去に同一事例があってその修正パッチが出ているので、ここはやはり SP2 (あるいは修正プログラム) の適用を検討されたほうが宜しいかと思います。
    本ケースですと、仮に有償サポートに依頼しても「まずは適用して確認してください」といった回答になってしまうと思います。

    ・・・実際はなかなか難しいのですけれどもね。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 菊地俊介 2009年9月8日 9:19
    2009年8月25日 13:30

すべての返信

  • こんにちは、nagino です。

    データベースメールの環境を用意していないので未確認ですが、少々気になることがあります。
    エラーメッセージ中に「&#xD;&#xA;」が含まれていますが、改行コードをエンコードしたように見受けられます。
    何らかの理由で、宛先か送信元のメールアドレスが空、ないしは改行コードが含まれてしまっているのでは無いでしょうか。

    ためしに、以下にあるビューからエラーになったメールのログを探し、宛先や送信元のメールアドレスに改行コードが含まれていないか、あるいは空になっていないか確認してはいかがでしょうか。
    SQL Server Managiment Studio で SELECT する際に、該当の列を varbinary 型に CONVERT すると、改行コードが「0D0A」となりますので、目視で確認できます。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 菊地俊介 2009年9月8日 9:19
    2009年8月21日 1:13
  • ご連絡ありがとうございます。
    上記確認したところ、sent_account_idのフィールドがNULLでした。
    (アカウントは正しく登録しております。)

    他サイトにてサービスパックが適用されていないのではないかというご回答いただき、
    SP2適用済の別環境で確認したところ、その環境では正常送信されました。
    (ご指摘いただいたとおり、現象発生環境にはSPが適用されていませんでした)

    現象が発生している環境へのSP適用が困難であるため、SPの適用有無に起因する
    現象かどうか断定できない状況ですが、もしその他原因にてsent_account_idに
    値がセットされない原因など分かりましたらご教示いただけましたら幸いです。


    以上、よろしくお願い申し上げます。

    2009年8月25日 10:06
  • こんにちは、nagino です。

    なるほど、SP2 未適用の環境でしたか。
    テスト送信は問題ないのに、実際の送信はエラーになる不具合は、確かに SP2 で直っていますね。

    もともとの修正プログラムや関連情報はこちら。

    SP2 に関する情報はこちらですが、「詳細」を探すと(ページ内を検索すると早いです)上記の 928789 が含まれていますね。

    他に原因となるものは思いつきませんし、過去の事例と状況がまったく一致しているようですので、928789 の事例だと考えてよろしいかと思います。

    過去に同一事例があってその修正パッチが出ているので、ここはやはり SP2 (あるいは修正プログラム) の適用を検討されたほうが宜しいかと思います。
    本ケースですと、仮に有償サポートに依頼しても「まずは適用して確認してください」といった回答になってしまうと思います。

    ・・・実際はなかなか難しいのですけれどもね。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 菊地俊介 2009年9月8日 9:19
    2009年8月25日 13:30
  • 皆様、こんにちは。

    naginoさん、いつも詳しい回答ありがとうございます。

    rm2005さん、はじめまして。フォーラムのご利用ありがとうございます。
    有用な情報と思われたため、naginoさんの回答へ回答マークをつけさせていただきました。

    今更ながら、私もサービスパックで修正されている内容だと思いましたので、なるべく適用をご検討ください。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2009年9月8日 9:23