我也想从我的网络应用程序发送电子邮件,并且在 elmah 中似乎没有允许发送 SQL 存储过程的配置(也不能使用 smtp)。我很擅长通过给定的存储过程对 elmah 表进行日志记录。
这让我假设答案是更改 elmah 安装附带的存储过程,并在其中提供我自己的电子邮件例程。我已经测试了以下 XML 将如何出现在 HTML 电子邮件中。它是一个冠军!
ALTER PROCEDURE [dbo].[ELMAH_LogError]
(
@ErrorId UNIQUEIDENTIFIER,
@Application NVARCHAR(60),
@Host NVARCHAR(30),
@Type NVARCHAR(100),
@Source NVARCHAR(60),
@Message NVARCHAR(500),
@User NVARCHAR(50),
@AllXml NTEXT,
@StatusCode INT,
@TimeUtc DATETIME
)
AS
SET NOCOUNT ON
INSERT
INTO
[ELMAH_Error]
(
[ErrorId],
[Application],
[Host],
[Type],
[Source],
[Message],
[User],
[AllXml],
[StatusCode],
[TimeUtc]
)
VALUES
(
@ErrorId,
@Application,
@Host,
@Type,
@Source,
@Message,
@User,
@AllXml,
@StatusCode,
@TimeUtc
);
DECLARE @TmpSubject VARCHAR(80);
SET @TmpSubject = 'ELMAH ERROR LOG ('+@Application+')';
-- here is the good stuff:
DECLARE @TmpDetail NVARCHAR(MAX);
DECLARE @TmpMessage NVARCHAR(MAX);
DECLARE @xml as xml;
set @xml = (SELECT @AllXML);
select @TmpDetail = (select x.i.value('@webHostHtmlMessage', 'nvarchar(max)') --as HTML
from @xml.nodes('/error') as x(i));
SELECT @TmpMessage = '<p style="color:#000; font-size:12pt; font face:arial">USER '+@User+' encountered the following error at UTC: '+cast(@TimeUtc as varchar(22))+'</p>'+char(10)+@TmpDetail;
-- now we can send the HTML in the body of an HTML formatted SMTP email routine:
exec dbo.spSendHTML @To='support@mycompany.com', @SUBJECT=@TmpSubject, @MESSAGE=@TmpMessage;