Я пытаюсь отправить вложение, используя sp_send_dbmail в SQL Server 2005. Сначала я написал хранимую процедуру CLR, которая сохраняет некоторое содержимое в файл на сервере, затем вызывает хранимую процедуру, указанную ниже, а затем удаляет файлсоздано.Я вызываю эту хранимую процедуру CLR из моего приложения ASP.NET 2010.Локально эта функция работает как из SQL Management Studio, так и из моего приложения.
Вот основные вещи из моего CLR sproc:
public static void SendExportAttachment(string email, string fileContents, string mailProfile, string temporaryFileName)
{
// First save the file to the file system
StreamWriter sw = new StreamWriter(temporaryFileName);
sw.Write(fileContents);
sw.Close();
sw = null;
// Execute the SendExportResultEmail (see below)
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand("SendExportResultEmail", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@ProfileName", mailProfile));
command.Parameters.Add(new SqlParameter("@Recipients", email));
command.Parameters.Add(new SqlParameter("@TemporaryFileName", temporaryFileName));
command.ExecuteNonQuery();
}
// Remove the file from the file system
File.Delete(temporaryFileName);
}
Вот хранимая процедура, которая отправляет электронное письмо:
CREATE PROCEDURE [dbo].[SendExportResultEmail]
@ProfileName NVARCHAR(50)
,@Recipients NVARCHAR(100)
,@TemporaryFileName NVARCHAR(2000)
AS
SET NOCOUNT ON
DECLARE @ErrorID INT
DECLARE @RtnCode INT
DECLARE @Body VARCHAR(8000)
DECLARE @Subject VARCHAR(1000)
DECLARE @mailitem_id INT
SET @Body = 'Some Body'
SET @Subject = 'Some title'
EXEC @RtnCode = msdb.dbo.sp_send_dbmail
@profile_name = @ProfileName
,@recipients = @Recipients
,@body = @Body
,@subject = @Subject
,@body_format = 'TEXT'
,@file_attachments = @TemporaryFileName
,@mailitem_id = @mailitem_id OUTPUT
SET @ErrorID = @@ERROR
IF @RtnCode <> 0 BEGIN
SELECT @ErrorID
END
После успешного тестирования этого кода как части моего приложения локально я переместил его на наш тестовый сервер.На тестовом сервере он успешно отправляет почту, когда я выполняю sproc CLR из Management Studio.Однако, когда я выполняю его из своего приложения ASP.NET, мой код возврата из msdb.dbo.sp_send_dbmail равен 1, а @@ ERROR равен 0 - я не получаю никаких других ошибок.Я знаю, что в SQL 2008 я, вероятно, получу более полезный код @@ ERROR, по крайней мере, в соответствии с документацией 2008 года.
У кого-нибудь есть предложения?Как вы думаете, что я могу делать не так?
Большое спасибо заранее, Джим