首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL Server发送%n封带有预览的HTML电子邮件

使用SQL Server发送%n封带有预览的HTML电子邮件
EN

Stack Overflow用户
提问于 2019-01-16 22:52:44
回答 1查看 111关注 0票数 0

我已经编写了一封HTML电子邮件,通过SQL Server发送出去。它目前正在工作,但它会自动发送出去。我想知道是否有一种方法可以让我在发送电子邮件之前在默认客户端中查看它?

代码语言:javascript
复制
EXEC msdb.dbo.sp_send_dbmail @recipients = 'test@email.com'
, @subject = 'Action Item Test', @body = @body, @body_format='HTML', @reply_to = 'noreply@myserver.com'
EN

回答 1

Stack Overflow用户

发布于 2019-01-17 00:39:15

我之前也有同样的要求,我把电子邮件放在桌面上,并向审阅者发送了一份通知。

这不是我的领域,但如果您有电子邮件安全服务,您可以将您的电子邮件(在msdb配置文件中使用)作为垃圾邮件,您可以审查它并拒绝/释放,而不需要任何其他额外的过程。我用过mimecast。它会在服务器上保留所有可疑电子邮件,直到您释放它们。

在我看来,如果你手动做它是不可管理的,但如果你仍然想做它,我有一些脚本给你:

基本上:创建一个表,并将所有电子邮件详细信息放入您想要查看的表中。它将向您发送通知。如果您愿意,请执行最新的过程来释放电子邮件。

代码语言:javascript
复制
--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;
*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54219676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档