home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / sambar / _setup.1 / sendmail.c < prev    next >
C/C++ Source or Header  |  2001-06-06  |  5KB  |  207 lines

  1. /*
  2. ** SENDMAIL
  3. **
  4. **      HTTP Wrapper for the Sendmail Utilities.
  5. **
  6. **        Confidential Property of Tod Sambar
  7. **        (c) Copyright Tod Sambar 1997
  8. **        All rights reserved.
  9. **
  10. **
  11. ** Public Functions:
  12. **
  13. **        sendmail_init
  14. **
  15. **
  16. ** History:
  17. ** Chg#    Date    Description                                                Resp
  18. ** ----    -------    -------------------------------------------------------    ----
  19. **         6APR97    Created                                                    sambar
  20. */
  21.  
  22. #include    <stdio.h>
  23. #include    <memory.h>
  24. #include    <string.h>
  25. #include    <stdlib.h>
  26. #include    <sendmail.h>
  27.  
  28. /*
  29. ** Sendmail parameters.
  30. */
  31. static SA_RPCPARAM        sendmailp [] =
  32. {
  33.     { "recipient",        1,    "Mail recipient." },
  34.     { "message",        1,    "Body of the mail." },
  35.     { "subject",        1,    "Mail subject." },
  36.     { "email",            1,    "Mail address of the sender." },
  37.     { "attachment",        0,    "File to send as an attachment; must start with a slash (/) and be relative to the document directory." },
  38.     { "username",        0,    "Optional username for SMTP authentication." },
  39.     { "password",        0,    "Optional password for SMTP authentication." }
  40. };
  41.  
  42. /*
  43. **  SENDMAIL_INIT
  44. **
  45. **    Initialize the Sendmail RPC utilities.
  46. **
  47. **  Parameters:
  48. **    sactx        Sambar Server context
  49. **
  50. **  Returns:
  51. **    SA_SUCCEED | SA_FAIL
  52. */
  53. SA_RETCODE SA_PUBLIC
  54. sendmail_init(sactx)
  55. SA_CTX        *sactx;
  56. {
  57.     /*
  58.     ** Register the Sendmail form RPC                                 
  59.     ** Note: This can only be called from RCXsendmail, register
  60.     **         sendmail_init2 to allow sendmail to be called via 
  61.     **         /session/sendmail
  62.     */
  63.     if (sa_cmd_init(sactx, "sendmail", sendmailp, 
  64.         sizeof(sendmailp) / sizeof(SA_RPCPARAM), SA_AUTHORIZATION_SCRIPT,
  65.         "Sendmail Form Utility", sendmail_form) != SA_SUCCEED)
  66.     {
  67.         sa_log(sactx, "Unable to initialize Sendmail Form RPC");
  68.         return (SA_FAIL);
  69.     } 
  70.  
  71.     sa_log(sactx, "Sendmail Utilities Initialized");
  72.  
  73.     return (SA_SUCCEED);
  74. }
  75.  
  76. /*
  77. **  SENDMAIL_INIT2
  78. **
  79. **    Initialize the Sendmail RPC utilities (open to all use).
  80. **
  81. **    WARNING!  Initialzing this interface allows you sendmail
  82. **    script to be used as a SPAM relay point. 
  83. **
  84. **  Parameters:
  85. **    sactx        Sambar Server context
  86. **
  87. **  Returns:
  88. **    SA_SUCCEED | SA_FAIL
  89. */
  90. SA_RETCODE SA_PUBLIC
  91. sendmail_init2(sactx)
  92. SA_CTX        *sactx;
  93. {
  94.     /* Register the Sendmail form RPC                                 */
  95.     if (sa_cmd_init(sactx, "sendmail", sendmailp, 
  96.         sizeof(sendmailp) / sizeof(SA_RPCPARAM), SA_AUTHORIZATION_ALL,
  97.         "Sendmail Form Utility", sendmail_form) != SA_SUCCEED)
  98.     {
  99.         sa_log(sactx, "Unable to initialize Sendmail Form RPC");
  100.         return (SA_FAIL);
  101.     } 
  102.  
  103.     sa_log(sactx, "Sendmail Utilities Initialized");
  104.  
  105.     return (SA_SUCCEED);
  106. }
  107.  
  108. /*
  109. **  SENDMAIL_FORM
  110. **
  111. **    Process a sendmail form and send the appropriate mail.
  112. **
  113. **  Parameters:
  114. **    sactx        Sambar Server context
  115. **    saconn        Sambar Server connection
  116. **    saparams    RPC Parameters
  117. **    infop        Error parameters
  118. **
  119. **  Returns:
  120. **    SA_SUCCEED | SA_FAIL
  121. */
  122. SA_RETCODE SA_PUBLIC
  123. sendmail_form(sactx, saconn, saparams, infop)
  124. SA_CTX        *sactx;
  125. SA_CONN        *saconn;
  126. SA_PARAMS    *saparams;
  127. SA_INT        *infop;
  128. {
  129.     SA_INT        emaillen;
  130.     SA_CHAR        *email;
  131.     SA_INT        tolen;
  132.     SA_CHAR        *to;
  133.     SA_INT        subjlen;
  134.     SA_CHAR        *subj;
  135.     SA_INT        msglen;
  136.     SA_CHAR        *msg;
  137.     SA_INT        attachlen;
  138.     SA_CHAR        *attach;
  139.     SA_CHAR        *username;
  140.     SA_CHAR        *password;
  141.  
  142.     /* Get the mail recipient                                            */
  143.     if ((sa_param(sactx, saparams, "recipient", &to, &tolen) != SA_SUCCEED) 
  144.         || (tolen == 0) || (tolen > 2048))
  145.     {
  146.         *infop = SA_E_INVALIDDATA;
  147.         return (SA_FAIL);
  148.     }
  149.  
  150.     /* Get the mail message                                             */
  151.     if (sa_param(sactx, saparams, "message", &msg, &msglen) != SA_SUCCEED)
  152.     {
  153.         *infop = SA_E_INVALIDDATA;
  154.         return (SA_FAIL);
  155.     }
  156.  
  157.     /* If there is no message, just return                                */
  158.     if (msglen == 0)
  159.         return (SA_SUCCEED);
  160.  
  161.     /* Get the subject (optional)                                        */
  162.     if ((sa_param(sactx, saparams, "subject", &subj, &subjlen) != SA_SUCCEED)
  163.         || (subjlen > 1024))
  164.     {
  165.         *infop = SA_E_INVALIDDATA;
  166.         return (SA_FAIL);
  167.     }
  168.  
  169.     /* Get the "email"                                                     */
  170.     if ((sa_param(sactx, saparams, "email", &email, &emaillen) != SA_SUCCEED) 
  171.         || (emaillen == 0) || (emaillen > 1024))
  172.     {
  173.         *infop = SA_E_INVALIDDATA;
  174.         return (SA_FAIL);
  175.     }
  176.  
  177.     /* Get the attachment (optional)                                    */
  178.     if (sa_param(sactx, saparams, "attachment", &attach, &attachlen) 
  179.         != SA_SUCCEED)
  180.     {
  181.         attach = (SA_CHAR *)NULL;
  182.     }
  183.  
  184.     if (attachlen == 0)
  185.         attach = (SA_CHAR *)NULL;
  186.  
  187.     if (sa_param(sactx, saparams, "username", &username, (SA_INT *)NULL)
  188.         != SA_SUCCEED)
  189.     {
  190.         username = (SA_CHAR *)NULL;
  191.     }
  192.  
  193.     if (sa_param(sactx, saparams, "password", &password, (SA_INT *)NULL)
  194.         != SA_SUCCEED)
  195.     {
  196.         password = (SA_CHAR *)NULL;
  197.     }
  198.  
  199.     if (sa_smtpmail(sactx, saconn, username, password, email, to, 
  200.         NULL, NULL, subj, msg, attach) != SA_SUCCEED)
  201.     {
  202.         return (SA_FAIL);
  203.     }
  204.  
  205.     return (SA_SUCCEED);
  206. }
  207.