Added simple UNIX implementation

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11568 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2001-09-06 19:27:52 +00:00
parent 977bf6ff42
commit a23c00470e
5 changed files with 105 additions and 10 deletions

View File

@ -33,7 +33,8 @@ public:
// Send a message.
// Specify profile, or leave it to wxWindows to find the current user name
static bool Send(wxMailMessage& message, const wxString& profileName = wxEmptyString );
static bool Send(wxMailMessage& message, const wxString& profileName = wxEmptyString,
const wxString& sendMail = wxT("/usr/lib/sendmail -t"));
protected:
};

View File

@ -27,12 +27,14 @@ public:
// A common usage
wxMailMessage(const wxString& subject, const wxString& to,
const wxString& body, const wxString& attachment = wxEmptyString,
const wxString& body, const wxString& from = wxEmptyString,
const wxString& attachment = wxEmptyString,
const wxString& attachmentTitle = wxEmptyString)
{
m_to.Add(to);
m_subject = subject;
m_body = body;
m_from = from;
if (!attachment.IsEmpty())
{
m_attachments.Add(attachment);
@ -52,9 +54,11 @@ public:
void SetSubject(const wxString& subject) { m_subject = subject; }
void SetBody(const wxString& body) { m_body = body; }
void SetFrom(const wxString& from) { m_from = from; }
public:
wxArrayString m_to; //The To: Recipients
wxString m_from; //The From: email address (optional)
wxArrayString m_cc; //The CC: Recipients
wxArrayString m_bcc; //The BCC Recipients
wxString m_subject; //The Subject of the message

View File

@ -84,15 +84,23 @@ LIB32=link.exe -lib
# Name "NetVC - Win32 Debug"
# Begin Source File
SOURCE=.\smapi.cpp
# End Source File
# Begin Source File
SOURCE=.\email.cpp
# End Source File
# Begin Source File
SOURCE=.\web.cpp
SOURCE=..\..\include\wx\net\email.h
# End Source File
# Begin Source File
SOURCE=..\..\include\wx\net\msg.h
# End Source File
# Begin Source File
SOURCE=.\readme.txt
# End Source File
# Begin Source File
SOURCE=.\smapi.cpp
# End Source File
# Begin Source File
@ -100,7 +108,11 @@ SOURCE=..\..\include\wx\net\smapi.h
# End Source File
# Begin Source File
SOURCE=.\readme.txt
SOURCE=.\web.cpp
# End Source File
# Begin Source File
SOURCE=..\..\include\wx\net\web.h
# End Source File
# End Target
# End Project

View File

@ -31,11 +31,19 @@
#include "wx/net/smapi.h"
#endif
#ifdef __UNIX__
#include "wx/filefn.h"
#include "wx/timer.h"
#include "wx/wfstream.h"
#include "stdlib.h"
#include "process.h"
#endif
// Send a message.
// Specify profile, or leave it to wxWindows to find the current user name
#ifdef __WXMSW__
bool wxEmail::Send(wxMailMessage& message, const wxString& profileName)
bool wxEmail::Send(wxMailMessage& message, const wxString& profileName, const wxString& WXUNUSED(sendMail))
{
wxASSERT (message.m_to.GetCount() > 0) ;
@ -52,6 +60,64 @@ bool wxEmail::Send(wxMailMessage& message, const wxString& profileName)
return session.Send(message);
}
#elif defined(__UNIX__)
bool wxEmail::Send(wxMailMessage& message, const wxString& profileName, const wxString& sendMail)
{
wxASSERT (message.m_to.GetCount() > 0) ;
// The 'from' field is optionally supplied by the app; it's not needed
// by MAPI, and on Unix, will be guessed if not supplied.
wxString from = message.m_from;
if (from.IsEmpty())
{
from = wxGetEmailAddress();
}
wxASSERT (!from.IsEmpty());
wxString msg;
msg << wxT("To: ");
size_t i;
for (i = 0; i < message.m_to.GetCount(); i++)
{
msg << message.m_to[i];
if (i < message.m_to.GetCount())
msg << wxT(", ");
}
msg << wxT("\nFrom: ") << from << wxT("\nSubject: ") << message.m_subject;
msg << wxT("\n\n") << message.m_body;
wxString filename;
filename.Printf(wxT("/tmp/msg-%ld-%ld-%ld.txt"), (long) getpid(), wxGetLocalTime(),
(long) rand());
{
wxFileOutputStream stream(filename);
if (stream.Ok())
{
stream.Write(msg, msg.Length());
}
else
{
return FALSE ;
}
}
// TODO search for a suitable sendmail if sendMail is empty
wxString sendmail(sendMail);
wxString cmd;
cmd << sendmail << wxT(" < ") << filename;
// TODO: check return code
wxSystem(cmd.c_str());
wxRemoveFile(filename);
return TRUE;
}
#else
#error Send not yet implemented for this platform.
#endif

View File

@ -286,6 +286,17 @@ bool wxMapiSession::Send(wxMailMessage& message)
//Allocate the recipients array
mapiMessage.lpRecips = new MapiRecipDesc[mapiMessage.nRecipCount];
// If we have a 'From' field, use it
if (!message.m_from.IsEmpty())
{
mapiMessage.lpOriginator = new MapiRecipDesc;
ZeroMemory(mapiMessage.lpOriginator, sizeof(MapiRecipDesc));
mapiMessage.lpOriginator->ulRecipClass = MAPI_ORIG;
// TODO Do we have to call Resolve?
mapiMessage.lpOriginator->lpszName = (LPSTR) message.m_from.c_str();
}
//Setup the "To" recipients
int nRecipIndex = 0;
@ -413,8 +424,9 @@ bool wxMapiSession::Send(wxMailMessage& message)
if (nAttachmentSize)
delete [] mapiMessage.lpFiles;
//Free up the Recipients memory
//Free up the Recipients and Originator memory
delete [] mapiMessage.lpRecips;
delete mapiMessage.lpOriginator;
return bSuccess;
}