我已经编写了一封HTML电子邮件,通过SQL Server发送出去。它目前正在工作,但它会自动发送出去。我想知道是否有一种方法可以让我在发送电子邮件之前在默认客户端中查看它?
EXEC msdb.dbo.sp_send_dbmail @recipients = 'test@email.com'
, @subject = 'Action Item Test', @body = @body, @body_format='HTML', @reply_to = 'noreply@myserver.com'发布于 2019-01-17 00:39:15
我之前也有同样的要求,我把电子邮件放在桌面上,并向审阅者发送了一份通知。
这不是我的领域,但如果您有电子邮件安全服务,您可以将您的电子邮件(在msdb配置文件中使用)作为垃圾邮件,您可以审查它并拒绝/释放,而不需要任何其他额外的过程。我用过mimecast。它会在服务器上保留所有可疑电子邮件,直到您释放它们。
在我看来,如果你手动做它是不可管理的,但如果你仍然想做它,我有一些脚本给你:
基本上:创建一个表,并将所有电子邮件详细信息放入您想要查看的表中。它将向您发送通知。如果您愿意,请执行最新的过程来释放电子邮件。
--Create Reviews table
IF OBJECT_ID('EMailReviews') IS NOT NULL
DROP TABLE EMailReviews;
CREATE TABLE EMailReviews
(
Id INT NOT NULL IDENTITY(1,1)
--ProfileName?
,Recipients VARCHAR(MAX)
--,CopyRecipients VARCHAR(MAX)
,EMailSubject NVARCHAR(255)
,Body NVARCHAR(MAX)
,BodyFormat VARCHAR(20)
,ReplyTo VARCHAR(MAX)
,DateReceived DATETIME NOT NULL DEFAULT(SYSDATETIME())
,DateReviewed DATETIME
,Processed BIT NOT NULL DEFAULT(0)
);
--Create Procedure to insert the e-mail to review table and send notification to you.
IF OBJECT_ID('P_PutEMailToReviewQueue') IS NOT NULL
DROP PROCEDURE P_PutEMailToReviewQueue;
GO
CREATE PROCEDURE P_PutEMailToReviewQueue
@Recipients VARCHAR(MAX)
--,@CopyRecipients VARCHAR(MAX)
,@EMailSubject NVARCHAR(255)
,@Body NVARCHAR(MAX)
,@BodyFormat VARCHAR(20)
,@ReplyTo VARCHAR(MAX)
AS
DECLARE @Reviewer VARCHAR(100)='revieweremail@email.com' /*your e-mail to review*/
DECLARE @ReviewerEMailSubject NVARCHAR(MAX)=''
DECLARE @ReviewerEMailBody NVARCHAR(MAX)=''
--Put validations if necessary
INSERT INTO EMailReviews(Recipients,EMailSubject,Body,BodyFormat,ReplyTo)
VALUES (@Recipients,@EMailSubject,@Body,@BodyFormat,@ReplyTo)
DECLARE @Id VARCHAR(100)=CAST(SCOPE_IDENTITY()AS VARCHAR)
SET @ReviewerEMailBody = 'E-Mail Information below:'
+'<br>'
+'ID='+@Id
+'<br>'
+'Subject:'+ISNULL(@EMailSubject,'')
+'<br>'
+'Body:'+ISNULL(@Body,'')
+'<br>'
+'Recipients:'+ISNULL(@Recipients,'')
+'<br>'
+'ReplyTo:'+ISNULL(@ReplyTo,'')
+'<br>'
+'<br>'
+'<br>'
+'<br>'
+'After your review if you want to release the e-mail you need to run following script:'
+'<br>'
+'P_ReleaseEmail @Id ='+@Id
SET @ReviewerEMailSubject = 'Number '+@Id+' e-mail has been recieved. Review required!'
EXEC msdb.dbo.sp_send_dbmail
@recipients = @Reviewer
, @subject = @ReviewerEMailSubject
, @body = @ReviewerEMailBody
, @body_format ='HTML'
GO
/*
P_PutEMailToReviewQueue
@Recipients ='test@test.com'
,@EMailSubject ='Action Item Test'
,@Body ='BLA BLA'
,@BodyFormat ='HTML'
,@ReplyTo ='noreply@test.com'
*/
--Create procedure to release the e-mail.
IF OBJECT_ID('P_ReleaseEmail') IS NOT NULL
DROP PROCEDURE P_ReleaseEmail;
GO
CREATE PROCEDURE P_ReleaseEmail
@Id INT
AS
DECLARE
@Recipients VARCHAR(MAX)
--,@CopyRecipients VARCHAR(MAX)
,@EMailSubject NVARCHAR(255)
,@Body NVARCHAR(MAX)
,@BodyFormat VARCHAR(20)
,@ReplyTo VARCHAR(MAX)
SELECT @Recipients=Recipients
,@EMailSubject=EMailSubject
,@Body=Body
,@BodyFormat=BodyFormat
,@ReplyTo=ReplyTo
FROM EMailReviews
WHERE Id=@Id
EXEC msdb.dbo.sp_send_dbmail
@recipients = @Recipients
, @subject = @EMailSubject
, @body = @Body
, @body_format = @BodyFormat
, @reply_to = @ReplyTo
UPDATE EMailReviews SET DateReviewed=GETDATE()
,Processed=1
WHERE Id=@Id
GO
/*
P_ReleaseEmail
@Id =1;
select * from EMailReviews;
*/https://stackoverflow.com/questions/54219676
复制相似问题