Patch level : 12.00
Files correlati : Commento: wxSMTP
This commit is contained in:
parent
dfc020fe21
commit
5e9513c5b2
123
libraries/wxSMTP/base64.cpp
Normal file
123
libraries/wxSMTP/base64.cpp
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
//*********************************************************************
|
||||||
|
//* Base64 - a simple base64 encoder and decoder.
|
||||||
|
//*
|
||||||
|
//* Copyright (c) 1999, Bob Withers - bwit@pobox.com
|
||||||
|
//*
|
||||||
|
//* This code may be freely used for any purpose, either personal
|
||||||
|
//* or commercial, provided the authors copyright notice remains
|
||||||
|
//* intact.
|
||||||
|
//*********************************************************************
|
||||||
|
//
|
||||||
|
// converted to wxWindows by Frank Buß
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Base64.h"
|
||||||
|
|
||||||
|
const wxChar fillchar = '=';
|
||||||
|
|
||||||
|
// 00000000001111111111222222
|
||||||
|
// 01234567890123456789012345
|
||||||
|
static wxString cvt = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
|
||||||
|
// 22223333333333444444444455
|
||||||
|
// 67890123456789012345678901
|
||||||
|
"abcdefghijklmnopqrstuvwxyz"
|
||||||
|
|
||||||
|
// 555555556666
|
||||||
|
// 234567890123
|
||||||
|
"0123456789+/");
|
||||||
|
|
||||||
|
wxString wxBase64::Encode(const wxUint8* pData, size_t len)
|
||||||
|
{
|
||||||
|
size_t c;
|
||||||
|
wxString ret;
|
||||||
|
ret.Alloc(len * 4 / 3 + len * 2 / 50);
|
||||||
|
size_t resultLen = 0;
|
||||||
|
wxString cr(wxT("\x00d\x00a"));
|
||||||
|
|
||||||
|
for (size_t i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
c = (pData[i] >> 2) & 0x3f;
|
||||||
|
ret.Append(cvt[c], 1);
|
||||||
|
if (++resultLen == 72) { ret += cr; resultLen = 0; }
|
||||||
|
c = (pData[i] << 4) & 0x3f;
|
||||||
|
if (++i < len)
|
||||||
|
c |= (pData[i] >> 4) & 0x0f;
|
||||||
|
|
||||||
|
ret.Append(cvt[c], 1);
|
||||||
|
if (++resultLen == 72) { ret += cr; resultLen = 0; }
|
||||||
|
if (i < len)
|
||||||
|
{
|
||||||
|
c = (pData[i] << 2) & 0x3f;
|
||||||
|
if (++i < len)
|
||||||
|
c |= (pData[i] >> 6) & 0x03;
|
||||||
|
|
||||||
|
ret.Append(cvt[c], 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
ret.Append(fillchar, 1);
|
||||||
|
}
|
||||||
|
if (++resultLen == 72) { ret += cr; resultLen = 0; }
|
||||||
|
|
||||||
|
if (i < len)
|
||||||
|
{
|
||||||
|
c = pData[i] & 0x3f;
|
||||||
|
ret.Append(cvt[c], 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret.Append(fillchar, 1);
|
||||||
|
}
|
||||||
|
if (++resultLen == 72) { ret += cr; resultLen = 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxBase64::Decode(const wxString& data)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
int c1;
|
||||||
|
size_t len = data.Length();
|
||||||
|
wxString ret;
|
||||||
|
ret.Alloc(data.Length() * 3 / 4);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
// TODO: check all Find results for -1 as result of wrong input data for release build
|
||||||
|
c = cvt.Find(data[i]);
|
||||||
|
wxASSERT_MSG(c >= 0, _T("invalid base64 input"));
|
||||||
|
++i;
|
||||||
|
c1 = cvt.Find(data[i]);
|
||||||
|
wxASSERT_MSG(c1 >= 0, _T("invalid base64 input"));
|
||||||
|
c = (c << 2) | ((c1 >> 4) & 0x3);
|
||||||
|
ret.Append(c, 1);
|
||||||
|
if (++i < len)
|
||||||
|
{
|
||||||
|
c = data[i];
|
||||||
|
if (fillchar == c)
|
||||||
|
break;
|
||||||
|
|
||||||
|
c = cvt.Find(c);
|
||||||
|
wxASSERT_MSG(c >= 0, _T("invalid base64 input"));
|
||||||
|
c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf);
|
||||||
|
ret.Append(c1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++i < len)
|
||||||
|
{
|
||||||
|
c1 = data[i];
|
||||||
|
if (fillchar == c1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
c1 = cvt.Find(c1);
|
||||||
|
wxASSERT_MSG(c1 >= 0, _T("invalid base64 input"));
|
||||||
|
c = ((c << 6) & 0xc0) | c1;
|
||||||
|
ret.Append(c, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
27
libraries/wxSMTP/base64.h
Normal file
27
libraries/wxSMTP/base64.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//*********************************************************************
|
||||||
|
//* C_Base64 - a simple base64 encoder and decoder.
|
||||||
|
//*
|
||||||
|
//* Copyright (c) 1999, Bob Withers - bwit@pobox.com
|
||||||
|
//*
|
||||||
|
//* This code may be freely used for any purpose, either personal
|
||||||
|
//* or commercial, provided the authors copyright notice remains
|
||||||
|
//* intact.
|
||||||
|
//*********************************************************************
|
||||||
|
//
|
||||||
|
// converted to wxWindows by Frank Buß
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BASE64_H
|
||||||
|
#define BASE64_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
|
||||||
|
class wxBase64
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static wxString Encode(const wxUint8* pData, size_t length);
|
||||||
|
|
||||||
|
static wxString Decode(const wxString& data);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
127
libraries/wxSMTP/cmdprot.cpp
Normal file
127
libraries/wxSMTP/cmdprot.cpp
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: private wxWindows mail transport implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wx/sckstrm.h>
|
||||||
|
|
||||||
|
#include "cmdprot.h"
|
||||||
|
|
||||||
|
#define SOCKET_ID 1
|
||||||
|
|
||||||
|
class wxCmdlineProtocolSocketEventHandler : public wxEvtHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxCmdlineProtocolSocketEventHandler(wxCmdlineProtocol& callback) : m_callback(callback)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnSocketEvent(wxSocketEvent& event)
|
||||||
|
{
|
||||||
|
m_callback.OnSocketEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxCmdlineProtocol& m_callback;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxCmdlineProtocolSocketEventHandler, wxEvtHandler)
|
||||||
|
EVT_SOCKET(SOCKET_ID, wxCmdlineProtocolSocketEventHandler::OnSocketEvent)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
|
wxCmdlineProtocol::wxCmdlineProtocol()
|
||||||
|
{
|
||||||
|
m_pCmdlineProtocolSocketEventHandler = new wxCmdlineProtocolSocketEventHandler(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCmdlineProtocol::~wxCmdlineProtocol()
|
||||||
|
{
|
||||||
|
delete m_pCmdlineProtocolSocketEventHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCmdlineProtocol::SetHost(const wxString& host, int service, const wxString& user, const wxString& password)
|
||||||
|
{
|
||||||
|
m_host = host;
|
||||||
|
m_user = user;
|
||||||
|
m_service = service;
|
||||||
|
m_password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCmdlineProtocol::Connect()
|
||||||
|
{
|
||||||
|
if (IsConnected()) Close();
|
||||||
|
SetTimeout(60);
|
||||||
|
SetEventHandler(*m_pCmdlineProtocolSocketEventHandler, SOCKET_ID);
|
||||||
|
SetNotify(wxSOCKET_CONNECTION_FLAG | wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
|
||||||
|
Notify(TRUE);
|
||||||
|
|
||||||
|
// connect
|
||||||
|
wxIPV4address addr;
|
||||||
|
addr.Hostname(m_host);
|
||||||
|
addr.Service(m_service); // TODO: perhaps the port should not be hardcoded?
|
||||||
|
wxSocketClient::Connect(addr, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCmdlineProtocol::OnInput(wxSocketEvent& event)
|
||||||
|
{
|
||||||
|
// TODO: implementing response timeout somewhere
|
||||||
|
|
||||||
|
// get data
|
||||||
|
const int bufsize = 256;
|
||||||
|
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wchar_t buf[bufsize];
|
||||||
|
#else
|
||||||
|
char buf[bufsize];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Read(buf, bufsize);
|
||||||
|
m_inputLine += wxString(buf, LastCount());
|
||||||
|
// search for a newline
|
||||||
|
while (true) {
|
||||||
|
size_t pos = 0;
|
||||||
|
while (pos < m_inputLine.Length() - 1) {
|
||||||
|
if (m_inputLine[pos] == 13) {
|
||||||
|
if (m_inputLine[pos + 1] == 10)
|
||||||
|
{
|
||||||
|
// line found, evaluate
|
||||||
|
EvaluateLine(m_inputLine.Mid(0, pos));
|
||||||
|
|
||||||
|
// adjust buffer
|
||||||
|
m_inputLine = m_inputLine.Mid(pos + 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCmdlineProtocol::OnSocketEvent(wxSocketEvent& event)
|
||||||
|
{
|
||||||
|
wxString s = _("OnSocketEvent: ");
|
||||||
|
|
||||||
|
switch(event.GetSocketEvent())
|
||||||
|
{
|
||||||
|
case wxSOCKET_INPUT:
|
||||||
|
OnInput(event);
|
||||||
|
break;
|
||||||
|
case wxSOCKET_LOST:
|
||||||
|
// TODO: error handling
|
||||||
|
break;
|
||||||
|
case wxSOCKET_CONNECTION:
|
||||||
|
OnConnect(event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCmdlineProtocol::Write(const wxString& msg)
|
||||||
|
{
|
||||||
|
wxSocketClient::Write(msg, msg.Length());
|
||||||
|
}
|
||||||
|
|
51
libraries/wxSMTP/cmdprot.h
Normal file
51
libraries/wxSMTP/cmdprot.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: base class for all command line oriented internet protocols
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CMDPROT_H
|
||||||
|
#define CMDPROT_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
|
||||||
|
#include "dllimpexp.h"
|
||||||
|
#include "email.h"
|
||||||
|
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxCmdlineProtocolSocketEventHandler;
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxCmdlineProtocol : public wxSocketClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxCmdlineProtocol();
|
||||||
|
|
||||||
|
~wxCmdlineProtocol();
|
||||||
|
|
||||||
|
void SetHost(const wxString& host, int service = 25, const wxString& user = wxT(""), const wxString& password = wxT(""));
|
||||||
|
|
||||||
|
void Connect();
|
||||||
|
|
||||||
|
// handling for wxSOCKET_INPUT
|
||||||
|
|
||||||
|
virtual void EvaluateLine(const wxString& line) = 0;
|
||||||
|
|
||||||
|
virtual void OnConnect(wxSocketEvent& event) = 0;
|
||||||
|
|
||||||
|
void OnInput(wxSocketEvent& event);
|
||||||
|
|
||||||
|
void OnSocketEvent(wxSocketEvent& event);
|
||||||
|
|
||||||
|
void Write(const wxString& msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxCmdlineProtocolSocketEventHandler* m_pCmdlineProtocolSocketEventHandler;
|
||||||
|
bool m_bConnected;
|
||||||
|
wxString m_inputLine;
|
||||||
|
wxString m_host;
|
||||||
|
int m_service;
|
||||||
|
wxString m_user;
|
||||||
|
wxString m_password;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
12
libraries/wxSMTP/dllimpexp.h
Normal file
12
libraries/wxSMTP/dllimpexp.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef DLLIMPEXP_H
|
||||||
|
#define DLLIMPEXP_H
|
||||||
|
|
||||||
|
#ifdef WXMAKINGDLL_SMTP
|
||||||
|
#define WXDLLIMPEXP_SMTP WXEXPORT
|
||||||
|
#elif defined(WXUSINGDLL)
|
||||||
|
#define WXDLLIMPEXP_SMTP WXIMPORT
|
||||||
|
#else // not making nor using DLL
|
||||||
|
#define WXDLLIMPEXP_SMTP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
120
libraries/wxSMTP/email.cpp
Normal file
120
libraries/wxSMTP/email.cpp
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: wxWindows email implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "email.h"
|
||||||
|
#include "Base64.h"
|
||||||
|
|
||||||
|
|
||||||
|
wxEmailMessage::wxEmailMessage(const wxString& subject, const wxString& text, const wxString& from) :
|
||||||
|
m_subject(subject),
|
||||||
|
m_text(text),
|
||||||
|
m_from(from)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxString& wxEmailMessage::GetFrom()
|
||||||
|
{
|
||||||
|
return m_from;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::AddRecipient(const wxString& address)
|
||||||
|
{
|
||||||
|
m_rcptArray.Add(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::AddTo(const wxString& address)
|
||||||
|
{
|
||||||
|
m_toArray.Add(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::AddCc(const wxString& address)
|
||||||
|
{
|
||||||
|
m_ccArray.Add(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::AddBcc(const wxString& address)
|
||||||
|
{
|
||||||
|
m_bccArray.Add(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::AddFile(const wxFileName& fileName, const wxString mimeMainType, const wxString mimeSubType)
|
||||||
|
{
|
||||||
|
// add new entry
|
||||||
|
m_mimeParts.Add(wxMimePart(fileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
wxRecipientsIterator wxEmailMessage::GetRecipientsIterator()
|
||||||
|
{
|
||||||
|
return wxRecipientsIterator(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxEmailMessage::Encode(wxOutputStream& out)
|
||||||
|
{
|
||||||
|
// TODO: use only MIME if neccessary
|
||||||
|
wxString header;
|
||||||
|
wxString cr(wxT("\x00d\x00a"));
|
||||||
|
// TODO: calculate a more random boundary
|
||||||
|
wxString boundary(wxT("---_0123456789-boundary-9876543210_---"));
|
||||||
|
wxString boundarySep = wxT("--") + boundary + cr;
|
||||||
|
header << wxT("From: ") << m_from << cr;
|
||||||
|
// TODO: add to, cc and bcc in the right format with line breaking, if too long
|
||||||
|
header << wxT("Bcc:") << cr
|
||||||
|
<< wxT("Subject: ") << m_subject << cr // TODO: add Date:
|
||||||
|
<< wxT("MIME-Version: 1.0") << cr
|
||||||
|
<< wxT("Content-Type: multipart/mixed; boundary=\"") << boundary << wxT("\"") << cr
|
||||||
|
<< cr
|
||||||
|
<< cr
|
||||||
|
<< wxT("This is a multi-part message in MIME format") << cr
|
||||||
|
<< cr
|
||||||
|
<< boundarySep
|
||||||
|
<< wxT("Content-Type: text/plain; charset=iso-8859-1") << cr
|
||||||
|
<< wxT("Content-Transfer-Encoding: 8bit") << cr
|
||||||
|
<< cr
|
||||||
|
<< m_text << cr; // TODO: is it possible in MIME message to have a single '.' on a line?
|
||||||
|
out.Write((const char*) header.mb_str(), header.Length());
|
||||||
|
for (size_t i = 0; i < m_mimeParts.GetCount(); i++) {
|
||||||
|
out.Write((const char*) boundarySep.mb_str(), boundarySep.Length());
|
||||||
|
m_mimeParts[i].Encode(out);
|
||||||
|
}
|
||||||
|
wxString footer = wxT("--") + boundary + wxT("--") + cr + wxT(".") + cr; // TODO: perhaps moving the '.\r\n' sequence to another place
|
||||||
|
out.Write((const char*) footer.mb_str(), footer.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
wxRecipientsIterator::wxRecipientsIterator(const wxEmailMessage& emailMessage) :
|
||||||
|
m_emailMessage(emailMessage)
|
||||||
|
{
|
||||||
|
m_rcptCount = 0;
|
||||||
|
m_toCount = 0;
|
||||||
|
m_ccCount = 0;
|
||||||
|
m_bccCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxRecipientsIterator::HasNext()
|
||||||
|
{
|
||||||
|
if (m_rcptCount < m_emailMessage.m_rcptArray.GetCount() ||
|
||||||
|
m_toCount < m_emailMessage.m_toArray.GetCount() ||
|
||||||
|
m_ccCount < m_emailMessage.m_ccArray.GetCount() ||
|
||||||
|
m_bccCount < m_emailMessage.m_bccArray.GetCount())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxRecipientsIterator::GetNext()
|
||||||
|
{
|
||||||
|
if (m_rcptCount < m_emailMessage.m_rcptArray.GetCount()) {
|
||||||
|
return m_emailMessage.m_rcptArray[m_rcptCount++];
|
||||||
|
} else if (m_toCount < m_emailMessage.m_toArray.GetCount()) {
|
||||||
|
return m_emailMessage.m_toArray[m_toCount++];
|
||||||
|
} else if (m_ccCount < m_emailMessage.m_ccArray.GetCount()) {
|
||||||
|
return m_emailMessage.m_ccArray[m_ccCount++];
|
||||||
|
} else if (m_bccCount < m_emailMessage.m_bccArray.GetCount()) {
|
||||||
|
return m_emailMessage.m_bccArray[m_bccCount++];
|
||||||
|
}
|
||||||
|
return wxT("");
|
||||||
|
}
|
||||||
|
|
77
libraries/wxSMTP/email.h
Normal file
77
libraries/wxSMTP/email.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: wxWindows email implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EMAIL_H
|
||||||
|
#define EMAIL_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/filename.h>
|
||||||
|
#include <wx/wfstream.h>
|
||||||
|
|
||||||
|
#include "dllimpexp.h"
|
||||||
|
#include "mime.h"
|
||||||
|
|
||||||
|
// forward declaration
|
||||||
|
class wxRecipientsIterator;
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxEmailMessage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxEmailMessage(const wxString& subject, const wxString& text, const wxString& from);
|
||||||
|
|
||||||
|
const wxString& GetFrom();
|
||||||
|
|
||||||
|
void AddRecipient(const wxString& address);
|
||||||
|
|
||||||
|
void AddTo(const wxString& address);
|
||||||
|
|
||||||
|
void AddCc(const wxString& address);
|
||||||
|
|
||||||
|
void AddBcc(const wxString& address);
|
||||||
|
|
||||||
|
// loads the file in memory and adds it to the message.
|
||||||
|
|
||||||
|
void AddFile(const wxFileName& fileName, const wxString mimeMainType = wxT(""), const wxString mimeSubType = wxT(""));
|
||||||
|
|
||||||
|
wxRecipientsIterator GetRecipientsIterator();
|
||||||
|
|
||||||
|
//
|
||||||
|
void Encode(wxOutputStream& out);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxString m_subject;
|
||||||
|
wxString m_text;
|
||||||
|
wxString m_from;
|
||||||
|
wxArrayString m_rcptArray;
|
||||||
|
wxArrayString m_toArray;
|
||||||
|
wxArrayString m_ccArray;
|
||||||
|
wxArrayString m_bccArray;
|
||||||
|
wxArrayMimePart m_mimeParts;
|
||||||
|
|
||||||
|
friend class wxRecipientsIterator;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class wxRecipientsIterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxRecipientsIterator(const wxEmailMessage& emailMessage);
|
||||||
|
|
||||||
|
bool HasNext();
|
||||||
|
|
||||||
|
wxString GetNext();
|
||||||
|
|
||||||
|
private:
|
||||||
|
const wxEmailMessage& m_emailMessage;
|
||||||
|
size_t m_rcptCount;
|
||||||
|
size_t m_toCount;
|
||||||
|
size_t m_ccCount;
|
||||||
|
size_t m_bccCount;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.dll
Normal file
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.dll
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.exp
Normal file
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.exp
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.dll
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.dll
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.exp
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.exp
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.ilk
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.ilk
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_d/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.dll
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.dll
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.exp
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.exp
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_m/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.dll
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.dll
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.exp
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.exp
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.ilk
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.ilk
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_md/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_ud/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_ud/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.exp
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.exp
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_dll_umd/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_lib/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_d/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_d/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_d/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_d/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_m/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_m/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_md/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_md/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_md/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_md/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_u/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_u/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_ud/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_ud/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_ud/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_ud/wxsmtp.pdb
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_um/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_um/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_umd/wxsmtp.lib
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_umd/wxsmtp.lib
Normal file
Binary file not shown.
BIN
libraries/wxSMTP/lib/vc_lib_umd/wxsmtp.pdb
Normal file
BIN
libraries/wxSMTP/lib/vc_lib_umd/wxsmtp.pdb
Normal file
Binary file not shown.
91
libraries/wxSMTP/mime.cpp
Normal file
91
libraries/wxSMTP/mime.cpp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: wxWindows mime implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "email.h"
|
||||||
|
#include "Base64.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "wx/arrimpl.cpp"
|
||||||
|
WX_DEFINE_OBJARRAY(wxArrayMimePart);
|
||||||
|
|
||||||
|
struct wxMimeTypeMapping
|
||||||
|
{
|
||||||
|
const wxChar* extension;
|
||||||
|
const wxChar* mainType;
|
||||||
|
const wxChar* subType;
|
||||||
|
};
|
||||||
|
|
||||||
|
// extension, main type, sub type
|
||||||
|
// TODO: must be merged / integrated / substituted with wxFileType
|
||||||
|
static const wxMimeTypeMapping g_mimeTypeMappings[] =
|
||||||
|
{
|
||||||
|
{ _T("txt"), _T("text"), _T("plain") },
|
||||||
|
{ _T("htm"), _T("text"), _T("html") },
|
||||||
|
{ _T("html"), _T("text"), _T("html") },
|
||||||
|
{ _T("gif"), _T("image"), _T("gif") },
|
||||||
|
{ _T("png"), _T("image"), _T("png") },
|
||||||
|
{ _T("jpg"), _T("image"), _T("jpeg") },
|
||||||
|
{ _T("jpeg"), _T("image"), _T("jpeg") },
|
||||||
|
{ _T("pdf"), _T("application"), _T("pdf") },
|
||||||
|
{ _T("doc"), _T("application"), _T("msword") }
|
||||||
|
};
|
||||||
|
|
||||||
|
wxMimePart::wxMimePart(const wxFileName& fileName) :
|
||||||
|
m_fileName(fileName)
|
||||||
|
{
|
||||||
|
// setup default encoding
|
||||||
|
m_mainType = _T("application");
|
||||||
|
m_subType = _T("octet-stream");
|
||||||
|
|
||||||
|
// try to determine encoding by filename extension
|
||||||
|
wxString ext = fileName.GetExt().Lower();
|
||||||
|
for (int i = 0; i < sizeof(g_mimeTypeMappings) / sizeof(wxMimeTypeMapping); i++) {
|
||||||
|
if (g_mimeTypeMappings[i].extension == ext) {
|
||||||
|
m_mainType = g_mimeTypeMappings[i].mainType;
|
||||||
|
m_subType = g_mimeTypeMappings[i].subType;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMimePart::Encode(wxOutputStream& out)
|
||||||
|
{
|
||||||
|
// TODO: error handling for every return
|
||||||
|
// TODO: encoding it on-the-fly without loading it all in memory
|
||||||
|
wxFileInputStream in(m_fileName.GetFullPath());
|
||||||
|
if (!in.Ok()) return;
|
||||||
|
|
||||||
|
// determine file length
|
||||||
|
// TODO: perhaps this can be added to wxFileName for size()
|
||||||
|
in.SeekI(0, wxFromEnd);
|
||||||
|
size_t len = (size_t) in.TellI();
|
||||||
|
in.SeekI(0);
|
||||||
|
// that's possible for windows (#include <sys/types.h> and #include <sys/stat.h>):
|
||||||
|
// struct _stat lenStat;
|
||||||
|
// if (_stat(filename, &lenStat) == -1) return error;
|
||||||
|
// size_t len = (size_t) lenStat.st_size;
|
||||||
|
|
||||||
|
if (len == 0) return;
|
||||||
|
|
||||||
|
// read file
|
||||||
|
wxUint8* pData = new wxUint8[len];
|
||||||
|
if (!pData) {
|
||||||
|
wxASSERT_MSG(pData != NULL, _T("out of memory"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
in.Read(pData, len);
|
||||||
|
|
||||||
|
// write encoded mime part to stream
|
||||||
|
wxString cr(wxT("\x00d\x00a"));
|
||||||
|
wxString result;
|
||||||
|
result << wxT("Content-Type: ") << m_mainType << wxT("/") << m_subType << wxT("; name=\"") << m_fileName.GetFullName() + wxT("\"") + cr
|
||||||
|
<< wxT("Content-Transfer-Encoding: base64") << cr
|
||||||
|
<< wxT("Content-Disposition: attachment; filename=\"") << m_fileName.GetName() << wxT("\"") << cr
|
||||||
|
<< cr
|
||||||
|
<< wxBase64::Encode(pData, len) << cr;
|
||||||
|
out.Write((const char*) result.mb_str(), result.Length());
|
||||||
|
}
|
||||||
|
|
29
libraries/wxSMTP/mime.h
Normal file
29
libraries/wxSMTP/mime.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: wxWindows mime implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MIME_H
|
||||||
|
#define MIME_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/filename.h>
|
||||||
|
#include <wx/wfstream.h>
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxMimePart
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxMimePart(const wxFileName& fileName);
|
||||||
|
|
||||||
|
void Encode(wxOutputStream& out);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxFileName m_fileName;
|
||||||
|
wxString m_mainType;
|
||||||
|
wxString m_subType;
|
||||||
|
};
|
||||||
|
|
||||||
|
WX_DECLARE_OBJARRAY(wxMimePart, wxArrayMimePart);
|
||||||
|
|
||||||
|
#endif
|
105
libraries/wxSMTP/smtp.cpp
Normal file
105
libraries/wxSMTP/smtp.cpp
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: private wxWindows mail transport implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wx/sckstrm.h>
|
||||||
|
|
||||||
|
#include "smtp.h"
|
||||||
|
#include "states.h"
|
||||||
|
|
||||||
|
#define SOCKET_ID 1
|
||||||
|
|
||||||
|
wxSMTPListener g_nullListener;
|
||||||
|
|
||||||
|
wxSMTP::wxSMTP(wxSMTPListener* pListener) :
|
||||||
|
m_pMailState(&g_initialState)
|
||||||
|
{
|
||||||
|
if (pListener) {
|
||||||
|
m_pListener = pListener;
|
||||||
|
} else {
|
||||||
|
m_pListener = &g_nullListener;
|
||||||
|
}
|
||||||
|
m_pMessage = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSMTP::~wxSMTP()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::EvaluateLine(const wxString& line)
|
||||||
|
{
|
||||||
|
// TODO: implementing response timeout somewhere
|
||||||
|
// TODO: implementing multiline response
|
||||||
|
|
||||||
|
// get command
|
||||||
|
unsigned long cmd = 0;
|
||||||
|
line.ToULong(&cmd);
|
||||||
|
m_pMailState->onResponse(*this, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::OnConnect(wxSocketEvent& event)
|
||||||
|
{
|
||||||
|
m_pMailState->onConnect(*this, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::Send(wxEmailMessage* pMessage)
|
||||||
|
{
|
||||||
|
// no message means nothing to do
|
||||||
|
if (!pMessage) return;
|
||||||
|
m_pMessage = pMessage;
|
||||||
|
|
||||||
|
// add recipients from message
|
||||||
|
wxRecipientsIterator ri = m_pMessage->GetRecipientsIterator();
|
||||||
|
while (ri.HasNext()) m_recipients.Add(ri.GetNext());
|
||||||
|
m_count = 0;
|
||||||
|
|
||||||
|
// init new socket connection
|
||||||
|
m_pMailState = &g_initialState;
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::ChangeState(const MailState& mailState)
|
||||||
|
{
|
||||||
|
m_pMailState = &mailState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::SendNextRecipient()
|
||||||
|
{
|
||||||
|
if (m_count < m_recipients.GetCount()) {
|
||||||
|
m_currentRecipient = m_recipients[m_count++];
|
||||||
|
Write(wxT("RCPT TO:<") + m_currentRecipient + wxT(">\x00d\x00a"));
|
||||||
|
} else {
|
||||||
|
ChangeState(g_startDataState);
|
||||||
|
Write(wxT("DATA\x00d\x00a"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::OnRecipientError()
|
||||||
|
{
|
||||||
|
m_pListener->OnRecipientAdded(m_currentRecipient, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::OnRecipientSuccess()
|
||||||
|
{
|
||||||
|
m_pListener->OnRecipientAdded(m_currentRecipient, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::OnDataSuccess()
|
||||||
|
{
|
||||||
|
m_pListener->OnDataSent(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::SendFrom()
|
||||||
|
{
|
||||||
|
Write(wxT("MAIL FROM:<") + m_pMessage->GetFrom() + wxT(">\x00d\x00a"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSMTP::SendData()
|
||||||
|
{
|
||||||
|
wxSocketOutputStream out(*this);
|
||||||
|
// wxFileOutputStream out("mail.txt");
|
||||||
|
m_pMessage->Encode(out);
|
||||||
|
}
|
||||||
|
|
69
libraries/wxSMTP/smtp.h
Normal file
69
libraries/wxSMTP/smtp.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: private wxWindows mail transport implementation
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SMPT_H
|
||||||
|
#define SMPT_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/protocol/protocol.h>
|
||||||
|
|
||||||
|
#include "email.h"
|
||||||
|
#include "cmdprot.h"
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxSMTPListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void OnSocketError(int errorCode) {};
|
||||||
|
|
||||||
|
virtual void OnRecipientAdded(const wxString& address, int errorCode) {};
|
||||||
|
|
||||||
|
virtual void OnDataSent(int errorCode) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
class MailState;
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_SMTP wxSMTP : public wxCmdlineProtocol //, public wxEvtHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxSMTP(wxSMTPListener* pListener = NULL);
|
||||||
|
|
||||||
|
~wxSMTP();
|
||||||
|
|
||||||
|
void Send(wxEmailMessage* pMessage);
|
||||||
|
|
||||||
|
void EvaluateLine(const wxString& line);
|
||||||
|
void OnConnect(wxSocketEvent& event);
|
||||||
|
|
||||||
|
// MailStateContext interface
|
||||||
|
|
||||||
|
void ChangeState(const MailState& mailState);
|
||||||
|
|
||||||
|
void SendNextRecipient();
|
||||||
|
|
||||||
|
void OnRecipientError();
|
||||||
|
|
||||||
|
void OnRecipientSuccess();
|
||||||
|
|
||||||
|
void OnDataSuccess();
|
||||||
|
|
||||||
|
void SendFrom();
|
||||||
|
|
||||||
|
void SendData();
|
||||||
|
|
||||||
|
private:
|
||||||
|
const MailState* m_pMailState;
|
||||||
|
wxSMTPListener* m_pListener;
|
||||||
|
wxEmailMessage* m_pMessage;
|
||||||
|
|
||||||
|
// current recipient and counts
|
||||||
|
size_t m_count;
|
||||||
|
wxString m_currentRecipient;
|
||||||
|
|
||||||
|
// all recipients
|
||||||
|
wxArrayString m_recipients;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
251
libraries/wxSMTP/snddlg.cpp
Normal file
251
libraries/wxSMTP/snddlg.cpp
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: Sample application for demonstrating and testing the wxWindows email support
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wx/datstrm.h>
|
||||||
|
|
||||||
|
#include "snddlg.h"
|
||||||
|
#include "wino.h"
|
||||||
|
|
||||||
|
static const wxUint32 g_admFileId = ('a' | ('d' << 8) | ('m' << 16));
|
||||||
|
static const wxUint32 g_admFileVersion = 1;
|
||||||
|
|
||||||
|
// file format tags
|
||||||
|
enum {
|
||||||
|
admTagEnd = 0,
|
||||||
|
admTagGrid = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(SendDialog, wxDialog)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
size_t g_emailCount;
|
||||||
|
|
||||||
|
static bool checkEmail(wxString& email)
|
||||||
|
{
|
||||||
|
static bool validChars[256];
|
||||||
|
static bool initialized = false;
|
||||||
|
if (!initialized) {
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; i <= 255; i++) validChars[i] = false;
|
||||||
|
for (i = 'a'; i <= 'z'; i++) validChars[i] = true;
|
||||||
|
for (i = 'A'; i <= 'Z'; i++) validChars[i] = true;
|
||||||
|
for (i = '0'; i <= '9'; i++) validChars[i] = true;
|
||||||
|
validChars['@'] = true;
|
||||||
|
validChars['.'] = true;
|
||||||
|
validChars['_'] = true;
|
||||||
|
validChars['-'] = true;
|
||||||
|
validChars['~'] = true;
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for valid emails
|
||||||
|
unsigned atcount = 0;
|
||||||
|
unsigned atposition = 0;
|
||||||
|
if (email.Length() < 3) return false;
|
||||||
|
for (unsigned i = 0; i < email.Length(); i++) {
|
||||||
|
wxChar c = email[i];
|
||||||
|
if (!validChars[c]) return false;
|
||||||
|
if (c == '@') {
|
||||||
|
atcount++;
|
||||||
|
atposition = i;
|
||||||
|
if (atcount > 1) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (atcount != 1) return false;
|
||||||
|
if (atposition == 0 || atposition == email.Length() - 1) return false;
|
||||||
|
|
||||||
|
// valid
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addEmails(wxEmailMessage* pMessage, wxFileName* pFilename)
|
||||||
|
{
|
||||||
|
// open file; TODO: file locking
|
||||||
|
wxFileInputStream fileInStream(pFilename->GetFullPath());
|
||||||
|
wxDataInputStream in(fileInStream);
|
||||||
|
|
||||||
|
// check if right file format and file is readable
|
||||||
|
wxUint32 id = in.Read32();
|
||||||
|
wxUint32 version = in.Read32();
|
||||||
|
if (!in.IsOk() || id != g_admFileId || version > g_admFileVersion) {
|
||||||
|
wxMessageDialog errorDialog(NULL, "Fehler beim Öffnen der Datei " + pFilename->GetFullPath() + ", diese Datei wird ignoriert.", "Wino", wxOK | wxICON_INFORMATION);
|
||||||
|
errorDialog.ShowModal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read file
|
||||||
|
bool end = false;
|
||||||
|
while (!end) {
|
||||||
|
wxUint32 tag = in.Read32();
|
||||||
|
wxUint32 size = in.Read32();
|
||||||
|
switch (tag) {
|
||||||
|
case admTagGrid:
|
||||||
|
{
|
||||||
|
// read number of cols and rows
|
||||||
|
size_t cols = in.Read32();
|
||||||
|
size_t rows = in.Read32();
|
||||||
|
|
||||||
|
// read column labels and widths
|
||||||
|
bool found = false;
|
||||||
|
size_t emailIndex = 0;
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < cols; i++) {
|
||||||
|
wxString colLabel = in.ReadString();
|
||||||
|
if (colLabel.CmpNoCase("email") == 0) {
|
||||||
|
found = true;
|
||||||
|
emailIndex = i;
|
||||||
|
}
|
||||||
|
in.Read32();
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
wxString error;
|
||||||
|
error << "Die Datei " << pFilename->GetFullPath() << " enthält keine Tabellenspalte\n"
|
||||||
|
<< "mit dem Namen 'eMail' und wird daher ignoriert.";
|
||||||
|
wxMessageDialog errorDialog(NULL, error, "Wino", wxOK | wxICON_INFORMATION);
|
||||||
|
errorDialog.ShowModal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read emails
|
||||||
|
for (i = 0; i < rows; i++) {
|
||||||
|
for (size_t j = 0; j < cols; j++) {
|
||||||
|
if (j == emailIndex) {
|
||||||
|
wxString email = in.ReadString();
|
||||||
|
if (checkEmail(email)) {
|
||||||
|
pMessage->AddRecipient(email);
|
||||||
|
g_emailCount++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
in.ReadString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case admTagEnd:
|
||||||
|
end = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fileInStream.SeekI(size, wxFromCurrent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SendDialog::SendDialog(WinoDialog& winoDialog)
|
||||||
|
: wxDialog(&winoDialog, -1,
|
||||||
|
_("Wino eMail Versand"),
|
||||||
|
wxDefaultPosition,
|
||||||
|
wxDefaultSize,
|
||||||
|
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
|
||||||
|
{
|
||||||
|
wxString server = winoDialog.m_pServerTextCtrl->GetValue().Trim();
|
||||||
|
wxString subject = winoDialog.m_pSubjectTextCtrl->GetValue().Trim();
|
||||||
|
wxString text = winoDialog.m_pTextTextCtrl->GetValue().Trim();
|
||||||
|
wxString from = winoDialog.m_pFromTextCtrl->GetValue().Trim();
|
||||||
|
wxString to = winoDialog.m_pToTextCtrl->GetValue().Trim();
|
||||||
|
|
||||||
|
g_emailCount = 0;
|
||||||
|
m_successCount = 0;
|
||||||
|
wxBusyCursor wait;
|
||||||
|
|
||||||
|
// create transport class
|
||||||
|
m_pSMTP = new wxSMTP(this);
|
||||||
|
m_pSMTP->SetHost(server);
|
||||||
|
|
||||||
|
// create message class
|
||||||
|
m_pMessage = new wxEmailMessage(subject, text, from);
|
||||||
|
|
||||||
|
// add 'to'-recipient to message
|
||||||
|
m_pMessage->AddTo(to);
|
||||||
|
|
||||||
|
// add files to message
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < winoDialog.m_pFilelist->GetCount(); i++) {
|
||||||
|
wxFileName* pFilename = (wxFileName*) winoDialog.m_pFilelist->GetClientData(i);
|
||||||
|
m_pMessage->AddFile(*pFilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add emails to message
|
||||||
|
for (i = 0; i < winoDialog.m_pAddresslist->GetCount(); i++) {
|
||||||
|
wxFileName* pFilename = (wxFileName*) winoDialog.m_pAddresslist->GetClientData(i);
|
||||||
|
addEmails(m_pMessage, pFilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert email count to string
|
||||||
|
wxString emailCount;
|
||||||
|
emailCount << g_emailCount;
|
||||||
|
|
||||||
|
// create dialog
|
||||||
|
wxBoxSizer* pTopSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
wxBoxSizer* pStatusSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pStatusSizer->Add(new wxStaticText(this, -1, "Status:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pStatusText = new wxStaticText(this, -1, "eMail-Adressen werden gesendet...", wxDefaultPosition, wxSize(100, 10));
|
||||||
|
pStatusSizer->Add(m_pStatusText, 3, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pStatusSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxBoxSizer* pEmailCountSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pEmailCountSizer->Add(new wxStaticText(this, -1, "Anzahl gültiger eMail Adressen:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pEmailCountText = new wxStaticText(this, -1, emailCount, wxDefaultPosition, wxSize(100, 10));
|
||||||
|
pEmailCountSizer->Add(m_pEmailCountText, 3, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pEmailCountSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxBoxSizer* pEmailSuccessSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pEmailSuccessSizer->Add(new wxStaticText(this, -1, "Davon erfolgreich versendet:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pEmailSuccessText = new wxStaticText(this, -1, "0", wxDefaultPosition, wxSize(100, 10));
|
||||||
|
pEmailSuccessSizer->Add(m_pEmailSuccessText, 3, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pEmailSuccessSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxStaticBoxSizer* pLogSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, "Bericht"), wxVERTICAL);
|
||||||
|
m_pLogTextCtrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxSize(500, 300), wxTE_MULTILINE | wxTE_READONLY);
|
||||||
|
pLogSizer->Add(m_pLogTextCtrl, 0, wxEXPAND | wxALL, 10);
|
||||||
|
pTopSizer->Add(pLogSizer, 0, wxEXPAND | wxALL, 10);
|
||||||
|
|
||||||
|
wxBoxSizer* pSendCloseSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxButton* pCloseButton = new wxButton(this, wxID_CANCEL, "Beenden");
|
||||||
|
pCloseButton->SetDefault();
|
||||||
|
pSendCloseSizer->Add(pCloseButton, 0, wxALL, 10);
|
||||||
|
pTopSizer->Add(pSendCloseSizer, 0, wxALIGN_RIGHT);
|
||||||
|
|
||||||
|
SetAutoLayout(true);
|
||||||
|
SetSizer(pTopSizer);
|
||||||
|
pTopSizer->Fit(this);
|
||||||
|
pTopSizer->SetSizeHints(this);
|
||||||
|
|
||||||
|
// show dialog
|
||||||
|
Centre(wxBOTH | wxCENTRE_ON_SCREEN);
|
||||||
|
|
||||||
|
// start email sending
|
||||||
|
m_pSMTP->Send(m_pMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
SendDialog::~SendDialog()
|
||||||
|
{
|
||||||
|
delete m_pSMTP;
|
||||||
|
delete m_pMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SendDialog::OnSocketError(int errorCode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SendDialog::OnRecipientAdded(const wxString& address, int errorCode)
|
||||||
|
{
|
||||||
|
if (errorCode) {
|
||||||
|
m_successCount++;
|
||||||
|
wxString l;
|
||||||
|
l << m_successCount;
|
||||||
|
m_pEmailSuccessText->SetLabel(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SendDialog::OnDataSent(int errorCode)
|
||||||
|
{
|
||||||
|
m_pStatusText->SetLabel("eMail-Versand beendet.");
|
||||||
|
wxMessageBox(_("eMail-Versand beendet."), _("Wino"), wxOK | wxICON_INFORMATION);
|
||||||
|
}
|
45
libraries/wxSMTP/snddlg.h
Normal file
45
libraries/wxSMTP/snddlg.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: Sample application for demonstrating and testing the wxWindows email support
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SNDDLG_H
|
||||||
|
#define SNDDLG_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
|
|
||||||
|
#include "smtp.h"
|
||||||
|
|
||||||
|
class WinoDialog;
|
||||||
|
|
||||||
|
class SendDialog : public wxDialog, public wxSMTPListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SendDialog(WinoDialog& winoDialog);
|
||||||
|
|
||||||
|
virtual ~SendDialog();
|
||||||
|
|
||||||
|
void OnSocketError(int errorCode);
|
||||||
|
|
||||||
|
void OnRecipientAdded(const wxString& address, int errorCode);
|
||||||
|
|
||||||
|
void OnDataSent(int errorCode);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxSMTP* m_pSMTP;
|
||||||
|
wxEmailMessage* m_pMessage;
|
||||||
|
|
||||||
|
wxStaticText* m_pStatusText;
|
||||||
|
wxStaticText* m_pEmailCountText;
|
||||||
|
wxStaticText* m_pEmailSuccessText;
|
||||||
|
wxTextCtrl* m_pLogTextCtrl;
|
||||||
|
|
||||||
|
size_t m_successCount;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
94
libraries/wxSMTP/states.cpp
Normal file
94
libraries/wxSMTP/states.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: private wxWindows helper classes for SMTP
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "states.h"
|
||||||
|
|
||||||
|
|
||||||
|
const InitialState g_initialState;
|
||||||
|
const ConnectedState g_connectedState;
|
||||||
|
const HeloState g_heloState;
|
||||||
|
const SendMailFromState g_sendMailFromState;
|
||||||
|
const RcptListState g_rcptListState;
|
||||||
|
const StartDataState g_startDataState;
|
||||||
|
const DataState g_dataState;
|
||||||
|
|
||||||
|
|
||||||
|
void InitialState::onConnect(wxSMTP& context, wxSocketEvent& event) const
|
||||||
|
{
|
||||||
|
if (event.GetSocketEvent() == wxSOCKET_CONNECTION) {
|
||||||
|
context.ChangeState(g_connectedState);
|
||||||
|
} else {
|
||||||
|
// error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ConnectedState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
if (smtpCode == 220) {
|
||||||
|
context.ChangeState(g_heloState);
|
||||||
|
// TODO: using some wxWindows function for getting the hostname
|
||||||
|
context.Write(wxT("HELO localhost\x00d\x00a"));
|
||||||
|
} else {
|
||||||
|
// error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HeloState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
if (smtpCode == 250) {
|
||||||
|
context.ChangeState(g_sendMailFromState);
|
||||||
|
context.SendFrom();
|
||||||
|
} else {
|
||||||
|
// error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SendMailFromState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
if (smtpCode == 250) {
|
||||||
|
context.ChangeState(g_rcptListState);
|
||||||
|
context.SendNextRecipient();
|
||||||
|
} else {
|
||||||
|
// error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RcptListState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
switch (smtpCode) {
|
||||||
|
case 250:
|
||||||
|
case 251:
|
||||||
|
context.OnRecipientSuccess();
|
||||||
|
break;
|
||||||
|
case 421: // service not available
|
||||||
|
// error
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
context.OnRecipientError();
|
||||||
|
}
|
||||||
|
context.SendNextRecipient();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void StartDataState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
if (smtpCode == 354) {
|
||||||
|
context.ChangeState(g_dataState);
|
||||||
|
context.SendData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DataState::onResponse(wxSMTP& context, int smtpCode) const
|
||||||
|
{
|
||||||
|
if (smtpCode == 250) {
|
||||||
|
context.OnDataSuccess();
|
||||||
|
}
|
||||||
|
}
|
78
libraries/wxSMTP/states.h
Normal file
78
libraries/wxSMTP/states.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: private wxWindows helper classes for SMTP
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STATES_H
|
||||||
|
#define STATES_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/socket.h>
|
||||||
|
|
||||||
|
#include "smtp.h"
|
||||||
|
|
||||||
|
class MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void onConnect(wxSMTP& context, wxSocketEvent& event) const {}
|
||||||
|
virtual void onResponse(wxSMTP& context, int smtpCode) const {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class InitialState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onConnect(wxSMTP& context, wxSocketEvent& event) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectedState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class HeloState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class SendMailFromState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class RcptListState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class StartDataState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class DataState : public MailState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void onResponse(wxSMTP& context, int smtpCode) const ;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const InitialState g_initialState;
|
||||||
|
extern const ConnectedState g_connectedState;
|
||||||
|
extern const HeloState g_heloState;
|
||||||
|
extern const SendMailFromState g_sendMailFromState;
|
||||||
|
extern const RcptListState g_rcptListState;
|
||||||
|
extern const StartDataState g_startDataState;
|
||||||
|
extern const DataState g_dataState;
|
||||||
|
|
||||||
|
#endif
|
178
libraries/wxSMTP/wino.cpp
Normal file
178
libraries/wxSMTP/wino.cpp
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: Sample application for demonstrating and testing the wxWindows email support
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wino.h"
|
||||||
|
#include "snddlg.h"
|
||||||
|
|
||||||
|
static const char sccsid[] = "%W% %G%";
|
||||||
|
|
||||||
|
#include "wino.xpm"
|
||||||
|
#include "snddlg.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ID_SEND_BUTTON = 1,
|
||||||
|
ID_FILE_ADD_BUTTON,
|
||||||
|
ID_FILE_REMOVE_BUTTON,
|
||||||
|
ID_ADDRESS_ADD_BUTTON,
|
||||||
|
ID_ADDRESS_REMOVE_BUTTON
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(WinoDialog, wxDialog)
|
||||||
|
EVT_BUTTON(ID_SEND_BUTTON, WinoDialog::OnSendButton)
|
||||||
|
EVT_BUTTON(ID_FILE_ADD_BUTTON, WinoDialog::OnFileAddButton)
|
||||||
|
EVT_BUTTON(ID_FILE_REMOVE_BUTTON, WinoDialog::OnFileRemoveButton)
|
||||||
|
EVT_BUTTON(ID_ADDRESS_ADD_BUTTON, WinoDialog::OnAddressAddButton)
|
||||||
|
EVT_BUTTON(ID_ADDRESS_REMOVE_BUTTON, WinoDialog::OnAddressRemoveButton)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
|
IMPLEMENT_APP(WinoApp)
|
||||||
|
|
||||||
|
|
||||||
|
bool WinoApp::OnInit(void)
|
||||||
|
{
|
||||||
|
WinoDialog dialog(NULL);
|
||||||
|
dialog.ShowModal();
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "base64.h"
|
||||||
|
|
||||||
|
WinoDialog::WinoDialog(wxWindow *parent)
|
||||||
|
: wxDialog(parent, -1,
|
||||||
|
_("Wino - Wino Is Not Outlook"),
|
||||||
|
wxDefaultPosition,
|
||||||
|
wxDefaultSize,
|
||||||
|
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
|
||||||
|
{
|
||||||
|
|
||||||
|
// TODO: save pointers to member variables in delete it in destructor
|
||||||
|
wxBoxSizer* pTopSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
wxBoxSizer* pServerSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pServerSizer->Add(new wxStaticText(this, -1, "SMTP Server:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pServerTextCtrl = new wxTextCtrl(this, -1);
|
||||||
|
pServerSizer->Add(m_pServerTextCtrl, 5, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pServerSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxBoxSizer* pFromSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pFromSizer->Add(new wxStaticText(this, -1, "Absender:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pFromTextCtrl = new wxTextCtrl(this, -1);
|
||||||
|
pFromSizer->Add(m_pFromTextCtrl, 5, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pFromSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxBoxSizer* pToSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pToSizer->Add(new wxStaticText(this, -1, "An:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pToTextCtrl = new wxTextCtrl(this, -1);
|
||||||
|
pToSizer->Add(m_pToTextCtrl, 5, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pToSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
wxBoxSizer* pSubjectSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pSubjectSizer->Add(new wxStaticText(this, -1, "Betreff:"), 1, wxALIGN_CENTER | wxLEFT | wxTOP, 10);
|
||||||
|
m_pSubjectTextCtrl = new wxTextCtrl(this, -1);
|
||||||
|
pSubjectSizer->Add(m_pSubjectTextCtrl, 5, wxLEFT | wxTOP | wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER | wxEXPAND, 10);
|
||||||
|
pTopSizer->Add(pSubjectSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
m_pTextTextCtrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxSize(100, 200), wxTE_MULTILINE);
|
||||||
|
pTopSizer->Add(m_pTextTextCtrl, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 10);
|
||||||
|
|
||||||
|
// list ctrls
|
||||||
|
wxBoxSizer* pListsSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxBoxSizer* pFilelistSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, "Dateianhänge"), wxVERTICAL);
|
||||||
|
wxBoxSizer* pFilelistButtonsSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pFilelistButtonsSizer->Add(new wxButton(this, ID_FILE_ADD_BUTTON, "Datei hinzufügen"), 1, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, 10);
|
||||||
|
pFilelistButtonsSizer->Add(new wxButton(this, ID_FILE_REMOVE_BUTTON, "Markierte entfernen"), 1, wxEXPAND | wxALL, 10);
|
||||||
|
m_pFilelist = new wxListBox(this, -1, wxDefaultPosition, wxSize(50, 50));
|
||||||
|
pFilelistSizer->Add(m_pFilelist, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 10);
|
||||||
|
pFilelistSizer->Add(pFilelistButtonsSizer, 0, wxEXPAND);
|
||||||
|
pListsSizer->Add(pFilelistSizer, 1, wxEXPAND | wxLEFT | wxTOP, 10);
|
||||||
|
wxBoxSizer* pAddresslistSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, "Address Manager Dateien"), wxVERTICAL);
|
||||||
|
wxBoxSizer* pAddresslistButtonsSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pAddresslistButtonsSizer->Add(new wxButton(this, ID_ADDRESS_ADD_BUTTON, "Datei hinzufügen"), 1, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, 10);
|
||||||
|
pAddresslistButtonsSizer->Add(new wxButton(this, ID_ADDRESS_REMOVE_BUTTON, "Markierte entfernen"), 1, wxEXPAND | wxALL, 10);
|
||||||
|
m_pAddresslist = new wxListBox(this, -1, wxDefaultPosition, wxSize(50, 50));
|
||||||
|
pAddresslistSizer->Add(m_pAddresslist, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 10);
|
||||||
|
pAddresslistSizer->Add(pAddresslistButtonsSizer, 0, wxEXPAND);
|
||||||
|
pListsSizer->Add(pAddresslistSizer, 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 10);
|
||||||
|
pTopSizer->Add(pListsSizer, 0, wxEXPAND);
|
||||||
|
|
||||||
|
// send close button
|
||||||
|
wxBoxSizer* pSendCloseSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pSendCloseSizer->Add(new wxButton(this, ID_SEND_BUTTON, "eMail verschicken"), 0, wxTOP | wxBOTTOM, 10);
|
||||||
|
wxButton* pCloseButton = new wxButton(this, wxID_CANCEL, "Beenden");
|
||||||
|
pCloseButton->SetDefault();
|
||||||
|
pSendCloseSizer->Add(pCloseButton, 0, wxALL, 10);
|
||||||
|
pTopSizer->Add(pSendCloseSizer, 0, wxALIGN_RIGHT);
|
||||||
|
|
||||||
|
SetAutoLayout(true);
|
||||||
|
SetSizer(pTopSizer);
|
||||||
|
pTopSizer->Fit(this);
|
||||||
|
pTopSizer->SetSizeHints(this);
|
||||||
|
|
||||||
|
// set some default values for testing
|
||||||
|
m_pServerTextCtrl->SetValue("merlin"); // my local unix server
|
||||||
|
m_pSubjectTextCtrl->SetValue("");
|
||||||
|
m_pTextTextCtrl->SetValue("");
|
||||||
|
m_pFromTextCtrl->SetValue("fb@frank-buss.de");
|
||||||
|
m_pToTextCtrl->SetValue("somebody@frank-buss.de");
|
||||||
|
|
||||||
|
// show dialog
|
||||||
|
Centre(wxBOTH | wxCENTRE_ON_SCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WinoDialog::~WinoDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WinoDialog::OnSendButton(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
SendDialog dialog(*this);
|
||||||
|
dialog.ShowModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WinoDialog::OnFileAddButton(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
wxFileDialog dialog(this, "Datei Hinzufügen", "", "", "Alle Dateien (*)|*", wxOPEN);
|
||||||
|
if (dialog.ShowModal() == wxID_OK) {
|
||||||
|
wxFileName* pFilename = new wxFileName(dialog.GetPath());
|
||||||
|
m_pFilelist->Append(pFilename->GetFullName(), pFilename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinoDialog::OnFileRemoveButton(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
int sel = m_pFilelist->GetSelection();
|
||||||
|
if (sel != -1) {
|
||||||
|
wxFileName* pFilename = (wxFileName*) m_pFilelist->GetClientData(sel);
|
||||||
|
m_pFilelist->Delete(sel);
|
||||||
|
delete pFilename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinoDialog::OnAddressAddButton(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
wxFileDialog dialog(this, "Address Manager Datei Empfängerliste Hinzufügen", "", "", "Address Manager Dateien (*.adm)|*.adm", wxOPEN);
|
||||||
|
if (dialog.ShowModal() == wxID_OK) {
|
||||||
|
wxFileName* pFilename = new wxFileName(dialog.GetPath());
|
||||||
|
m_pAddresslist->Append(pFilename->GetFullName(), pFilename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinoDialog::OnAddressRemoveButton(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
int sel = m_pAddresslist->GetSelection();
|
||||||
|
if (sel != -1) {
|
||||||
|
wxFileName* pFilename = (wxFileName*) m_pAddresslist->GetClientData(sel);
|
||||||
|
m_pAddresslist->Delete(sel);
|
||||||
|
delete pFilename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
54
libraries/wxSMTP/wino.h
Normal file
54
libraries/wxSMTP/wino.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Purpose: Sample application for demonstrating and testing the wxWindows email support
|
||||||
|
* Author: Frank Buß
|
||||||
|
* Created: 2002
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WINO_H
|
||||||
|
#define WINO_H
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
|
|
||||||
|
#if !defined(__WXMSW__)
|
||||||
|
extern char* wino_xpm[];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class WinoApp : public wxApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool OnInit();
|
||||||
|
};
|
||||||
|
|
||||||
|
class WinoDialog : public wxDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WinoDialog(wxWindow *parent);
|
||||||
|
~WinoDialog();
|
||||||
|
|
||||||
|
void OnSendButton(wxCommandEvent &event);
|
||||||
|
|
||||||
|
void OnFileAddButton(wxCommandEvent &event);
|
||||||
|
|
||||||
|
void OnFileRemoveButton(wxCommandEvent &event);
|
||||||
|
|
||||||
|
void OnAddressAddButton(wxCommandEvent &event);
|
||||||
|
|
||||||
|
void OnAddressRemoveButton(wxCommandEvent &event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxTextCtrl* m_pServerTextCtrl;
|
||||||
|
wxTextCtrl* m_pFromTextCtrl;
|
||||||
|
wxTextCtrl* m_pToTextCtrl;
|
||||||
|
wxTextCtrl* m_pSubjectTextCtrl;
|
||||||
|
wxTextCtrl* m_pTextTextCtrl;
|
||||||
|
wxListBox* m_pFilelist;
|
||||||
|
wxListBox* m_pAddresslist;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
|
friend class SendDialog;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
117
libraries/wxSMTP/wxsmtp.sln
Normal file
117
libraries/wxSMTP/wxsmtp.sln
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 15
|
||||||
|
VisualStudioVersion = 15.0.34930.48
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxsmtp", "wxsmtp.vcxproj", "{ECA5FC4D-29CE-5030-9175-551834BF6CB0}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
DLL ANSI Debug Monolithic|Win32 = DLL ANSI Debug Monolithic|Win32
|
||||||
|
DLL ANSI Debug Multilib|Win32 = DLL ANSI Debug Multilib|Win32
|
||||||
|
DLL ANSI Release Monolithic|Win32 = DLL ANSI Release Monolithic|Win32
|
||||||
|
DLL ANSI Release Multilib|Win32 = DLL ANSI Release Multilib|Win32
|
||||||
|
DLL Debug|Win32 = DLL Debug|Win32
|
||||||
|
DLL Release|Win32 = DLL Release|Win32
|
||||||
|
DLL Unicode Debug Monolithic|Win32 = DLL Unicode Debug Monolithic|Win32
|
||||||
|
DLL Unicode Debug Multilib|Win32 = DLL Unicode Debug Multilib|Win32
|
||||||
|
DLL Unicode Debug|Win32 = DLL Unicode Debug|Win32
|
||||||
|
DLL Unicode Release Monolithic|Win32 = DLL Unicode Release Monolithic|Win32
|
||||||
|
DLL Unicode Release Multilib|Win32 = DLL Unicode Release Multilib|Win32
|
||||||
|
DLL Unicode Release|Win32 = DLL Unicode Release|Win32
|
||||||
|
DLL Universal Debug|Win32 = DLL Universal Debug|Win32
|
||||||
|
DLL Universal Release|Win32 = DLL Universal Release|Win32
|
||||||
|
DLL Universal Unicode Debug|Win32 = DLL Universal Unicode Debug|Win32
|
||||||
|
DLL Universal Unicode Release|Win32 = DLL Universal Unicode Release|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Static ANSI Debug Monolithic|Win32 = Static ANSI Debug Monolithic|Win32
|
||||||
|
Static ANSI Debug Multilib|Win32 = Static ANSI Debug Multilib|Win32
|
||||||
|
Static ANSI Release Monolithic|Win32 = Static ANSI Release Monolithic|Win32
|
||||||
|
Static ANSI Release Multilib|Win32 = Static ANSI Release Multilib|Win32
|
||||||
|
Static Unicode Debug Monolithic|Win32 = Static Unicode Debug Monolithic|Win32
|
||||||
|
Static Unicode Debug Multilib|Win32 = Static Unicode Debug Multilib|Win32
|
||||||
|
Static Unicode Release Monolithic|Win32 = Static Unicode Release Monolithic|Win32
|
||||||
|
Static Unicode Release Multilib|Win32 = Static Unicode Release Multilib|Win32
|
||||||
|
Template|Win32 = Template|Win32
|
||||||
|
Unicode Debug|Win32 = Unicode Debug|Win32
|
||||||
|
Unicode Release|Win32 = Unicode Release|Win32
|
||||||
|
Universal Debug|Win32 = Universal Debug|Win32
|
||||||
|
Universal Release|Win32 = Universal Release|Win32
|
||||||
|
Universal Unicode Debug|Win32 = Universal Unicode Debug|Win32
|
||||||
|
Universal Unicode Release|Win32 = Universal Unicode Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Debug|Win32.ActiveCfg = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Debug|Win32.Build.0 = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Debug Monolithic|Win32.ActiveCfg = DLL ANSI Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Debug Monolithic|Win32.Build.0 = DLL ANSI Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Debug Multilib|Win32.ActiveCfg = DLL ANSI Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Debug Multilib|Win32.Build.0 = DLL ANSI Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Release Monolithic|Win32.ActiveCfg = DLL ANSI Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Release Monolithic|Win32.Build.0 = DLL ANSI Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Release Multilib|Win32.ActiveCfg = DLL ANSI Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL ANSI Release Multilib|Win32.Build.0 = DLL ANSI Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Debug|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Debug|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Release|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Release|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug Monolithic|Win32.ActiveCfg = DLL Unicode Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug Monolithic|Win32.Build.0 = DLL Unicode Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug Multilib|Win32.ActiveCfg = DLL Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug Multilib|Win32.Build.0 = DLL Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug|Win32.ActiveCfg = DLL Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Debug|Win32.Build.0 = DLL Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release Monolithic|Win32.ActiveCfg = DLL Unicode Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release Monolithic|Win32.Build.0 = DLL Unicode Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release Multilib|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release Multilib|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Unicode Release|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Debug|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Debug|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Release|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Release|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Unicode Debug|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Unicode Debug|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Unicode Release|Win32.ActiveCfg = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.DLL Universal Unicode Release|Win32.Build.0 = DLL Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Release|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Release|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Debug Monolithic|Win32.ActiveCfg = Static ANSI Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Debug Monolithic|Win32.Build.0 = Static ANSI Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Debug Multilib|Win32.ActiveCfg = Static ANSI Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Debug Multilib|Win32.Build.0 = Static ANSI Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Release Monolithic|Win32.ActiveCfg = Static ANSI Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Release Monolithic|Win32.Build.0 = Static ANSI Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Release Multilib|Win32.ActiveCfg = Static ANSI Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static ANSI Release Multilib|Win32.Build.0 = Static ANSI Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Debug Monolithic|Win32.ActiveCfg = Static Unicode Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Debug Monolithic|Win32.Build.0 = Static Unicode Debug Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Debug Multilib|Win32.ActiveCfg = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Debug Multilib|Win32.Build.0 = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Release Monolithic|Win32.ActiveCfg = Static Unicode Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Release Monolithic|Win32.Build.0 = Static Unicode Release Monolithic|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Release Multilib|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Static Unicode Release Multilib|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Template|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Template|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Unicode Debug|Win32.ActiveCfg = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Unicode Debug|Win32.Build.0 = Static Unicode Debug Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Unicode Release|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Unicode Release|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Debug|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Debug|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Release|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Release|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Unicode Debug|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Unicode Debug|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Unicode Release|Win32.ActiveCfg = Static Unicode Release Multilib|Win32
|
||||||
|
{ECA5FC4D-29CE-5030-9175-551834BF6CB0}.Universal Unicode Release|Win32.Build.0 = Static Unicode Release Multilib|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {3EF6ACB4-F0B8-4360-9E31-87F7891CCCEE}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
1038
libraries/wxSMTP/wxsmtp.vcxproj
Normal file
1038
libraries/wxSMTP/wxsmtp.vcxproj
Normal file
File diff suppressed because it is too large
Load Diff
54
libraries/wxSMTP/wxsmtp.vcxproj.filters
Normal file
54
libraries/wxSMTP/wxsmtp.vcxproj.filters
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Headers">
|
||||||
|
<UniqueIdentifier>{0b9dfa36-5e19-4996-99a3-f8db11300859}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Sources">
|
||||||
|
<UniqueIdentifier>{14ba8cad-ddd9-476d-ab91-87c47dd00807}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="smtp.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="states.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cmdprot.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="email.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="mime.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="base64.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="dllimpexp.h">
|
||||||
|
<Filter>Headers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="smtp.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="states.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="email.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="mime.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cmdprot.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="base64.cpp">
|
||||||
|
<Filter>Sources</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
9
src/ba/ba0100m.h
Normal file
9
src/ba/ba0100m.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#define F_SERVER 101
|
||||||
|
#define F_PORT 102
|
||||||
|
#define F_TYPE 103
|
||||||
|
#define F_MUSR 104
|
||||||
|
#define F_MPWD 105
|
||||||
|
#define F_FROM 106
|
||||||
|
#define F_RETRY 107
|
||||||
|
#define F_FIRM 108
|
||||||
|
#define F_CCN 109
|
Loading…
x
Reference in New Issue
Block a user