Хранимая процедура SQL Server для отправки электронной почты - PullRequest
8 голосов
/ 18 августа 2011

Это моя первая попытка написать хранимую процедуру, которая отправляет кому-то электронное письмо. При попытке выполнить я получаю следующие ошибки:

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

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 4 ]

11 голосов
/ 18 августа 2011

Вы пропускаете запятую после строки @body, которая отбрасывает ваши объявления.

Добавьте это здесь:

@Body varchar(8000), -- HERE
@MailServer varchar(100) = 'localhost'
11 голосов
/ 18 августа 2011

Не используйте sp_oa_family для отправки почты, уже есть встроенное решение с SQL Server: База данных Mail . Просто правильно сконфигурируйте Database Mail на своем сервере, а затем позвоните sp_send_dbmail.

2 голосов
/ 18 августа 2011

В ваших параметрах отсутствует запятая:

@Body varchar(8000), ---- HERE
@MailServer varchar(100) = 'localhost'
0 голосов
/ 25 мая 2018

SQL-код сервера для отправки почты через SQL DB Mail

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

Подробнее о настройке почты БД см. По ссылке

http://www.freshcodehub.com/Article/43/create-a-database-mail-configuration-using-t-sql-script

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...