zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    爬取豆瓣影评1寻找json格式的电影信息
    打开SSM项目后打开tomcat找不到路径问题
    爬取豆瓣影评2完整代码
    打开SSM项目无法启动问题补充
    使用python制作国民经济行业国标的json格式
    MVC前端AJAX向后端传递数据——正常传值
    国民经济行业维度清洗,将数据清洗成标准的四级信息。
    使用vue的element组件网址
    Mybais中sql语句的抽取
    mybatis找不到mapper_Springboot整合Mybatis
  • 原文地址:https://www.cnblogs.com/pcbren/p/10159430.html
Copyright © 2011-2022 走看看