Отправка электронной почты в формате HTML с помощью SQL Server с предварительным просмотром

Второй пример - ленивая инициализация. Первая - более простая инициализация, они по существу одинаковы.

0
задан jarlh 16 January 2019 в 14:56
поделиться

1 ответ

У меня был такой же запрос некоторое время назад, и я положил электронные письма в таблицу и отправил уведомление рецензенту.

Это не моя область, но если у вас есть службы безопасности электронной почты, вы можете поместить свою электронную почту (которую вы используете в профиле 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' /*!!Put 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
ответ дан Zeki Gumus 16 January 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: