ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: ferencd@0: void send_message(const std::string& destination, const std::string& subject, const std::string& body) ferencd@0: { ferencd@0: std::stringstream emailBodySS; ferencd@0: emailBodySS << body; ferencd@0: ferencd@0: // create the email message as per vmime's instructions ferencd@0: vmime::messageBuilder mb; ferencd@0: mb.setSubject(vmime::text(subject)); ferencd@0: mb.setExpeditor(vmime::mailbox("no-reply@cloudy.sh")); ferencd@0: mb.getRecipients().appendAddress(vmime::make_shared(destination)); ferencd@0: mb.getTextPart()->setCharset(vmime::charsets::ISO8859_15) ; ferencd@0: mb.getTextPart()->setText(vmime::make_shared(emailBodySS.str())); ferencd@0: ferencd@0: // Message construction ferencd@0: vmime::shared_ptr msg = mb.construct(); ferencd@0: ferencd@0: // Output raw message data to a stringstream ferencd@0: std::stringstream ss; ferencd@0: vmime::utility::outputStreamAdapter out(ss) ; ferencd@0: msg->generate(out); ferencd@0: std::string s = ss.str(); ferencd@0: ferencd@0: vmime::utility::url url("smtp://localhost"); ferencd@0: vmime::shared_ptr sess = vmime::make_shared(); ferencd@0: vmime::shared_ptr tr = sess->getTransport(url) ; ferencd@0: tr->connect(); ferencd@0: vmime::utility::inputStreamStringAdapter issa(s) ; ferencd@0: ferencd@0: vmime::mailbox from("no-reply@cloudy.sh") ; ferencd@0: vmime::mailboxList to; ferencd@0: to.appendMailbox(vmime::make_shared(destination) ) ; ferencd@0: ferencd@0: // send the email ferencd@0: tr->send( from, to, issa, s.length ( ) ) ; ferencd@0: tr->disconnect () ; ferencd@0: ferencd@0: } ferencd@0: ferencd@0: int main() ferencd@0: { ferencd@0: using nlohmann::json; ferencd@0: ferencd@0: std::ifstream i("dest.json"); ferencd@0: json j; ferencd@0: i >> j; ferencd@0: ferencd@0: std::cout << "Subject:" << j["mail"]["subject"] << std::endl; ferencd@0: std::cout << "Body" << j["mail"]["body"] << std::endl; ferencd@0: ferencd@0: ferencd@0: std::ifstream t(j["mail"]["body"]); ferencd@0: ferencd@0: if(!t) ferencd@0: { ferencd@0: std::cerr << "Invalid body file" << std::endl; ferencd@0: return 1; ferencd@0: } ferencd@0: ferencd@0: std::string str((std::istreambuf_iterator(t)), ferencd@0: std::istreambuf_iterator()); ferencd@0: ferencd@0: STRING_VAR_TEMPLATE(EmailBody, str); ferencd@0: ferencd@0: ferencd@0: for(const auto& t : j["mail"]["targets"]) ferencd@0: { ferencd@0: std::string to = t["to"]; ferencd@0: to.erase(remove( to.begin(), to.end(), '\"' ), to.end()); ferencd@0: ferencd@0: send_message(t["address"], j["mail"]["subject"], templater().templatize("target" to).get()); ferencd@0: std::cout << "To: " << t["address"] << std::endl << templater().templatize("target" t["to"]).get() << std::endl ferencd@0: << "----------------------------------"<< std::endl; ferencd@0: } ferencd@0: ferencd@0: }