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
作者:pcbren 微信号:yadnfku QQ号: 254566449
博客地址:https://www.cnblogs.com/pcbren/
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。
如果大家感觉我的博文对大家有帮助,请推荐支持一把。