SQL Server+QQ邮箱使用触发器发送邮件(照搬这两招即可实现)

1.QQ邮箱配置

进入QQ邮箱点击设置

点击账户TAB

SQL Server+QQ邮箱使用触发器发送邮件(照搬这两招即可实现)_第1张图片

开启 POP3/SMTP服务和IMAP/SMTP服务

*开启服务后会生产授权码的,这个授权码要记下来,下面会用到

SQL Server+QQ邮箱使用触发器发送邮件(照搬这两招即可实现)_第2张图片

2.SQL配置

  step1  :启用sql server 邮件的功能

-- 启用 sql server 邮件的功能

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE;
GO

  step2:查看数据库邮件功能是否开启

-- 查询数据库的配置信息
--SELECT  * FROM    sys.configurations;
-- 查看数据库邮件功能是否开启,value 值为1表示已开启,0为未开启
SELECT  name ,
        value ,
        description ,
        is_dynamic ,
        is_advanced
FROM    sys.configurations
WHERE   name LIKE '%mail%';

 step 3:创建邮件账户

--创建邮件账户
IF exists(SELECT * FROM msdb..sysmail_account WHERE NAME='ITEPI_EOMS') --判断邮件账户名为 ITEPI_EOMS 的账户是否存在
BEGIN
    EXEC msdb..sysmail_delete_account_sp @account_name='ITEPI_EOMS' -- 删除邮件账户名为 ITEPI_EOMS 的账户
END
ESEC msdb..sysmail_add_account_sp    --创建邮件账户
        @account_name = 'ITEPI_EOMS'      -- 邮件帐户名称
       ,@email_address = '这里填你刚才配置的邮箱地址'      -- 发件人邮件地址  
       ,@display_name = 'ITEPI_EOMS'       -- 发件人姓名  
       ,@replyto_address = null        -- 回复地址
       ,@description = null            -- 邮件账户描述
       ,@mailserver_name = 'smtp.qq.com'    -- 邮件服务器地址 
       ,@mailserver_type = 'SMTP'        -- 邮件协议
       ,@port = 587                 -- 邮件服务器端口(或是456)  
       ,@username = '这里填你刚才配置的邮箱地址'        -- 用户名  
       ,@password = '这里填刚才让你记下来的授权码'      -- 密码(第三方用QQ密码是登录不了的)  
       ,@use_default_credentials = 0    -- 是否使用默认凭证,0为否,1为是
       ,@enable_ssl = 1        -- 是否启用 ssl 加密,0为否,1为是(QQ邮箱这里必须为 1)
       ,@account_id = null  -- 输出参数,返回创建的邮件账户的ID

 step 4:生成邮件配置文件

--生成邮件配置文件
if exists(SELECT * FROM msdb..sysmail_profile where NAME = N'SendEmailProfile') --判断名为 SendEmailProfile 的邮件配置文件是否存在
begin  
    exec msdb..sysmail_delete_profile_sp @profile_name = 'SendEmailProfile'  --删除名为 SendEmailProfile 的邮件配置文件
end

exec msdb..sysmail_add_profile_sp    -- 添加邮件配置文件
     @profile_name = 'SendEmailProfile',   -- 配置文件名称    
     @description = '数据库发送邮件配置文件',    -- 配置文件描述      
     @profile_id = NULL        -- 输出参数,返回创建的邮件配置文件的ID

 step 5:邮件账户和邮件配置文件相关联

-- 邮件账户和邮件配置文件相关联  
exec msdb..sysmail_add_profileaccount_sp   
     @profile_name = 'SendEmailProfile',   -- 邮件配置文件名称     
     @account_name = 'ITEPI_EOMS',    -- 邮件账户名称       
     @sequence_number = 1    -- account 在 profile 中的顺序,一个配置文件可以有多个不同的邮件账户

 step 6:测试数据库是否配置成功

SQL Server+QQ邮箱使用触发器发送邮件(照搬这两招即可实现)_第3张图片SQL Server+QQ邮箱使用触发器发送邮件(照搬这两招即可实现)_第4张图片

 

step 7:创建触发器调用发送邮件功能

--删除触发器
--Drop Trigger UserAdvise_Send_Mail
--创建一个 insert 类型的 after 触发器(用户建议)
create trigger UserAdvise_Send_Mail
on UserAdvise
after insert
as
    declare @UserName    varchar(20)
    declare @AdviseContent   varchar(200)
	declare @Content varchar(300)
    declare @CreateTime datetime
    declare @UserMail varchar(25)
	select @Content=AdviseContent,@UserMail=UserMail from inserted
    set @AdviseContent='表哥,您收到一封来自一派科技用户建议邮件,内容如下:'+char(10)+@Content
					  +char(10)+'该用户联系邮箱为:'+@UserMail
        
    exec msdb.dbo.sp_send_dbmail @profile_name='SendEmailProfile',    -- 邮件配置文件名称
                                    @recipients='你想发给哪个邮箱,这里就填哪个邮箱地址',        -- 邮件发送地址
                                    @subject='用户建议',        -- 邮件标题
                                    @body=@AdviseContent,    --邮件内容
                                    @body_format='text'    -- 邮件内容的类型,text 为文本,还可以设置为 html 

go

 SQL脚本测试触发器能否成功发出邮件

 -- 新添加一条数据,用以触发 insert 触发器
--delete UserAdvise
insert into UserAdvise(UserName,AdviseContent,CreateTime,UserMail) 
values('SINCLAIR','测试一下邮件能不能发送出去',GETDATE(),'[email protected]')

查看发送记录及日志脚本 

use msdb
go
--delete sysmail_allitems
select * from sysmail_allitems        -- 邮件发送情况,可以用来查看邮件是否发送成功
--delete sysmail_mailitems
select * from sysmail_mailitems        -- 发送邮件的记录
--delete sysmail_event_log
select * from sysmail_event_log            -- 数据库邮件日志,可以用来查询是否报错

 

你可能感兴趣的:(SQL,技术实现方法)