Отправка электронной почты в формате HTML с помощью SQL Server с предварительным просмотром - PullRequest
0 голосов
/ 16 января 2019

Я закодировал письмо в формате 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'

1 Ответ

0 голосов
/ 16 января 2019

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

Это не моя область, но если у вас есть службы безопасности электронной почты, вы можете поместить свою электронную почту (которую вы используете в профиле 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;
*/
...