• 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 = 'yadnfku@foxmail.com', --收件名称
        @Subject = 'pcbren主题',         --主题
        @Body = 'pcbren内容',            --内容
        @MailState = @MailState OUT     --状态
        
    SELECT @MailState
  • 相关阅读:
    python-批量执行.py文件
    python-写入excel(xlswriter)
    python-读取excel(xlrd)
    python接口自动化测试-requests.post()
    python-读取配置文件
    python-mysql
    python-Redis的List操作
    python-Redis的String、Hash操作
    Elasitcsearch High Level Rest Client使用示例
    前端并发优化技巧
  • 原文地址:https://www.cnblogs.com/pcbren/p/10159430.html
Copyright © 2020-2023  润新知