Procedure στον SQL Server για αποστολή Mail

Παρακάτω παραθέτω μία procedure που μπορούμε να χρησιμοποιήσουμε για αποστολή Anonymous Email μέσω SMTP από τον SQL Server 2000

Προσοχή ο χρήστης πρέπει να έχει στην master δικαιώματα στίς παρακάτω procedures του SQL ή να είναι μέλος του sysadmin ή κάποιου άλλου group που του έχουμε δώσει δικαιώματα εκτέλεσης στις procedure.

Procedures SQL : sp_OACreate ,sp_OASetProperty ,sp_OADestroy ,sp_OAGetErrorInfo

Επίσης στό σημείο που δηλώνουμε τον SMTP SERVER αλλάζουμε το SERVERNAME μέ τό όνομα του δικού μας SERVER

CREATE PROCEDURE Smtp_SendMail_sp
(
@MailFrom as nvarchar(50),
@MailTo as nvarchar(50),
@MailSubject as nvarchar(255),
@MailBody as text
)
AS

-- Declare
DECLARE @msg int
DECLARE @config int
DECLARE @bo int
DECLARE @src varchar(255), @desc varchar(255)


/* Δημιουργία του message object */
EXEC @bo = sp_OACreate 'CDO.Message', @msg OUT
/* Δημιουργία του configuration object */
EXEC @bo = sp_OACreate 'CDO.Configuration', @config OUT

/* Configuration Object */
-- Αποστολή μυνήματος χρησιμοποιώντας τό ίκτυο
EXEC @bo = sp_OASetProperty @config, 'Fields(cdoSendUsingMethod)', 'cdoSendUsingPort'
-- Δήλωση του SMTP Server
EXEC @bo = sp_OASetProperty @config, 'Fields(cdoSMTPServer)', 'SERVERNAME'
-- Server SMTP Port
EXEC @bo = sp_OASetProperty @config, 'Fields(cdoSMTPServerPort)', 25
-- Anonymous SMTP Authenticate
EXEC @bo = sp_OASetProperty @config, 'Fields(cdoSMTPAuthenticate)', 'cdoAnonymous'
EXEC sp_OAMethod @config, 'Fields.Update'

/* Message Object */
EXEC @bo = sp_OASetProperty @msg, 'Configuration', @config -- set message.configuration = config
EXEC @bo = sp_OASetProperty @msg, 'To', @MailTo
EXEC @bo = sp_OASetProperty @msg, 'From', @MailFrom
EXEC @bo = sp_OASetProperty @msg, 'Subject', @MailSubject
EXEC @bo = sp_OASetProperty @msg, 'TextBody', @MailBody
EXEC sp_OAMethod @msg, 'Send()'

/* Καταστροφή τών objects */
EXEC @bo = sp_OADestroy @msg
EXEC @bo = sp_OADestroy @config

-- Χειρισμός Λαθών
IF @bo <> 0
BEGIN
EXEC sp_OAGetErrorInfo @msg, @src OUT, @desc OUT
SELECT convert(varbinary(4),@bo) as ErrNo, @src as Source, @desc as Description
RETURN
END

---Τρόπος Εκτέλεσης

  EXEC sp_SMTPemail '[email protected]', '[email protected]', 'Το Θέμα μου','Θα συναντηθούμε στο καφενείο του DotnetZone'

  Ελπίζω να φανεί χρήσιμο σέ κάποιους .

 

 

Share


Έχουν δημοσιευτεί Τετάρτη, 25 Οκτωβρίου 2006 1:48 μμ από το μέλος imanos
Καταχώρηση στις κατηγορίες:

Σχόλια:

 

nsouflis έγραψε:

Χρησιμοποιώντας την παρακάτω procedure μπορείτε να βάλετε και attachment στο mail . προσοχή το path του attachment είναι relative του sqlserver σας
.

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


CREATE procedure sp_sendmailwithattchment
@from varchar(500) ,
@to varchar(500) ,
@subject varchar(500),
@body varchar(4000) ,
@smtpserver varchar(25),
@bodytype varchar(10) ,
@attach varchar(100)
as
declare @imsg int
declare @hr int
declare @source varchar(255)
declare @description varchar(500)
declare @output varchar(1000)
exec @hr = sp_oacreate 'cdo.message', @imsg out
exec @hr = sp_oasetproperty @imsg,
'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").value','2'

exec @hr = sp_oasetproperty @imsg,
'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").value',
@smtpserver

exec @hr = sp_oamethod @imsg, 'configuration.fields.update', null
exec @hr = sp_oasetproperty @imsg, 'to', @to
exec @hr = sp_oasetproperty @imsg, 'from', @from
exec @hr = sp_oasetproperty @imsg, 'subject', @subject
--exec @hr = sp_oasetproperty @imsg, 'AddAttachment', @attach

exec @hr = sp_OAMethod @imsg, 'AddAttachment',null, @Attach
-- if you are using html e-mail, use 'htmlbody' instead of 'textbody'.

exec @hr = sp_oasetproperty @imsg, @bodytype, @body
exec @hr = sp_oamethod @imsg, 'send', null

-- sample error handling.
if @hr <>0
select @hr
begin
exec @hr = sp_oageterrorinfo null, @source out, @description out
if @hr = 0
begin
select @output = ' source: ' + @source
print @output
select @output = ' description: ' + @description
print @output
end
else
begin
print ' sp_oageterrorinfo failed.'
return
end
end
exec @hr = sp_oadestroy @imsg



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO





Οκτωβρίου 25, 2006 4:49 μμ
 

imanos έγραψε:

Νίκο ευχαριστώ που συμπλήρωσες την procedure αν και ήταν κάτι που ήθελα να κάνω σέ άλλο post.
Οκτωβρίου 26, 2006 8:41 πμ