remotesmtp.c
上传用户:knt0001
上传日期:2022-01-28
资源大小:264k
文件大小:2k
源码类别:

Email客户端

开发平台:

C/C++

  1. /**
  2.     eMail is a command line SMTP client.
  3.     Copyright (C) 2001 - 2008 email by Dean Jones
  4.     Software supplied and written by http://www.cleancode.org
  5.     This file is part of eMail.
  6.     eMail is free software; you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation; either version 2 of the License, or
  9.     (at your option) any later version.
  10.     eMail is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.     You should have received a copy of the GNU General Public License
  15.     along with eMail; if not, write to the Free Software
  16.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. **/
  18. #if HAVE_CONFIG_H
  19. # include "config.h"
  20. #endif
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include <signal.h>
  24. #include "email.h"
  25. #include "utils.h"
  26. #include "message.h"
  27. #include "file_io.h"
  28. #include "remotesmtp.h"
  29. #include "processmail.h"
  30. #include "error.h"
  31. /**
  32.  * will save the sent email if a place is specified in the 
  33.  * configuration file It will append each email to one particular 
  34.  * file called 'email.sent'
  35. **/
  36. static int
  37. saveSentEmail(dstrbuf *msg)
  38. {
  39. FILE *save;
  40. char *save_file = NULL;
  41. dstrbuf *path;
  42. save_file = getConfValue("SAVE_SENT_MAIL");
  43. if (!save_file) {
  44. return ERROR;
  45. }
  46. path = expandPath(save_file);
  47. dsbCat(path, "/email.sent");
  48. if (!(save = fopen(path->str, "a"))) {
  49. warning("Could not open file: %s", path->str);
  50. dsbDestroy(path);
  51. return ERROR;
  52. }
  53. fputs(msg->str, save);
  54. fflush(save);
  55. fclose(save);
  56. return SUCCESS;
  57. }
  58. /**
  59.  * This function does all the required SMTP connection 
  60.  * and commands. It will send the e-mail we specified 
  61.  * and use the remote smtp server if there is one, otherwise 
  62.  * it will get it out of the config variable 
  63. **/
  64. int
  65. sendmail(dstrbuf *mail)
  66. {
  67. int smtp_port;
  68. char *smtp_serv, *sm_bin;
  69. smtp_serv = getConfValue("SMTP_SERVER");
  70. sm_bin = getConfValue("SENDMAIL_BIN");
  71. if (smtp_serv) {
  72. smtp_port = atoi(getConfValue("SMTP_PORT"));
  73. if (processRemote(smtp_serv, smtp_port, mail) == ERROR) {
  74. return ERROR;
  75. }
  76. } else if (sm_bin) {
  77. if (processInternal(sm_bin, mail) == ERROR) {
  78. return ERROR;
  79. }
  80. } else {
  81. fprintf(stderr, "No SMTP server specified!n");
  82. return ERROR;
  83. }
  84. if (saveSentEmail(mail) == ERROR) {
  85. return ERROR;
  86. }
  87. return TRUE;
  88. }