[SQL Server] Utilisation de xp_sendmail

Utilisation de xp_sendmail [SQL Server] - SQL/NoSQL - Programmation

Marsh Posté le 09-06-2005 à 20:48:22    

Salut,
 
J'ai déjà eu ce problème, et j'ai à chaque fois dû le résoudre en appelant CDONTS comme un goret depuis T-SQL, et c'est carrément le bordel à programmer, et je doute de l'efficacité de la chose (mais bon, ça marche au moins, c'est déjà pas mal !)
 
Le problème :
 
Si je tapes dans l'analyseur de requêtes :

Code :
  1. exec master..xp_sendmail


 
J'obtiens ce message :

Code :
  1. Serveur : Msg 18030, Niveau 16, État 1, Ligne 0
  2. xp_sendmail: Soit il n'y a pas de client de messagerie par défaut, soit le client de messagerie en cours ne peut pas satisfaire à la demande de messagerie. Exécutez Microsoft Outlook et définissez-le comme client de messagerie par défaut.


 
OK, ils sont bien gentils, mais moi, ça me pose un léger problème... Outlook n'est pas configuré sur mon serveur, et je n'ai rigoureusement AUCUNE envie de l'installer !
Je suis sous 2003, et j'ai installé les services de messagerie (SMTP et POP3, ça me lourde pour ce dernier d'ailleurs, il ne me sert à rien) et je veux que ce soit mon serveur lui-même qui s'occupe d'envoyer les mails.
Comment faire ? Puis-je passer outre Outlook ?


Message édité par Arjuna le 09-06-2005 à 20:48:48
Reply

Marsh Posté le 09-06-2005 à 20:48:22   

Reply

Marsh Posté le 10-06-2005 à 00:23:02    

Bon, finalement, à force de chercher, pas trouvé de moyen d'utiliser cette fonction sans passer par Outlook...
 
Allez, zou !
 

Code :
  1. CREATE PROCEDURE SendMail
  2. (
  3. @From varchar(100),
  4. @To varchar(100),
  5. @Subject varchar(100)=" ",
  6. @Body varchar(4000) =" "
  7. )
  8. /******************************************  
  9. This stored procedure takes the parameters and sends  
  10. an e-mail. All the mail configurations are hard-coded  
  11. in the stored procedure. Comments are added to the  
  12. stored procedure where necessary. References to the  
  13. CDOSYS objects are at the following MSDN Web site:  
  14. http://msdn.microsoft.com/library/default.asp
  15. ?url=/library/en-us/cdosys/html/_cdosys_messaging.asp  
  16. *******************************************/
  17. AS
  18. Declare @iMsg int
  19. Declare @hr int
  20. Declare @source varchar(255)
  21. Declare @description varchar(500)
  22. Declare @output varchar(1000)
  23. --***** Create the CDO.Message Object *****
  24. EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT
  25. --*****Configuring the Message Object *****
  26. -- This is to configure a remote SMTP server.
  27. -- http://msdn.microsoft.com/library/default.asp
  28. --  ?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
  29. EXEC @hr = sp_OASetProperty @iMsg,
  30.   'Configuration.fields ("http://schemas.microsoft.com/cdo/configuration/sendusing" ).Value',
  31.   '2'
  32. -- This is to configure the Server Name or IP address.
  33. -- Replace MailServerName by the name or IP of your SMTP Server.
  34. EXEC @hr = sp_OASetProperty @iMsg,
  35.   'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver" ).Value',
  36.   '127.0.0.1'
  37. -- Save the configurations to the message object.
  38. EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null
  39. -- Set the e-mail parameters.
  40. EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
  41. EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
  42. EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject
  43. -- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
  44. EXEC @hr = sp_OASetProperty @iMsg, 'HTMLBody', @Body
  45. EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL
  46. -- Sample error handling.
  47. IF @hr <> 0
  48. SELECT @hr
  49. BEGIN
  50.   EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
  51.   IF @hr = 0
  52.   BEGIN
  53.     SELECT @output = '  Source: ' + @source
  54.     PRINT  @output
  55.     SELECT @output = '  Description: ' + @description
  56.     PRINT  @output
  57.   END
  58.   ELSE
  59.   BEGIN
  60.     PRINT '  sp_OAGetErrorInfo failed.'
  61.     RETURN
  62.   END
  63. END
  64. -- Do some error handling after each step if you have to.
  65. -- Clean up the objects created.
  66. EXEC @hr = sp_OADestroy @iMsg
  67. GO


 
Pis j'aime bien le trompe-la-mort que je suis, à première vue, c'est pas la base qui envoie le mail et on croit que je génère un mot de passe débile :D
 

Code :
  1. CREATE procedure RegisterUser
  2. (
  3. @firstname varchar(20),
  4. @lastname varchar(20),
  5. @email varchar(255),
  6. @login varchar(20),
  7. @idLanguage tinyint,
  8. @ret tinyint output
  9. )
  10. as
  11. begin
  12. select @ret = sum(chk)
  13. from
  14. (
  15.  select count(login) chk from users where lower(login) = lower(@login)
  16.  union all
  17.  select count(email) * 2 chk from users where lower(email) = lower(@email)
  18. ) tmp
  19. if @ret = 0
  20. begin
  21.  -- This will raise a trigger that generate an email
  22.  -- Planet generation will be done when first login (to avoid polution in database)
  23.  insert into users (firstname, lastname, email, login, password, idLanguage)
  24.  values (@firstname, @lastname, @email, @login, 'password', @idLanguage)
  25. end
  26. end
  27. GO


 
Mais c'est pas vrai, au contraire, je force cet envoi et la génération d'un password aléatoire même lors de l'instertion à la main :sol:
 

Code :
  1. create trigger trg_register
  2. on dbo.Users instead of insert
  3. as
  4. declare @firstname as varchar(20)
  5. declare @lastname as varchar(20)
  6. declare @email as varchar(255)
  7. declare @login as varchar(20)
  8. declare @password as varchar(20)
  9. declare @idLanguage as tinyint
  10. declare @title as varchar(50)
  11. declare @body as varchar(50)
  12. begin
  13. select @firstname = firstname from inserted
  14. select @lastname = lastname from inserted
  15. select @email = email from inserted
  16. select @login = login from inserted
  17. select @idLanguage = idLanguage from inserted
  18. exec GetLabel 'registerTitle', @idLanguage, @title output
  19. exec GetLabel 'registerBody', @idLanguage, @body output
  20. exec sendmail '*@*.*', @email, @title, @body
  21. insert into users (firstname, lastname, email, login, password, idlanguage, registerdate)
  22. values (@firstname, @lastname, @email, @login, left(newid(),8), @idLanguage, getdate())
  23. end


 
Gniark !


Message édité par Arjuna le 10-06-2005 à 00:26:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed