00001
00002
00003
00004
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
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
00057 wxString header;
00058 wxString cr("\x00d\x00a");
00059
00060 wxString boundary("---_0123456789-boundary-9876543210_---");
00061 wxString boundarySep = "--" + boundary + cr;
00062 header << "From: " << m_from << cr;
00063
00064 header << "Bcc:" << cr
00065 << "Subject: " << m_subject << cr
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;
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;
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