послать email из хранимой процедуры

shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

послать email из хранимой процедуры

Post by shadow7256 »

Подскажите хороший способ послать email из хранимой процедуры в SQL Server 2000?

В инете нашел несколько способов, кто то советует через MAPI, кто то через SMTP сервис IIS, кто то через актив икс объекты.

Как лучше всего чтобы поменьше траблов иметь?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: послать email из хранимой процедуры

Post by Sabina »

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


Сабина
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

Подскажите как написать правильно в процедуре следующее:

Я передаю в процедуру параметр (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" :pain1:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

shadow7256 wrote:Подскажите как написать правильно в процедуре следующее:


Надеюсь вам ответят те, кто этим занимается регулярно. Мне бы тут со своими PL/SQL процедурами разобраться.

А вы бы написал поподробнее на чем это все. Может у вас там LDAP какой-нибудь используется?

Сабина
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

я понял ошибку свою. Оказывается если в предложении 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...
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

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

хотя зависит от того как и кому этот стринг дальше кормить.

Сабина
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

Так, кажется я в правильном месте. Хотела 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 икх по адресу.
Кто-нибудь может подсказать удобный способ?
Спасибо.

Return to “Вопросы и новости IT”