]>
Commit | Line | Data |
---|---|---|
1 | ///////////////////////////////////////////////////////////////////////////// | |
2 | // Name: email.h | |
3 | // Purpose: wxEmail: portable email client class | |
4 | // Author: Julian Smart | |
5 | // Modified by: | |
6 | // Created: 2001-08-21 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Julian Smart | |
9 | // Licence: wxWindows licence | |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | // For compilers that support precompilation, includes "wx/wx.h". | |
13 | #include "wx/wxprec.h" | |
14 | ||
15 | #ifdef __BORLANDC__ | |
16 | #pragma hdrstop | |
17 | #endif | |
18 | ||
19 | #ifndef WX_PRECOMP | |
20 | #include "wx/wx.h" | |
21 | #endif | |
22 | ||
23 | #include "wx/string.h" | |
24 | #include "wx/net/email.h" | |
25 | ||
26 | #ifdef __WXMSW__ | |
27 | #include "wx/net/smapi.h" | |
28 | #endif | |
29 | ||
30 | #ifdef __UNIX__ | |
31 | #include "wx/filefn.h" | |
32 | #include "wx/timer.h" | |
33 | #include "wx/wfstream.h" | |
34 | #include "stdlib.h" | |
35 | #include "unistd.h" | |
36 | #endif | |
37 | ||
38 | // Send a message. | |
39 | // Specify profile, or leave it to wxWidgets to find the current user name | |
40 | ||
41 | #ifdef __WXMSW__ | |
42 | bool wxEmail::Send(wxMailMessage& message, const wxString& profileName, const wxString& WXUNUSED(sendMail)) | |
43 | { | |
44 | wxASSERT (message.m_to.GetCount() > 0) ; | |
45 | ||
46 | wxString profile(profileName); | |
47 | if (profile.IsEmpty()) | |
48 | profile = wxGetUserName(); | |
49 | ||
50 | wxMapiSession session; | |
51 | ||
52 | if (!session.MapiInstalled()) | |
53 | return FALSE; | |
54 | if (!session.Logon(profile)) | |
55 | return FALSE; | |
56 | ||
57 | return session.Send(message); | |
58 | } | |
59 | #elif defined(__UNIX__) | |
60 | bool | |
61 | wxEmail::Send(wxMailMessage& message, | |
62 | const wxString& profileName, | |
63 | const wxString& sendMail) | |
64 | { | |
65 | wxASSERT_MSG( !message.m_to.IsEmpty(), _T("no recipients to send mail to") ) ; | |
66 | ||
67 | ||
68 | // The 'from' field is optionally supplied by the app; it's not needed | |
69 | // by MAPI, and on Unix, will be guessed if not supplied. | |
70 | wxString from = message.m_from; | |
71 | if ( from.empty() ) | |
72 | { | |
73 | from = wxGetEmailAddress(); | |
74 | } | |
75 | ||
76 | wxString msg; | |
77 | msg << wxT("To: "); | |
78 | ||
79 | const size_t rcptCount = message.m_to.GetCount(); | |
80 | for (size_t rcpt = 0; rcpt < rcptCount; rcpt++) | |
81 | { | |
82 | if ( rcpt ) | |
83 | msg << wxT(", "); | |
84 | msg << message.m_to[rcpt]; | |
85 | } | |
86 | ||
87 | msg << wxT("\nFrom: ") << from << wxT("\nSubject: ") << message.m_subject; | |
88 | msg << wxT("\n\n") << message.m_body; | |
89 | ||
90 | wxString filename; | |
91 | filename.Printf(wxT("/tmp/msg-%ld-%ld-%ld.txt"), (long) getpid(), wxGetLocalTime(), | |
92 | (long) rand()); | |
93 | ||
94 | { | |
95 | wxFileOutputStream stream(filename); | |
96 | if (stream.Ok()) | |
97 | { | |
98 | stream.Write(msg, msg.Length()); | |
99 | } | |
100 | else | |
101 | { | |
102 | return FALSE ; | |
103 | } | |
104 | } | |
105 | ||
106 | // TODO search for a suitable sendmail if sendMail is empty | |
107 | wxString sendmail(sendMail); | |
108 | ||
109 | wxString cmd; | |
110 | cmd << sendmail << wxT(" < ") << filename; | |
111 | ||
112 | // TODO: check return code | |
113 | wxSystem(cmd.c_str()); | |
114 | ||
115 | wxRemoveFile(filename); | |
116 | ||
117 | return TRUE; | |
118 | } | |
119 | #else | |
120 | #error Send not yet implemented for this platform. | |
121 | #endif | |
122 |