aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/smtp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2013-06-18 15:04:12 +0200
committerVincent Richard <[email protected]>2013-06-18 15:04:12 +0200
commit1ae7d67ae0e0638d2c12294620d3a4b831c5bc83 (patch)
treee5993c737e9b27347471476930e8adbdbc87e496 /src/net/smtp
parentFixed issue #44 for MSVC. (diff)
downloadvmime-1ae7d67ae0e0638d2c12294620d3a4b831c5bc83.tar.gz
vmime-1ae7d67ae0e0638d2c12294620d3a4b831c5bc83.zip
SMTPUTF8: generate Internationalized Email only if supported by SMTP server.
Diffstat (limited to 'src/net/smtp')
-rw-r--r--src/net/smtp/SMTPTransport.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp
index cc3fc6ef..65c999bf 100644
--- a/src/net/smtp/SMTPTransport.cpp
+++ b/src/net/smtp/SMTPTransport.cpp
@@ -35,11 +35,14 @@
#include "vmime/exception.hpp"
#include "vmime/platform.hpp"
#include "vmime/mailboxList.hpp"
+#include "vmime/message.hpp"
#include "vmime/utility/filteredStream.hpp"
#include "vmime/utility/stringUtils.hpp"
#include "vmime/utility/outputStreamSocketAdapter.hpp"
#include "vmime/utility/streamUtils.hpp"
+#include "vmime/utility/outputStreamAdapter.hpp"
+#include "vmime/utility/inputStreamStringAdapter.hpp"
#include "vmime/net/defaultConnectionInfos.hpp"
@@ -673,6 +676,31 @@ void SMTPTransport::send
}
+void SMTPTransport::send
+ (ref <vmime::message> msg, const mailbox& expeditor, const mailboxList& recipients,
+ utility::progressListener* progress, const mailbox& sender)
+{
+ // Generate the message with Internationalized Email support,
+ // if this is supported by the SMTP server
+ const bool hasSMTPUTF8 =
+ m_extensions.find("SMTPUTF8") != m_extensions.end();
+
+ std::ostringstream oss;
+ utility::outputStreamAdapter ossAdapter(oss);
+
+ generationContext ctx(generationContext::getDefaultContext());
+ ctx.setInternationalizedEmailSupport(hasSMTPUTF8);
+
+ msg->generate(ctx, ossAdapter);
+
+ const string& str(oss.str());
+
+ utility::inputStreamStringAdapter isAdapter(str);
+
+ send(expeditor, recipients, isAdapter, str.length(), progress, sender);
+}
+
+
void SMTPTransport::sendRequest(ref <SMTPCommand> cmd)
{
cmd->writeToSocket(m_socket);