summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mail.h2
-rw-r--r--src/mail.cpp12
2 files changed, 8 insertions, 6 deletions
diff --git a/include/mail.h b/include/mail.h
index 811a1fa69..347f3bc5b 100644
--- a/include/mail.h
+++ b/include/mail.h
@@ -26,6 +26,7 @@ namespace Mail
class Message : public Thread
{
private:
+ Anope::string error;
Anope::string sendmail_path;
Anope::string send_from;
Anope::string mail_to;
@@ -35,7 +36,6 @@ namespace Mail
Anope::string content_type;
bool dont_quote_addresses;
- bool success;
public:
/** Construct this message. Once constructed call Thread::Start to launch the mail sending.
* @param sf Config->SendFrom
diff --git a/src/mail.cpp b/src/mail.cpp
index c092d401a..fe8bb0b90 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -22,24 +22,25 @@ Mail::Message::Message(const Anope::string &sf, const Anope::string &mailto, con
, message(m)
, content_type(Config->GetBlock("mail")->Get<const Anope::string>("content_type", "text/plain; charset=UTF-8"))
, dont_quote_addresses(Config->GetBlock("mail")->Get<bool>("dontquoteaddresses"))
- , success(false)
{
}
Mail::Message::~Message()
{
- if (success)
+ if (error.empty())
Log(LOG_NORMAL, "mail") << "Successfully delivered mail for " << mail_to << " (" << addr << ")";
else
- Log(LOG_NORMAL, "mail") << "Error delivering mail for " << mail_to << " (" << addr << ")";
+ Log(LOG_NORMAL, "mail") << "Error delivering mail for " << mail_to << " (" << addr << "): " << error;
}
void Mail::Message::Run()
{
+ errno = 0;
FILE *pipe = popen(sendmail_path.c_str(), "w");
if (!pipe)
{
+ error = strerror(errno);
SetExitState();
return;
}
@@ -56,9 +57,10 @@ void Mail::Message::Run()
fprintf(pipe, "%s", message.c_str());
fprintf(pipe, "\r\n.\r\n");
- pclose(pipe);
+ int result = pclose(pipe);
- success = true;
+ if (result > 0)
+ error = "Sendmail exited with code " + stringify(result);
SetExitState();
}