PCB SQL SERVER 发送邮件(异步改同步)

Posted pcbren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCB SQL SERVER 发送邮件(异步改同步)相关的知识,希望对你有一定的参考价值。

采用SQL SERVER发送邮件是队列方式(异步)发送邮件,所以在我们执行发送邮件后,无法立即获取到邮件是否发送成功了,而在PCB行业实际应用中是需要立即获取发送邮件是否成功的状态来决定下一步逻辑该如何处理的,为了满足此要求我们需重新封装一下发送邮件的存储过程,让发送邮件实现同步发送邮件,方法如下:

一.同步发送邮件方法

-- =============================================
--发送邮件
-- =============================================
CREATE   PROCEDURE [dbo].[P_SendEmail]
@MailConfigName VARCHAR(100),         --发送人配置
@ToMail VARCHAR(500)=NULL,            --发送人邮箱名
@CCMail VARCHAR(500)=NULL,            --抄送人邮箱名
@Subject VARCHAR(500)=NULL,           --主题
@Body VARCHAR(max)=NULL,              --邮件内容
@Body_format VARCHAR(10) = TEXT,    --内容格式 html或TEXT
@FilePath VARCHAR(500) = NULL,        --附件路径
@MailState INT  OUTPUT                --1成功  0失败
AS
BEGIN
    DECLARE @Mailitem_Id  INT 
    SET @MailState = 0
    
    exec msdb.dbo.sp_send_dbmail
    @profile_name = @MailConfigName, --配置名称
    @recipients = @ToMail, --收件名称
    @copy_recipients = @CCMail,--抄送人
    @body_format = @Body_format, --内容格式
    @subject = @Subject,   --主题
    @body = @Body,         --内容
    @file_attachments = @FilePath, --附件
    @mailitem_id = @Mailitem_Id OUT  --EmailID号
    
    WHILE (EXISTS(SELECT  TOP 1 1 FROM  msdb.dbo.sysmail_unsentitems WHERE mailitem_id = @Mailitem_Id)) --看未发送的消息
    BEGIN
       waitfor delay 00:00:01  --延时1S
    END
    
    IF (EXISTS(SELECT  TOP 1 1 FROM  msdb.dbo.sysmail_sentitems WHERE mailitem_id = @Mailitem_Id) --查看已发送的消息
        AND NOT EXISTS(SELECT  TOP 1 1 FROM  msdb.dbo.sysmail_faileditems WHERE mailitem_id = @Mailitem_Id))  -- 失败状态的消息
    BEGIN
        SET @MailState = 1
    END        
END

二.调用发送邮件

DECLARE @MailState INT 
EXEC [dbo].[P_SendEmail] 
    @MailConfigName = pcbren邮箱,   --配置名称
    @ToMail = [email protected], --收件名称
    @Subject = pcbren主题,         --主题
    @Body = pcbren内容,            --内容
    @MailState = @MailState OUT     --状态
    
SELECT @MailState

 

以上是关于PCB SQL SERVER 发送邮件(异步改同步)的主要内容,如果未能解决你的问题,请参考以下文章

C#用网易邮箱发送邮件(同步异步)

Flask入门邮件同步与异步发送

PHP异步请求

用django发送异步邮件

SpringBoot异步定时邮件任务

如何从 SQL Server 发送电子邮件?