--- parser3/src/classes/mail.C 2001/12/19 12:26:11 1.47 +++ parser3/src/classes/mail.C 2001/12/25 09:00:28 1.49 @@ -4,7 +4,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://paf.design.ru) - $Id: mail.C,v 1.47 2001/12/19 12:26:11 paf Exp $ + $Id: mail.C,v 1.49 2001/12/25 09:00:28 paf Exp $ */ #include "pa_config_includes.h" @@ -147,7 +147,7 @@ static const String& attach_hash_to_stri file_name=&vfile_name->as_string(); else // no $file-name, VFile surely knows name file_name=&static_cast(vfile->fields().get(*name_name))->as_string(); - const char *file_name_cstr=file_name->cstr(String::UL_FILE_SPEC); + const char *file_name_cstr=file_name->cstr(); String& result=*new(pool) String(pool); @@ -264,13 +264,6 @@ static const String& letter_hash_to_stri if(Value *body_element=static_cast(letter_hash.get(*body_name))) { if(Hash *body_hash=body_element->get_hash(&method_name)) { - char *boundary=(char *)pool.malloc(MAX_NUMBER); - snprintf(boundary, MAX_NUMBER-5/*lEvEl*/, "lEvEl%d", level); - // multi-part - result << "content-type: multipart/mixed; boundary=\"" << boundary << "\"\n"; - result << "\n" - "This is a multi-part message in MIME format."; - // body parts.. // ..collect Mail_seq_item *seq=(Mail_seq_item *)pool.malloc(sizeof(Mail_seq_item)*body_hash->size()); @@ -278,10 +271,25 @@ static const String& letter_hash_to_stri // ..sort _qsort(seq, body_hash->size(), sizeof(Mail_seq_item), sort_cmp_string_double_value); + + bool multipart=body_hash->size()>1; + // header + char *boundary=0; + if(multipart) { + boundary=(char *)pool.malloc(MAX_NUMBER); + snprintf(boundary, MAX_NUMBER-5/*lEvEl*/, "lEvEl%d", level); + // multi-part + result << "content-type: multipart/mixed; boundary=\"" << boundary << "\"\n"; + result << "\n" + "This is a multi-part message in MIME format."; + } + // ..insert in 'seq' order for(int i=0; isize(); i++) { - // intermediate boundary - result << "\n--" << boundary << "\n"; + if(multipart) { + // intermediate boundary + result << "\n--" << boundary << "\n"; + } if(Hash *part_hash=seq[i].value->get_hash(&method_name)) if(seq[i].weight>=ATTACHMENT_WEIGHT) @@ -296,7 +304,9 @@ static const String& letter_hash_to_stri } // finish boundary - result << "\n--" << boundary << "--\n"; + if(multipart) { + result << "\n--" << boundary << "--\n"; + } } else { result << "\n"; // header|body separator @@ -394,7 +404,7 @@ static void sendmail(Request& r, const S else { size_t pos_after=after_file_spec; file_spec=&prog_string->mid(0, pos_after); - prog_string->split(argv, &pos_after, " ", 1, String::UL_CLEAN); + prog_string->split(argv, &pos_after, " ", 1, String::UL_AS_IS); } // skip unavailable default programs