From ceb0456d3dd141ec9ac4ddb99f42b0df390d1c6e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 21 Aug 2016 23:14:56 +0100 Subject: [PATCH] Line-break base64 attachments with \r\n rather than just \n to stop "line too long" errors with some email servers. --- ChangeLog | 4 ++++ src/lib/emailer.cc | 15 +++++++++++---- src/lib/emailer.h | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb9cb0fa1..2c4f11a30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-08-21 Carl Hetherington + + * Fix problems when sending emails on some servers. + 2016-08-20 Carl Hetherington * Updated nl_NL translation from Rob van Nieuwkerk. diff --git a/src/lib/emailer.cc b/src/lib/emailer.cc index 534856ba6..ceb26caf6 100644 --- a/src/lib/emailer.cc +++ b/src/lib/emailer.cc @@ -41,11 +41,18 @@ Emailer::Emailer (string from, list to, string subject, string body) : _from (from) , _to (to) , _subject (subject) - , _body (body) + , _body (fix (body)) , _offset (0) { - boost::algorithm::replace_all (_body, "\n", "\r\n"); - boost::algorithm::replace_all (_body, "\0", " "); + +} + +string +Emailer::fix (string s) const +{ + boost::algorithm::replace_all (s, "\n", "\r\n"); + boost::algorithm::replace_all (s, "\0", " "); + return s; } void @@ -154,7 +161,7 @@ Emailer::send (string server, int port, string user, string password) char* out; long int bytes = BIO_get_mem_data (bio, &out); - _email += string (out, bytes); + _email += fix (string (out, bytes)); BIO_free_all (b64); } diff --git a/src/lib/emailer.h b/src/lib/emailer.h index 7a614019e..0309b134d 100644 --- a/src/lib/emailer.h +++ b/src/lib/emailer.h @@ -48,6 +48,8 @@ public: private: + std::string fix (std::string s) const; + std::string _from; std::list _to; std::string _subject; -- 2.30.2