Main Page   Class Hierarchy   Compound List   File List   Compound Members  

email.cpp

00001 /*
00002  * Purpose: wxWindows email implementation
00003  * Author:  Frank Buß
00004  * Created: 2002
00005  */
00006 
00007 #include "email.h"
00008 #include "Base64.h"
00009 
00010 
00011 wxEmailMessage::wxEmailMessage(const wxString& subject, const wxString& text, const wxString& from) :
00012     m_subject(subject),
00013     m_text(text),
00014     m_from(from)
00015 {
00016 }
00017 
00018 const wxString& wxEmailMessage::GetFrom()
00019 {
00020     return m_from;
00021 }
00022 
00023 void wxEmailMessage::AddRecipient(const wxString& address)
00024 {
00025     m_rcptArray.Add(address);
00026 }
00027 
00028 void wxEmailMessage::AddTo(const wxString& address)
00029 {
00030     m_toArray.Add(address);
00031 }
00032 
00033 void wxEmailMessage::AddCc(const wxString& address)
00034 {
00035     m_ccArray.Add(address);
00036 }
00037 
00038 void wxEmailMessage::AddBcc(const wxString& address)
00039 {
00040     m_bccArray.Add(address);
00041 }
00042 
00043 void wxEmailMessage::AddFile(const wxFileName& fileName, const wxString mimeMainType, const wxString mimeSubType)
00044 {
00045     // add new entry
00046     m_mimeParts.Add(wxMimePart(fileName));
00047 }
00048 
00049 wxRecipientsIterator wxEmailMessage::GetRecipientsIterator()
00050 {
00051     return wxRecipientsIterator(*this);
00052 }
00053 
00054 void wxEmailMessage::Encode(wxOutputStream& out)
00055 {
00056     // TODO: use only MIME if neccessary
00057     wxString header;
00058     wxString cr("\x00d\x00a");
00059     // TODO: calculate a more random boundary
00060     wxString boundary("---_0123456789-boundary-9876543210_---");
00061     wxString boundarySep = "--" + boundary + cr;
00062     header << "From: " << m_from << cr;
00063     // TODO: add to, cc and bcc in the right format with line breaking, if too long
00064     header << "Bcc:" << cr
00065            << "Subject: " << m_subject << cr  // TODO: add Date:
00066            << "MIME-Version: 1.0" << cr
00067            << "Content-Type: multipart/mixed; boundary=\"" << boundary << "\"" << cr
00068            << cr
00069            << cr
00070            << "This is a multi-part message in MIME format" << cr
00071            << cr
00072            << boundarySep
00073            << "Content-Type: text/plain; charset=iso-8859-1" << cr
00074            << "Content-Transfer-Encoding: 8bit" << cr
00075            << cr
00076            << m_text << cr;  // TODO: is it possible in MIME message to have a single '.' on a line?
00077     out.Write((const char*) header, header.Length());
00078     for (size_t i = 0; i < m_mimeParts.GetCount(); i++) {
00079         out.Write((const char*) boundarySep, boundarySep.Length());
00080         m_mimeParts[i].Encode(out);
00081     }
00082     wxString footer = "--" + boundary + "--" + cr + "." + cr;  // TODO: perhaps moving the '.\r\n' sequence to another place
00083     out.Write((const char*) footer, footer.Length());
00084 }
00085 
00086 wxRecipientsIterator::wxRecipientsIterator(const wxEmailMessage& emailMessage) :
00087     m_emailMessage(emailMessage)
00088 {
00089     m_rcptCount = 0;
00090     m_toCount = 0;
00091     m_ccCount = 0;
00092     m_bccCount = 0;
00093 }
00094 
00095 bool wxRecipientsIterator::HasNext()
00096 {
00097     if (m_rcptCount < m_emailMessage.m_rcptArray.GetCount() ||
00098         m_toCount < m_emailMessage.m_toArray.GetCount() ||
00099         m_ccCount < m_emailMessage.m_ccArray.GetCount() ||
00100         m_bccCount < m_emailMessage.m_bccArray.GetCount())
00101     {
00102         return true;
00103     }
00104     return false;
00105 }
00106 
00107 wxString wxRecipientsIterator::GetNext()
00108 {
00109     if (m_rcptCount < m_emailMessage.m_rcptArray.GetCount()) {
00110         return m_emailMessage.m_rcptArray[m_rcptCount++];
00111     } else if (m_toCount < m_emailMessage.m_toArray.GetCount()) {
00112         return m_emailMessage.m_toArray[m_toCount++];
00113     } else if (m_ccCount < m_emailMessage.m_ccArray.GetCount()) {
00114         return m_emailMessage.m_ccArray[m_ccCount++];
00115     } else if (m_bccCount < m_emailMessage.m_bccArray.GetCount()) {
00116         return m_emailMessage.m_bccArray[m_bccCount++];
00117     }
00118     return "";
00119 }
00120 

Generated on Mon May 6 01:14:20 2002 for Wino by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001