void MailMessageTest::testReadQP() { std::istringstream istr( "Content-Transfer-Encoding: quoted-printable\r\n" "Content-Type: text/plain\r\n" "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" "From: [email protected]\r\n" "Subject: Test Message\r\n" "To: John Doe <*****@*****.**>\r\n" "\r\n" "Hello, world!\r\n" "This is a test for the MailMessage class.\r\n" "To test the quoted-printable encoding, we'll put an extra long line here. T=\r\n" "his should be enough.\r\n" "And here is some more =3Dfe.\r\n" ); MailMessage message; message.read(istr); assert (message.getSender() == "*****@*****.**"); assert (message.getContentType() == "text/plain"); assert (message.getContent() == "Hello, world!\r\n" "This is a test for the MailMessage class.\r\n" "To test the quoted-printable encoding, we'll put an extra long line here. This should be enough.\r\n" "And here is some more =fe.\r\n" ); }
void send(const MailMessage& msg) { /// Just a skeleton. /// Assuming that there is a third party send /// API which is responsible for sending email. print( "Sender: " + msg.getSender() ); print("Recipients:"); MailMessage::Recipients recipients = msg.getRecipients(); for ( auto start = recipients.begin(); start != recipients.end(); ++start ) print( (*start).getAddress() ); print("Subject: " + msg.getSubject() ); print("Content: " + msg.getContent() ); }
void SMTPClientSession::sendCommands(const MailMessage& message, const Recipients* pRecipients) { std::string response; int status = 0; const std::string& fromField = message.getSender(); std::string::size_type emailPos = fromField.find('<'); if (emailPos == std::string::npos) { std::string sender("<"); sender.append(fromField); sender.append(">"); status = sendCommand("MAIL FROM:", sender, response); } else { status = sendCommand("MAIL FROM:", fromField.substr(emailPos, fromField.size() - emailPos), response); } if (!isPositiveCompletion(status)) throw SMTPException("Cannot send message", response, status); std::ostringstream recipient; if (pRecipients) { for (Recipients::const_iterator it = pRecipients->begin(); it != pRecipients->end(); ++it) { recipient << '<' << *it << '>'; int status = sendCommand("RCPT TO:", recipient.str(), response); if (!isPositiveCompletion(status)) throw SMTPException(std::string("Recipient rejected: ") + recipient.str(), response, status); recipient.str(""); } } else { for (MailMessage::Recipients::const_iterator it = message.recipients().begin(); it != message.recipients().end(); ++it) { recipient << '<' << it->getAddress() << '>'; int status = sendCommand("RCPT TO:", recipient.str(), response); if (!isPositiveCompletion(status)) throw SMTPException(std::string("Recipient rejected: ") + recipient.str(), response, status); recipient.str(""); } } status = sendCommand("DATA", response); if (!isPositiveIntermediate(status)) throw SMTPException("Cannot send message data", response, status); }
void MailMessageTest::testReadDefaultTransferEncoding() { std::istringstream istr( "Content-Type: text/plain\r\n" "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" "From: [email protected]\r\n" "Subject: Test Message\r\n" "To: John Doe <*****@*****.**>\r\n" "\r\n" "Hello, world!\r\n" "This is a test for the MailMessage class.\r\n" ); MailMessage message; message.read(istr); assert (message.getSender() == "*****@*****.**"); assert (message.getContentType() == "text/plain"); assert (message.getContent() == "Hello, world!\r\n" "This is a test for the MailMessage class.\r\n" ); }