From 1ae7d67ae0e0638d2c12294620d3a4b831c5bc83 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Tue, 18 Jun 2013 15:04:12 +0200 Subject: SMTPUTF8: generate Internationalized Email only if supported by SMTP server. --- src/net/smtp/SMTPTransport.cpp | 28 ++++++++++++++++++++++++++++ src/net/transport.cpp | 8 ++++++++ 2 files changed, 36 insertions(+) (limited to 'src') 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 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 cmd) { cmd->writeToSocket(m_socket); diff --git a/src/net/transport.cpp b/src/net/transport.cpp index 923441b7..88ea6773 100644 --- a/src/net/transport.cpp +++ b/src/net/transport.cpp @@ -215,6 +215,14 @@ void transport::send(ref msg, utility::progressListener* progre vmime::ref hdr; } headerExchanger(msg, hdr); + send(msg, expeditor, recipients, progress, sender); +} + + +void transport::send + (ref msg, const mailbox& expeditor, const mailboxList& recipients, + utility::progressListener* progress, const mailbox& sender) +{ // Generate the message, "stream" it and delegate the sending // to the generic send() function. std::ostringstream oss; -- cgit