SQL Server 存储过程发送电子邮件

8

这是我第一次尝试编写一个发送电子邮件的存储过程。在执行时,我遇到了以下错误:

Msg 102, Level 15, State 1, Procedure EmailTodaysErrors, Line 14
Incorrect syntax near '@MailServer'.
Msg 137, Level 15, State 2, Procedure EmailTodaysErrors, Line 26
Must declare the scalar variable "@mailserver".
Msg 137, Level 15, State 2, Procedure EmailTodaysErrors, Line 33
Must declare the scalar variable "@Body".

我正在使用的代码导致了这个问题:

我正在使用的代码是:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE EmailTodaysErrors 
@SenderName varchar(100),
@SenderAddress varchar(100),
@RecipientName varchar(100),
@RecipientAddress varchar(100),
@Subject varchar(200),
@Body varchar(8000)
@MailServer varchar(100) = 'localhost'
AS
SET NOCOUNT ON;
declare @oMail int --Object reference
declare @resultcode int
EXEC @resultcode = sp_OACreate 'CDONTS.NewMail', @oMail OUT

if @resultcode = 0
BEGIN
EXEC @resultcode = sp_OASetProperty @oMail, 'RemoteHost',  @mailserver
EXEC @resultcode = sp_OASetProperty @oMail, 'FromName', @SenderName
EXEC @resultcode = sp_OASetProperty @oMail, 'FromAddress',  @SenderAddress
EXEC @resultcode = sp_OASetProperty @oMail, 'From', @SenderAddress
EXEC @resultcode = sp_OASetProperty @oMail, 'To', @RecipientAddress
EXEC @resultcode = sp_OASetProperty @oMail, 'Subject', @Subject
EXEC @resultcode = sp_OASetProperty @oMail, 'Body', @Body
EXEC @resultcode = sp_OAMethod @oMail, 'Send', NULL
EXEC sp_OADestroy @oMail
END

set nocount off
GO

这是为了课程吗?这个过程是次优的。 - 3Dave
4个回答

13

你漏掉了在@body一行后面添加逗号,这导致了你的声明出现了问题。

在这里添加逗号:

@Body varchar(8000), -- HERE
@MailServer varchar(100) = 'localhost'

12
不要使用sp_oa_family发送邮件,SQL Server已经有内置的解决方案:Database Mail。只需在服务器上正确配置Database Mail,然后调用sp_send_dbmail即可。

我也尝试了这种方法,但当它说配置文件名称无效时,我卡住了。 - B Woods
1
正如我所说,首先要配置数据库邮件:http://technet.microsoft.com/en-us/library/ms175951.aspx - Remus Rusanu

2
您的参数中缺少一个逗号:
@Body varchar(8000), ---- HERE
@MailServer varchar(100) = 'localhost'

0

来自我的博客文章,使用 T-SQL 脚本创建数据库邮件配置,发布于2018年2月5日:

--Sending Test Mail
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'TestProfile', 
@recipients = 'To Email Here', 
@copy_recipients ='CC Email Here',             --For CC Email if exists
@blind_copy_recipients= 'BCC Email Here',      --For BCC Email if exists
@subject = 'Mail Subject Here', 
@body = 'Mail Body Here',
@body_format='HTML',
@importance ='HIGH',
@file_attachments='C:\Test.pdf';               --For Attachments if exists

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接