Return TypeFunction nameArguments
hzEcodehzEmail::Compose(void)

Declared in file: hzMailer.h
Defined in file : hzMailer.cpp

Function Logic:

0:START 1:GetThreadLogger plog 2:!plog 3:Fatal 4:hzChain::Clear hzChain::Printf rx hzList::Iter::Element ema hzChain::Printf 5:rx.Valid(); 6:hzList::Iter::Element ema hzChain::Printf hzList::Count 7:m_CC.Count() 8:rx hzList::Iter::Element ema hzChain::Printf 9:rx.Valid(); 10:hzList::Iter::Element ema hzChain::Printf 11:m_BCC.Count() 12:rx hzList::Iter::Element ema hzChain::Printf 13:rx.Valid(); 14:hzList::Iter::Element ema hzChain::Printf 15:hzChain::Printf hzList::Count 16:m_SendAttach.Count() 17:hzXDate::SysDateTime getpid pid hzXDate::Year hzXDate::Month hzXDate::Day hzXDate::Hour hzXDate::Min hzXDate::Sec hzXDate::uSec sprintf items hzChain::Printf items hzChain::Printf items items m_Final items iA 18:iA.Valid(); 19:hzList::Iter::Element A OpenInputStrm rc 20:rc!=E_OK 21:hzChain::Clear items hzChain::Printf items Mimetype2Txt strrchr i 22:i 23:items 24:i 25:hzChain::Printf items hzChain::Printf Base64Encode items close ifstream::clear 26:hzChain::Printf 27:items items items m_Final items 28:Return rc

Function body:

hzEcode hzEmail::Compose (void)
{
   _hzfunc("hzEmail::Compose") ;
   hzList<hzEmaddr>::Iter  rx ;
   hzList<_efile>::Iter    iA ;
   ifstream        is ;
   hzEmaddr        ema ;
   _efile          A ;
   hzXDate         now ;
   hzChain         filedata ;
   hzLogger*       plog ;
   const char*     i ;
   uint32_t        pid ;
   char            idbuf[60];
   hzEcode         rc = E_OK ;
   plog = GetThreadLogger() ;
   if (!plog)
       Fatal("No thrread logger\n") ;
   m_Final.Clear() ;
   m_Final.Printf("From: %s <%s>\r\n", *m_RealFrom, *m_AddrFrom) ;
   rx = m_Recipients ;
   ema = rx.Element() ;
   m_Final.Printf("To: %s\r\n", *ema) ;
   for (rx++ ; rx.Valid() ; rx++)
   {
       ema = rx.Element() ;
       m_Final.Printf("    %s\r\n", *ema) ;
   }
   if (m_CC.Count())
   {
       rx = m_CC ;
       ema = rx.Element() ;
       m_Final.Printf("Cc: %s\r\n", *ema) ;
       for (rx++ ; rx.Valid() ; rx++)
       {
           ema = rx.Element() ;
           m_Final.Printf("    %s\r\n", *ema) ;
       }
   }
   if (m_BCC.Count())
   {
       rx = m_BCC ;
       ema = rx.Element() ;
       m_Final.Printf("Bcc: %s\r\n", *ema) ;
       for (rx++ ; rx.Valid() ; rx++)
       {
           ema = rx.Element() ;
           m_Final.Printf("    %s\r\n", *ema) ;
       }
   }
   m_Final.Printf("Subject: %s\r\n", *m_Subject) ;
   if (m_SendAttach.Count())
   {
       now.SysDateTime() ;
       pid = getpid() ;
       sprintf(idbuf, "%d--%04d%02d%02d%02d%02d%02d.%06d--%x",
           pid, now.Year(), now.Month(), now.Day(), now.Hour(), now.Min(), now.Sec(), now.uSec(), pid) ;
       m_Final << "MIME-Version: 1.0\r\n" ;
       m_Final.Printf("Content-Type: multipart/mixed; boundary="%s"\r\n\r\n"  , idbuf) ;
       m_Final << "This is a multi-part message in MIME format.\r\n\r\n" ;
       m_Final.Printf("--%s\r\n", idbuf) ;
       m_Final << "Content-Type: text/plain; charset=utf-8; format=flowed\r\n" ;
       m_Final << "Content-Transfer-Encoding: 7bit\r\n\r\n" ;
       m_Final += m_Text ;
       m_Final << "\r\n\r\n" ;
       for (iA = m_SendAttach ; iA.Valid() ; iA++)
       {
           A = iA.Element() ;
           rc = OpenInputStrm(is, A.m_Filepath) ;
           if (rc != E_OK)
               break ;
           filedata.Clear() ;
           filedata << is ;
           m_Final.Printf("--%s\r\n", idbuf) ;
           m_Final << "Content-Type: " ;
           m_Final << Mimetype2Txt(A.m_eType) ;
           i = strrchr(*A.m_Filepath, CHAR_FWSLASH) ;
           if (i)
               i++ ;
           else
               i = A.m_Filepath ;
           m_Final.Printf("; name="%s"\r\n"  , i) ;
           m_Final << "Content-Transfer-Encoding: base64\r\n" ;
           m_Final.Printf("Content-Disposition: attachment; filename="%s"\r\n\r\n"  , i) ;
           Base64Encode(m_Final, filedata) ;
           m_Final << "\r\n" ;
           is.close() ;
           is.clear() ;
       }
       m_Final.Printf("--%s--\r\n", idbuf) ;
   }
   else
   {
       m_Final << "MIME-Version: 1.0\r\n" ;
       m_Final << "Content-Type: text/plain; charset=utf-8; format=flowed\r\n" ;
       m_Final << "Content-Transfer-Encoding: 7bit\r\n\r\n" ;
       m_Final += m_Text ;
       m_Final << "\r\n\r\n" ;
   }
   return rc ;
}