采用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

PCB SQL SERVER 发送邮件(异步改同步)的更多相关文章

  1. jQuery Ajax(异步改同步)

    在实际使用中,我们经常会用的Ajax(异步加载,在不刷新整个网页的前提下对网页部分内容进行更新) 使用时,偶尔会遇上需要从一个接口中得到一个数组和数据对应的id,在另一个接口上再得到数据,最初写法如下 ...

  2. PCB SQL SERVER 邮箱配置与发邮件

    一.开启SQL SERVER发邮件功能 --开启发邮件功能 reconfigure with override go reconfigure with override go 二.邮箱配置 1.代码创 ...

  3. PCB SQL SERVER 正则应用实例

    我们用过SQL SERVER的都知道,SQL SERVER它本身是不自带正则表达式的,因为没有,所以基本都没用过啊, 但我们在C#中对文本匹配用正则的方式处理非常好用,省得你写一堆代码实现匹配,多简洁 ...

  4. 【转】SQL SERVER 主体,已同步

    转自郭大侠博客:  https://www.cnblogs.com/gered/p/10601202.html 目录 SQL SERVER 基于数据库镜像的主从同步... 1 1.概念... 2 1. ...

  5. sql server 国内外 2个同步 ,加一个表.加入同步种

    国内 和国外sql server 订阅 ,数据同步. 因为表是刚开始就弄好的. 那么如果国内加一个表.国外没法同步过去 步骤:1.国外也建一个一抹一样的表 步骤:2.把国内的数据导入到国外 步骤:3. ...

  6. 使用SQL Server 发送邮件

    在很多数据分析和集成的场景下,我们需要了解数据库中关键的脚本或者job的执行情况.这个时候邮件提醒是一种比较不错的通知方式.本文从零开始,一步一步的介绍如何使用SQL Server来发送邮件. 环境: ...

  7. sql server作业实现数据同步

    作业介绍  SQL SERVER的作业是一系列由SQL SERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Acti ...

  8. 使用SQL Server发送邮件时遇到的诡异事件

    最近公司要实现一个邮件群发的功能,因此设计时就考虑用SQL Server的邮件发送功能直接推送邮件算了. 可是在实现的过程中,邮件内容中有一个表格的内容要展现,于是就编排了一个表格来实现. 具体实现如 ...

  9. SQL Server 用链接服务器 同步SqlServer与MySQL

    =======================================================================================SQL SERVER链接S ...

随机推荐

  1. struts2源码下载链接

    http://blog.csdn.net/qq_qun_247286682/article/details/6975298

  2. enote笔记语言(3)(ver0.3)

    章节:enote笔记语言(3)     what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取 ...

  3. BZOJ 5028 小Z的加油店

    [题解] 本题要求求出区间内的各个元素通过加减之后能够得出的最小的数,那么根据裴蜀定理可知答案就是区间内各个元素的最大公约数. 那么本题题意化简成了维护一个序列,支持区间加上某个数以及查询区间元素的最 ...

  4. type="timestamp"与type="date"区别

    type="timestamp"-----数据库中保存的时间为年月日时分秒 与type="date"---------数据库中保存的时间为年月日

  5. 这可能是vue-cli最全的解析了……

    题言: 相信很多vue新手,都像我一样,只是知道可以用vue-cli直接生成一个vue项目的架构,并不明白,他究竟是怎么运行的,现在我们一起来研究一下... 一.安装vue-cli,相信你既然会用到v ...

  6. mongodb local数据库的空间初始化好大啊!

    新建立了一个replicat set,登录到primary里,show dbs一看吓一跳 local数据库竟然占用了80多G的空间 [root@wxlab31 bin]# ./mongo --host ...

  7. js cookies all in one

    js cookies all in one cookies // http://10.1.5.202/auto-deploy-platform/publish/index.html // 非当前 UR ...

  8. 进入DRF和ANGULAR的整合学习,这三篇入门内容一定要学好的

    看来,DJANGO的模板功能是无法用啦, 学着用ANGLUAR的SERVICE,MODULE,CONTROLLER啦... http://engineroom.trackmaven.com/blog/ ...

  9. 分享一个灰常好的 dapper 扩展插件: Rainbow

    dapper 是一个效率非常高的orm  框架 ,效率要远远大于 我们大微软的EF .    它只有一个类文件,非常之小.(在 EF 5.0 后 微软已经做了 改进) ps; 由于之前我也没测试过,只 ...

  10. Mabatis错误--Parameter index out of range

    昨天遇到一个错误,之前也遇到过,但是之前遇到很快就解决了,昨天遇到这个错误当时看了大概10来分钟,还是没搞好,今天才来搞好了. 错误信息如下 08:34:43,302 DEBUG getTeacher ...