采用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. H5图片压缩与上传
  2. css定位的简单总结
  3. (转)C语言union(联合体 共用体)
  4. hdu 3658 How many words
  5. replicate-do-db参数引起的MySQL复制错误及处理办法
  6. Kotlin 语言高级安卓开发入门
  7. 几种sap增强的查找方法
  8. IIS 10.0 无法安装 URL rewrite重写模块 2.0
  9. 使用gulp创建ajax模拟请求
  10. IS_EER分析
  11. php.ini 文件中配置的意义注释
  12. 被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾
  13. html5 javascript 事件练习1
  14. x1c 2018 静音调教
  15. xdoj-1211 (尧老师要教孩子解方程) :多项式除法
  16. spring配置Bean
  17. hdu 3910 Liang Guo Sha
  18. 1. Ubuntu下MongoDB的安装和使用
  19. logstash笔记(一)——redis&es
  20. 【转】多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(上)

热门文章

  1. Python之TCP编程
  2. pipreqs(找当前项目依赖的包)
  3. python爬虫22 | 以后我再讲python「模拟登录」我就是狗
  4. POJ 3468 A Simple Problem with Integers(线段树水题)
  5. 【03】WAMPServer集成环境下载和安装
  6. [luoguP1901] 发射站(单调栈)
  7. HBase shell的常用命令(CRUD)
  8. java 远程调用
  9. SQL Server 性能优化实战系列(文章索引) : 桦仔
  10. 条款45: 弄清C++在幕后为你所写、所调用的函数