Подскажите хороший способ послать email из хранимой процедуры в SQL Server 2000?
В инете нашел несколько способов, кто то советует через MAPI, кто то через SMTP сервис IIS, кто то через актив икс объекты.
Как лучше всего чтобы поменьше траблов иметь?
послать email из хранимой процедуры
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: послать email из хранимой процедуры
shadow7256 wrote:Подскажите хороший способ послать email из хранимой процедуры в SQL Server 2000?
В инете нашел несколько способов, кто то советует через MAPI, кто то через SMTP сервис IIS, кто то через актив икс объекты.
Как лучше всего чтобы поменьше траблов иметь?
Так там вроде каждый метод имеет свои "за" и "против" - выберите что вам подходит:
http://www.sqlteam.com/item.asp?ItemID=5003
Sending email through SQL Server is very cool as well as very handy. However the SQL Mail service provided with SQL Server can be restrictive. SQL Mail uses a MAPI profile on the server, but this ties you to one profile and requires you to have a mail client like Outlook installed on your server.
This doesn't help you much if you want to be able to send from different addresses, or if you are unable to set up a MAPI profile on the server. There is a lot of call for using SQL Mail to use just an SMTP server, unfortunatly we just can't do it.....but there is an alternative.
SQL Server gives us a few stored procedures for calling and using COM Components. With so many SMTP COM objects avaiable for use in ASP pages it makes sense to combine the two.
....
http://www.experts-exchange.com/Databas ... 80734.html
if u only want to send mail from SQL server..
I can advice u a easy way ..
Small dll ( Activex object) that im using...
Powerfull and fast .. and u dont ave to install SMTP or POP or MAPI.
Give the name or ip addr of the mail server and send it..
here is an example usage of it..
CREATE Procedure _SMTPMailSend_(
@Username varchar(100) = ' ',
@Password varchar(100) = ' ',
@SenderName varchar(100) = ' ',
@SenderAddress varchar(100) = ' ',
@RecipientAddress varchar(100) = ' ',
@RecipientName varchar(100) = ' ',
@Subject varchar(200) = ' ',
@Body varchar(8000) = ' ',
@ServerHost varchar(100) = '192.168.0.2',
@qoMail int = 0
)
AS
declare @aa int
set @aa = 1
if @aa = 1
begin
SET nocount on
declare @resultcode int
declare @ErrorText varchar(200)
declare @tmptext varchar(100)
declare @BodyLength int
if @qoMail = 0
begin
EXEC @resultcode = sp_OACreate 'wServer.SendMail', @qoMail OUT
print 'Create Code =' + str(@ResultCode)
if @resultcode = 0
BEGIN
EXEC @resultcode = sp_OAMethod @qoMail, 'BeginMail', NULL
EXEC @resultcode = sp_OASetProperty @qoMail, 'ServerHost', @ServerHost
EXEC @resultcode = sp_OASetProperty @qoMail, 'Username', @Username
EXEC @resultcode = sp_OASetProperty @qoMail, 'Password', @Password
EXEC @resultcode = sp_OASetProperty @qoMail, 'FromName', @SenderName
EXEC @resultcode = sp_OASetProperty @qoMail, 'FromAddress', @SenderAddress
EXEC @resultcode = sp_OASetProperty @qoMail, 'Recipient', @RecipientAddress
EXEC @resultcode = sp_OASetProperty @qoMail, 'RecipientName', @RecipientName
EXEC @resultcode = sp_OASetProperty @qoMail, 'MailSubject', @Subject
EXEC @resultcode = sp_OASetProperty @qoMail, 'MailBody', @Body
EXEC @resultcode = sp_OAMethod @qoMail, 'SendMail', NULL
EXEC @resultcode = sp_OAMethod @qoMail, 'EndMail', NULL
EXEC @resultcode = sp_OAGETProperty @qoMail, 'ErrorText', @ErrorText OUT
print 'Send Code =' + str(@ResultCode,15) + @errorText
EXEC sp_OADestroy @qoMail
END
end
else
begin
EXEC @resultcode = sp_OAMethod @qoMail, 'SendMail', NULL
EXEC @resultcode = sp_OAMethod @qoMail, 'EndMail', NULL
EXEC @resultcode = sp_OAGETProperty @qoMail, 'ErrorText', @ErrorText OUT
print 'Send Code =' + str(@ResultCode,15) + @errorText
EXEC sp_OADestroy @qoMail
end
SET nocount off
end
Сабина
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Подскажите как написать правильно в процедуре следующее:
Я передаю в процедуру параметр (ID пользователя). Мне надо вытащить из базы данных информацию (имя, телефон допустим), создать строку, которая бы содержала параметры и отосласть на email.
Как отсылать я разобрался, но с текстом выборки данных и построения строки проблемы.
Я делаю так вот.
Declare @temp varchar (50)
SELECT @temp = FirstName FROM TABLE WHERE ID = @id
но при такой записи выдается ошибка "Error 141: A SELECT statement that assigns a value to a variable must not be combined with data retrieval operation"
Я передаю в процедуру параметр (ID пользователя). Мне надо вытащить из базы данных информацию (имя, телефон допустим), создать строку, которая бы содержала параметры и отосласть на email.
Как отсылать я разобрался, но с текстом выборки данных и построения строки проблемы.
Я делаю так вот.
Declare @temp varchar (50)
SELECT @temp = FirstName FROM TABLE WHERE ID = @id
но при такой записи выдается ошибка "Error 141: A SELECT statement that assigns a value to a variable must not be combined with data retrieval operation"
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
я понял ошибку свою. Оказывается если в предложении SELECT присвается значение какому то параметру, то надо присваивать значения тогда уже всем параметрам... Сам не понял что написал, но суть в следующем.
У меня НЕ получилось написать вот так вот:
DECLARE @temp varchar (40)
SELECT @temp = Name, Phone, Email FROM TABLE WHERE ID = @id
и ПОЛУЧИЛОСЬ вот так вот:
DECLARE @temp1 varchar (40), @temp2 varchar (20), varchar (30)
SELECT @tem1 = Name, @temp2 = Phone, @temp3 = Email FROM TABLE...
У меня НЕ получилось написать вот так вот:
DECLARE @temp varchar (40)
SELECT @temp = Name, Phone, Email FROM TABLE WHERE ID = @id
и ПОЛУЧИЛОСЬ вот так вот:
DECLARE @temp1 varchar (40), @temp2 varchar (20), varchar (30)
SELECT @tem1 = Name, @temp2 = Phone, @temp3 = Email FROM TABLE...
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
shadow7256 wrote:У меня НЕ получилось написать вот так вот:
DECLARE @temp varchar (40)
SELECT @temp = Name, Phone, Email FROM TABLE WHERE ID = @id
.
Если очень стрингом хочется наверное надо было нечто вроде
SELECT @temp =(Name + ' ' + Phone + ' ' + Email) FROM TABLE WHERE ID = @id
хотя зависит от того как и кому этот стринг дальше кормить.
Сабина
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
Так, кажется я в правильном месте. Хотела post a message regarding:
Когда я посылаю email из VB using MAPI control из-за security update in the Outlook я должна дважды сказать OK на error messages от Outlook, чтобы Outlook позволил send emal. Кто-нибудь знает как обойти ети messages?
То же самое проискходит когда я email Crystal Reports, но там понятно, ето 3rd party control. Почему Outlook не позволяет своим MS продуктам send email?
Моя задача- создавать репорты ( я использую Crystal Report из VB) и автоматически email икх по адресу.
Кто-нибудь может подсказать удобный способ?
Спасибо.
Когда я посылаю email из VB using MAPI control из-за security update in the Outlook я должна дважды сказать OK на error messages от Outlook, чтобы Outlook позволил send emal. Кто-нибудь знает как обойти ети messages?
То же самое проискходит когда я email Crystal Reports, но там понятно, ето 3rd party control. Почему Outlook не позволяет своим MS продуктам send email?
Моя задача- создавать репорты ( я использую Crystal Report из VB) и автоматически email икх по адресу.
Кто-нибудь может подсказать удобный способ?
Спасибо.