/*
Bacula® - The Network Backup Solution
- Copyright (C) 2001-2007 Free Software Foundation Europe e.V.
+ Copyright (C) 2001-2008 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
/*
Derived from a SMTPclient:
+ ======== Original copyrights ==========
+
SMTPclient -- simple SMTP client
- Copyright (C) 1997 Ralf S. Engelschall, All Rights Reserved.
- rse@engelschall.com
- www.engelschall.com
+ Copyright (c) 1997 Ralf S. Engelschall, All rights reserved.
+
+ This program is free software; it may be redistributed and/or modified
+ only under the terms of either the Artistic License or the GNU General
+ Public License, which may be found in the SMTP source distribution.
+ Look at the file COPYING.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ ======================================================================
+
+ smtpclient_main.c -- program source
+
+ Based on smtp.c as of August 11, 1995 from
+ W.Z. Venema,
+ Eindhoven University of Technology,
+ Department of Mathematics and Computer Science,
+ Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands.
+
+ =========
+
Kern Sibbald, July 2001
+ Note, the original W.Z. Venema smtp.c had no license and no
+ copyright. See:
+ http://archives.neohapsis.com/archives/postfix/2000-05/1520.html
+
+
Version $Id$
*/
{
char *p, *q;
- if ((p = strchr(from_addr, '<')) == NULL) {
+ if ((p = strchr(addr, '<')) == NULL) {
snprintf(buf, buf_len, "<%s>", addr);
} else {
/* Copy <addr> */
"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n"
" -8 set charset utf-8\n"
" -c set the Cc: field\n"
-" -dnn set debug level to nn\n"
+" -d <nn> set debug level to <nn>\n"
+" -dt print timestamp in debug output\n"
" -f set the From: field\n"
" -h use mailhost:port as the SMTP server\n"
" -s set the Subject: field\n"
long offset;
_tzset();
offset = _timezone;
- offset += _dstbias;
+ if (tm.tm_isdst) {
+ offset += _dstbias;
+ }
return offset /= 60;
#else
break;
case 'd': /* set debug level */
- debug_level = atoi(optarg);
- if (debug_level <= 0) {
- debug_level = 1;
+ if (*optarg == 't') {
+ dbg_timestamp = true;
+ } else {
+ debug_level = atoi(optarg);
+ if (debug_level <= 0) {
+ debug_level = 1;
+ }
}
Dmsg1(20, "Debug level = %d\n", debug_level);
break;
* we do.
*/
get_response(); /* banner */
- chat("helo %s\r\n", my_hostname);
- chat("mail from:%s\r\n", cleanup_addr(from_addr, buf, sizeof(buf)));
+ chat("HELO %s\r\n", my_hostname);
+ chat("MAIL FROM:%s\r\n", cleanup_addr(from_addr, buf, sizeof(buf)));
for (i = 0; i < argc; i++) {
Dmsg1(20, "rcpt to: %s\n", argv[i]);
- chat("rcpt to:%s\r\n", cleanup_addr(argv[i], buf, sizeof(buf)));
+ chat("RCPT TO:%s\r\n", cleanup_addr(argv[i], buf, sizeof(buf)));
}
if (cc_addr) {
- chat("rcpt to:%s\r\n", cleanup_addr(cc_addr, buf, sizeof(buf)));
+ chat("RCPT TO:%s\r\n", cleanup_addr(cc_addr, buf, sizeof(buf)));
}
Dmsg0(20, "Data\n");
- chat("data\r\n");
+ chat("DATA\r\n");
/*
* Send message header
while (fgets(buf, sizeof(buf), stdin)) {
if (maxlines > 0 && ++lines > maxlines) {
Dmsg1(20, "skip line because of maxlines limit: %lu\n", maxlines);
+ while (fgets(buf, sizeof(buf), stdin)) {
+ ++lines;
+ }
break;
}
buf[sizeof(buf)-1] = '\0';
buf[strlen(buf)-1] = '\0';
- if (buf[0] == '.' && buf[1] == '\0') { /* quote lone dots */
- fputs("..\r\n", sfp);
- } else { /* pass body through unchanged */
- fputs(buf, sfp);
- fputs("\r\n", sfp);
+ if (buf[0] == '.') { /* add extra . see RFC 2821 4.5.2 */
+ fputs(".", sfp);
}
+ fputs(buf, sfp);
+ fputs("\r\n", sfp);
}
if (lines > maxlines) {
Dmsg1(10, "hit maxlines limit: %lu\n", maxlines);
- fprintf(sfp, "\r\n[maximum of %lu lines exceeded, skipped %lu lines of output]\r\n", maxlines, lines-maxlines);
+ fprintf(sfp, "\r\n\r\n[maximum of %lu lines exceeded, skipped %lu lines of output]\r\n", maxlines, lines-maxlines);
}
/*
* Send SMTP quit command
*/
chat(".\r\n");
- chat("quit\r\n");
+ chat("QUIT\r\n");
/*
* Go away gracefully ...