void testWordGenerateSpace2() { // White-space between two encoded words (#2) vmime::text txt; txt.appendWord(vmime::create <vmime::word>("Facture ", "utf-8")); txt.appendWord(vmime::create <vmime::word>("\xc3\xa0", "utf-8")); txt.appendWord(vmime::create <vmime::word>(" envoyer ", "utf-8")); txt.appendWord(vmime::create <vmime::word>("\xc3\xa0", "utf-8")); txt.appendWord(vmime::create <vmime::word>(" Martine", "utf-8")); const vmime::string decoded = "Facture ""\xc3\xa0"" envoyer ""\xc3\xa0"" Martine"; const vmime::string encoded = "Facture =?utf-8?B?w6A=?= envoyer =?utf-8?B?w6A=?= Martine"; // -- test encoding VASSERT_EQ("1", encoded, txt.generate()); // -- ensure no space is added when decoding vmime::text txt2; txt2.parse(encoded, 0, encoded.length()); VASSERT_EQ("2", decoded, txt2.getWholeBuffer()); // -- test rencoding VASSERT_EQ("3", encoded, txt2.generate()); }
void testWordGenerateSpace() { // No white-space between an unencoded word and a encoded one VASSERT_EQ("1", "Bonjour =?utf-8?Q?Fran=C3=A7ois?=", vmime::text::newFromString("Bonjour Fran\xc3\xa7ois", vmime::charset("utf-8"))->generate()); // White-space between two encoded words vmime::text txt; txt.appendWord(vmime::create <vmime::word>("\xc3\x89t\xc3\xa9", "utf-8")); txt.appendWord(vmime::create <vmime::word>("Fran\xc3\xa7ois", "utf-8")); const vmime::string decoded = "\xc3\x89t\xc3\xa9""Fran\xc3\xa7ois"; const vmime::string encoded = "=?utf-8?B?w4l0w6k=?= =?utf-8?Q?Fran=C3=A7ois?="; // -- test encoding VASSERT_EQ("2", encoded, txt.generate()); // -- ensure no space is added when decoding vmime::text txt2; txt2.parse(encoded, 0, encoded.length()); VASSERT_EQ("3", decoded, txt2.getWholeBuffer()); // -- test rencoding VASSERT_EQ("4", encoded, txt2.generate()); }
static inline bool isFQDN(const vmime::string& str) { if (utility::stringUtils::isStringEqualNoCase(str, "localhost", 9)) return false; const vmime::size_t p = str.find_first_of("."); return p != vmime::string::npos && p > 0 && p != str.length() - 1; }
int getMonth(vmime::string mstr) { std::transform(mstr.begin(), mstr.end(), mstr.begin(), ::tolower); std::map <vmime::string, vmime::datetime::Months>::const_iterator c_it = m_monthMap.find(mstr); if (c_it != m_monthMap.end()) return c_it->second; return -1; }
void testStripSpacesAtEnd() { vmime::parsingContext ctx; const vmime::string buffer = "Field: \r\n\tfield data "; vmime::ref <vmime::headerField> hfield = vmime::headerField::parseNext(ctx, buffer, 0, buffer.size()); vmime::ref <vmime::text> hvalue = hfield->getValue().dynamicCast <vmime::text>(); VASSERT_EQ("Field name", "Field", hfield->getName()); VASSERT_EQ("Field value", toHex("field data"), toHex(hvalue->getWholeBuffer())); }
void setUp() { testDataDecoded = "ABCDEFGHIJKLMNOPQRSTUVWXYZ \x12\x34\x56\x78\x90 abcdefghijklmnopqrstuvwxyz0123456789"; testDataEncoded = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogEjRWeJAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5"; std::ostringstream testFilePath; testFilePath << "/tmp/vmime_test_" << (rand() % 999999999); vmime::ref <vmime::utility::fileSystemFactory> fsf = vmime::platform::getHandler()->getFileSystemFactory(); testFile = fsf->create(fsf->stringToPath(testFilePath.str())); testFile->createFile(); testFile->getFileWriter()->getOutputStream()->write(testDataEncoded.data(), testDataEncoded.length()); }
void testListMessagesImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder" / "SubSubFolder2"); int count, unseen; folder->status(count, unseen); VASSERT_EQ("Message count", 1, count); folder->open(vmime::net::folder::MODE_READ_ONLY); vmime::ref <vmime::net::message> msg = folder->getMessage(1); folder->fetchMessage(msg, vmime::net::folder::FETCH_SIZE); VASSERT_EQ("Message size", TEST_MESSAGE_1.length(), msg->getSize()); std::ostringstream oss; vmime::utility::outputStreamAdapter os(oss); msg->extract(os); VASSERT_EQ("Message contents", TEST_MESSAGE_1, oss.str()); folder->close(false); destroyMaildir(); }
void testGetLength() { vmime::fileContentHandler cth(testFile); VASSERT_FALSE("empty", cth.isEmpty()); VASSERT_EQ("length", testDataEncoded.length(), cth.getLength()); }
void windowsSocket::connect(const vmime::string& address, const vmime::port_t port) { // Close current connection, if any if (m_desc != -1) { ::closesocket(m_desc); m_desc = -1; } // Resolve address ::sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(static_cast <unsigned short>(port)); addr.sin_addr.s_addr = ::inet_addr(address.c_str()); if (addr.sin_addr.s_addr == static_cast <int>(-1)) { ::hostent* hostInfo = ::gethostbyname(address.c_str()); if (hostInfo == NULL) { // Error: cannot resolve address throw vmime::exceptions::connection_error("Cannot resolve address."); } memcpy(reinterpret_cast <char*>(&addr.sin_addr), hostInfo->h_addr, hostInfo->h_length); } // Get a new socket m_desc = ::socket(AF_INET, SOCK_STREAM, 0); if (m_desc == -1) throw vmime::exceptions::connection_error("Error while creating socket."); // Start connection if (::connect(m_desc, reinterpret_cast <sockaddr*>(&addr), sizeof(addr)) == -1) { ::closesocket(m_desc); m_desc = -1; // Error throw vmime::exceptions::connection_error("Error while connecting socket."); } }
VMIME_TEST_LIST_END static const vmime::string extractComponentString (const vmime::string& buffer, const vmime::component& c) { return vmime::string(buffer.begin() + c.getParsedOffset(), buffer.begin() + c.getParsedOffset() + c.getParsedLength()); }
bool testSocket::localReceiveLine(vmime::string& line) { vmime::size_t eol; if ((eol = m_outBuffer.find('\n')) != vmime::string::npos) { line = vmime::string(m_outBuffer.begin(), m_outBuffer.begin() + eol); if (!line.empty() && line[line.length() - 1] == '\r') line.erase(line.end() - 1, line.end()); m_outBuffer.erase(m_outBuffer.begin(), m_outBuffer.begin() + eol + 1); return true; } return false; }
const vmime::string toHex(const vmime::string str) { static const char hexChars[] = "0123456789abcdef"; vmime::string res = "\n"; for (size_t i = 0 ; i < str.length() ; i += 16) { size_t r = std::min (static_cast <size_t>(16), str.length() - i); vmime::string hex; vmime::string chr; for (size_t j = 0 ; j < r ; ++j) { const unsigned char c = str[i + j]; hex += hexChars[c / 16]; hex += hexChars[c % 16]; hex += " "; if (c >= 32 && c <= 127) chr += c; else chr += '.'; } for (size_t j = r ; j < 16 ; ++j) hex += " "; res += hex + " " + chr + "\n"; } return res; }
void posixSocket::connect(const vmime::string& address, const vmime::port_t port) { // Close current connection, if any if (m_desc != -1) { ::close(m_desc); m_desc = -1; } #if VMIME_HAVE_GETADDRINFO // use thread-safe and IPv6-aware getaddrinfo() if available // Resolve address, if needed struct ::addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; std::ostringstream portStr; portStr.imbue(std::locale::classic()); portStr << port; struct ::addrinfo* res0; if (::getaddrinfo(address.c_str(), portStr.str().c_str(), &hints, &res0) != 0) { // Error: cannot resolve address throw vmime::exceptions::connection_error("Cannot resolve address."); } // Connect to host int sock = -1; struct ::addrinfo* res = res0; for ( ; sock == -1 && res != NULL ; res = res->ai_next) { sock = ::socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (sock < 0) continue; // try next if (m_timeoutHandler != NULL) { ::fcntl(sock, F_SETFL, ::fcntl(sock, F_GETFL) | O_NONBLOCK); if (::connect(sock, res->ai_addr, res->ai_addrlen) < 0) { switch (errno) { case 0: case EINPROGRESS: case EINTR: #if defined(EAGAIN) case EAGAIN: #endif // EAGAIN #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) case EWOULDBLOCK: #endif // EWOULDBLOCK // Connection in progress break; default: ::close(sock); sock = -1; continue; // try next } // Wait for socket to be connected. // We will check for time out every second. fd_set fds; FD_ZERO(&fds); FD_SET(sock, &fds); fd_set fdsError; FD_ZERO(&fdsError); FD_SET(sock, &fdsError); struct timeval tm; tm.tv_sec = 1; tm.tv_usec = 0; m_timeoutHandler->resetTimeOut(); bool connected = false; do { const int ret = select(sock + 1, NULL, &fds, &fdsError, &tm); // Success if (ret > 0) { connected = true; break; } // Error else if (ret < -1) { if (errno != EINTR) { // Cancel connection break; } } // 1-second timeout else if (ret == 0) { if (m_timeoutHandler->isTimeOut()) { if (!m_timeoutHandler->handleTimeOut()) { // Cancel connection break; } else { // Reset timeout and keep waiting for connection m_timeoutHandler->resetTimeOut(); } } else { // Keep waiting for connection } } ::sched_yield(); } while (true); if (!connected) { ::close(sock); sock = -1; continue; // try next } break; } } else { if (::connect(sock, res->ai_addr, res->ai_addrlen) < 0) { ::close(sock); sock = -1; continue; // try next } } } ::freeaddrinfo(res0); if (sock == -1) { try { throwSocketError(errno); } catch (exceptions::socket_exception& e) { throw vmime::exceptions::connection_error ("Error while connecting socket.", e); } } m_desc = sock; #else // !VMIME_HAVE_GETADDRINFO // Resolve address ::sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(static_cast <unsigned short>(port)); addr.sin_addr.s_addr = ::inet_addr(address.c_str()); if (addr.sin_addr.s_addr == static_cast <in_addr_t>(-1)) { ::hostent* hostInfo = ::gethostbyname(address.c_str()); if (hostInfo == NULL) { // Error: cannot resolve address throw vmime::exceptions::connection_error("Cannot resolve address."); } ::memcpy(reinterpret_cast <char*>(&addr.sin_addr), hostInfo->h_addr, hostInfo->h_length); } // Get a new socket m_desc = ::socket(AF_INET, SOCK_STREAM, 0); if (m_desc == -1) { try { throwSocketError(errno); } catch (exceptions::socket_exception& e) { throw vmime::exceptions::connection_error ("Error while creating socket.", e); } } // Start connection if (::connect(m_desc, reinterpret_cast <sockaddr*>(&addr), sizeof(addr)) == -1) { try { throwSocketError(errno); } catch (exceptions::socket_exception& e) { ::close(m_desc); m_desc = -1; // Error throw vmime::exceptions::connection_error ("Error while connecting socket.", e); } } #endif // VMIME_HAVE_GETADDRINFO ::fcntl(m_desc, F_SETFL, ::fcntl(m_desc, F_GETFL) | O_NONBLOCK); }
void posixSocket::send(const vmime::string& buffer) { sendRaw(buffer.data(), buffer.length()); }
int sendattach(SENDMAIL_VARIABLES *mvars) { #ifndef WIN32 vmime::platform::setHandler<vmime::platforms::posix::posixHandler>(); #else vmime::platform::setHandler<vmime::platforms::windows::windowsHandler>(); #endif if((mvars->from_addr==NULL)&&(mvars->tolist==NULL)&&(mvars->cclist==NULL)&&(mvars->bcclist==NULL)&&(mvars->from_addr==NULL)) { cerr << "No Email Recipients Specified..." <<endl ; ostringstream errmsg; std::string errstring; errmsg << "ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified..." << endl << endl << endl << endl << (mvars->from_name==NULL ? "" : "From Name: ") << (mvars->from_name==NULL ? "" : mvars->from_name) << (mvars->from_name==NULL ? "" : "\n" ) << (mvars->from_addr==NULL ? "" : "From Address: ") << (mvars->from_addr==NULL ? "" : mvars->from_addr) << (mvars->from_addr==NULL ? "" : "\n" ) << (mvars->tolist==NULL ? "" : "TO: ") << (mvars->tolist==NULL ? "" : mvars->tolist) << (mvars->tolist==NULL ? "" : "\n" ) << (mvars->cclist==NULL ? "" : "CC: ") << (mvars->cclist==NULL ? "" : mvars->cclist) << (mvars->cclist==NULL ? "" : "\n" ) << (mvars->bcclist==NULL ? "" : "BCC: ") << (mvars->bcclist==NULL ? "" : mvars->bcclist) << (mvars->bcclist==NULL ? "" : "\n" ) << (mvars->subject==NULL ? "" : "Subject: ") << (mvars->subject==NULL ? "" : mvars->subject) << (mvars->subject==NULL ? "" : "\n" ) << (mvars->fname[0]==NULL ? "" : "Filename 0: ") << (mvars->fname[0]==NULL ? "" : mvars->fname[0]) << (mvars->fname[0]==NULL ? "" : "\n" ) << (mvars->fname[1]==NULL ? "" : "Filename 1: ") << (mvars->fname[1]==NULL ? "" : mvars->fname[1]) << (mvars->fname[1]==NULL ? "" : "\n" ) << (mvars->fname[2]==NULL ? "" : "Filename 2: ") << (mvars->fname[2]==NULL ? "" : mvars->fname[2]) << (mvars->fname[2]==NULL ? "" : "\n" ) << (mvars->fname[3]==NULL ? "" : "Filename 3: ") << (mvars->fname[3]==NULL ? "" : mvars->fname[3]) << (mvars->fname[3]==NULL ? "" : "\n" ) << (mvars->fname[4]==NULL ? "" : "Filename 4: ") << (mvars->fname[4]==NULL ? "" : mvars->fname[4]) << (mvars->fname[4]==NULL ? "" : "\n" ) << (mvars->fname[5]==NULL ? "" : "Filename 5: ") << (mvars->fname[5]==NULL ? "" : mvars->fname[5]) << (mvars->fname[5]==NULL ? "" : "\n" ) << (mvars->fname[6]==NULL ? "" : "Filename 6: ") << (mvars->fname[6]==NULL ? "" : mvars->fname[6]) << (mvars->fname[6]==NULL ? "" : "\n" ) << (mvars->fname[7]==NULL ? "" : "Filename 7: ") << (mvars->fname[7]==NULL ? "" : mvars->fname[7]) << (mvars->fname[7]==NULL ? "" : "\n" ) << (mvars->fname[8]==NULL ? "" : "Filename 8: ") << (mvars->fname[8]==NULL ? "" : mvars->fname[8]) << (mvars->fname[8]==NULL ? "" : "\n" ) << (mvars->fname[9]==NULL ? "" : "Filename 9: ") << (mvars->fname[9]==NULL ? "" : mvars->fname[9]) << (mvars->fname[9]==NULL ? "" : "\n" ) << (mvars->dname[0]==NULL ? "" : "Attachment 0: ") << (mvars->dname[0]==NULL ? "" : mvars->dname[0]) << (mvars->dname[0]==NULL ? "" : "\n" ) << (mvars->dname[1]==NULL ? "" : "Attachment 1: ") << (mvars->dname[1]==NULL ? "" : mvars->dname[1]) << (mvars->dname[1]==NULL ? "" : "\n" ) << (mvars->dname[2]==NULL ? "" : "Attachment 2: ") << (mvars->dname[2]==NULL ? "" : mvars->dname[2]) << (mvars->dname[2]==NULL ? "" : "\n" ) << (mvars->dname[3]==NULL ? "" : "Attachment 3: ") << (mvars->dname[3]==NULL ? "" : mvars->dname[3]) << (mvars->dname[3]==NULL ? "" : "\n" ) << (mvars->dname[4]==NULL ? "" : "Attachment 4: ") << (mvars->dname[4]==NULL ? "" : mvars->dname[4]) << (mvars->dname[4]==NULL ? "" : "\n" ) << (mvars->dname[5]==NULL ? "" : "Attachment 5: ") << (mvars->dname[5]==NULL ? "" : mvars->dname[5]) << (mvars->dname[5]==NULL ? "" : "\n" ) << (mvars->dname[6]==NULL ? "" : "Attachment 6: ") << (mvars->dname[6]==NULL ? "" : mvars->dname[6]) << (mvars->dname[6]==NULL ? "" : "\n" ) << (mvars->dname[7]==NULL ? "" : "Attachment 7: ") << (mvars->dname[7]==NULL ? "" : mvars->dname[7]) << (mvars->dname[7]==NULL ? "" : "\n" ) << (mvars->dname[8]==NULL ? "" : "Attachment 8: ") << (mvars->dname[8]==NULL ? "" : mvars->dname[8]) << (mvars->dname[8]==NULL ? "" : "\n" ) << (mvars->dname[9]==NULL ? "" : "Attachment 9: ") << (mvars->dname[9]==NULL ? "" : mvars->dname[9]) << (mvars->dname[9]==NULL ? "" : "\n" ) << (mvars->mtype[0]==NULL ? "" : "MimeType 0: ") << (mvars->mtype[0]==NULL ? "" : mvars->mtype[0]) << (mvars->mtype[0]==NULL ? "" : "\n" ) << (mvars->mtype[1]==NULL ? "" : "MimeType 1: ") << (mvars->mtype[1]==NULL ? "" : mvars->mtype[1]) << (mvars->mtype[1]==NULL ? "" : "\n" ) << (mvars->mtype[2]==NULL ? "" : "MimeType 2: ") << (mvars->mtype[2]==NULL ? "" : mvars->mtype[2]) << (mvars->mtype[2]==NULL ? "" : "\n" ) << (mvars->mtype[3]==NULL ? "" : "MimeType 3: ") << (mvars->mtype[3]==NULL ? "" : mvars->mtype[3]) << (mvars->mtype[3]==NULL ? "" : "\n" ) << (mvars->mtype[4]==NULL ? "" : "MimeType 4: ") << (mvars->mtype[4]==NULL ? "" : mvars->mtype[4]) << (mvars->mtype[4]==NULL ? "" : "\n" ) << (mvars->mtype[5]==NULL ? "" : "MimeType 5: ") << (mvars->mtype[5]==NULL ? "" : mvars->mtype[5]) << (mvars->mtype[5]==NULL ? "" : "\n" ) << (mvars->mtype[6]==NULL ? "" : "MimeType 6: ") << (mvars->mtype[6]==NULL ? "" : mvars->mtype[6]) << (mvars->mtype[6]==NULL ? "" : "\n" ) << (mvars->mtype[7]==NULL ? "" : "MimeType 7: ") << (mvars->mtype[7]==NULL ? "" : mvars->mtype[7]) << (mvars->mtype[7]==NULL ? "" : "\n" ) << (mvars->mtype[8]==NULL ? "" : "MimeType 8: ") << (mvars->mtype[8]==NULL ? "" : mvars->mtype[8]) << (mvars->mtype[8]==NULL ? "" : "\n" ) << (mvars->mtype[9]==NULL ? "" : "MimeType 9: ") << (mvars->mtype[9]==NULL ? "" : mvars->mtype[9]) << (mvars->mtype[9]==NULL ? "" : "\n" ) << (mvars->fdata[0]==NULL ? "" : "File Data 0: ") << (mvars->fdata[0]==NULL ? "" : "TRUE") << (mvars->fdata[0]==NULL ? "" : "\n" ) << (mvars->fdata[1]==NULL ? "" : "File Data 1: ") << (mvars->fdata[1]==NULL ? "" : "TRUE") << (mvars->fdata[1]==NULL ? "" : "\n" ) << (mvars->fdata[2]==NULL ? "" : "File Data 2: ") << (mvars->fdata[2]==NULL ? "" : "TRUE") << (mvars->fdata[2]==NULL ? "" : "\n" ) << (mvars->fdata[3]==NULL ? "" : "File Data 3: ") << (mvars->fdata[3]==NULL ? "" : "TRUE") << (mvars->fdata[3]==NULL ? "" : "\n" ) << (mvars->fdata[4]==NULL ? "" : "File Data 4: ") << (mvars->fdata[4]==NULL ? "" : "TRUE") << (mvars->fdata[4]==NULL ? "" : "\n" ) << (mvars->fdata[5]==NULL ? "" : "File Data 5: ") << (mvars->fdata[5]==NULL ? "" : "TRUE") << (mvars->fdata[5]==NULL ? "" : "\n" ) << (mvars->fdata[6]==NULL ? "" : "File Data 6: ") << (mvars->fdata[6]==NULL ? "" : "TRUE") << (mvars->fdata[6]==NULL ? "" : "\n" ) << (mvars->fdata[7]==NULL ? "" : "File Data 7: ") << (mvars->fdata[7]==NULL ? "" : "TRUE") << (mvars->fdata[7]==NULL ? "" : "\n" ) << (mvars->fdata[8]==NULL ? "" : "File Data 8: ") << (mvars->fdata[8]==NULL ? "" : "TRUE") << (mvars->fdata[8]==NULL ? "" : "\n" ) << (mvars->fdata[9]==NULL ? "" : "File Data 9: ") << (mvars->fdata[9]==NULL ? "" : "TRUE") << (mvars->fdata[9]==NULL ? "" : "\n" ) << (mvars->body==NULL ? "" : "Body: ") << (mvars->body==NULL ? "" : mvars->body) << (mvars->body==NULL ? "" : "\n" ) << "\"" << endl; //errstring=errmsg.str(); std::cerr << errstring; /* #ifdef WIN32 if(!mvars->ignerr) { //system("ok.exe ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(errstring.c_str()); } #else if(!mvars->ignerr) { //system("ok.lnx ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(errstring.c_str()); } #endif */ return (1); } try { vmime::messageBuilder mb; ostringstream ostream1; if((mvars->from_name==NULL)&&(mvars->from_addr!=NULL)) { ostream1 << " <" << mvars->from_addr << ">"; }else if((mvars->from_name!=NULL)&&(mvars->from_addr!=NULL)) { ostream1 << mvars->from_name << " <" << mvars->from_addr << ">"; }else{ } //std::cout <<stream1.str() << std::endl; // Fill in the basic fields mb.setExpeditor(vmime::mailbox(ostream1.str())); vmime::addressList from; from.appendAddress(vmime::create <vmime::mailbox>(ostream1.str())); mb.setRecipients(from); ostream1.clear(); // This may be in the wrong place.... istringstream istream1; std::string name; vmime::addressList to; if(mvars->tolist!=NULL) { if((strstr(mvars->tolist,","))==NULL) { //std::string tostr = .str(); to.appendAddress(vmime::create <vmime::mailbox>(mvars->tolist)); mb.setRecipients(to); }else{ // Needs a for/while loop using strtok or similar... //std::string tostr(mvars->tolist); //tostr1.erase(std::remove(tostr1.begin(), tostr1.end(), '\n'), tostr1.end()); //tostr1.erase(std::remove(tostr1.begin(), tostr1.end(), '\r'), tostr1.end()); //stringstream strstrm(tostr.c_str()); stringstream strstrm(mvars->tolist); char num1[200]; while(1) { strstrm.getline(&num1[0],200,','); //cout << num1 << std::endl; to.appendAddress(vmime::create <vmime::mailbox>(num1)); mb.setRecipients(to); if((strlen(num1))==0) { break; } } } istream1.clear(); } // Subject Header if(mvars->subject==NULL) { mb.setSubject(vmime::text("")); }else{ mb.setSubject(vmime::text(mvars->subject)); } // Message body if(mvars->body==NULL) { mb.getTextPart()->setText(vmime::create <vmime::stringContentHandler>("")); } else if((mvars->body!=NULL)&&(!strcmp(mvars->body,"stdin"))) { vmime::string stdin_body((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); mb.getTextPart()->setText(vmime::create <vmime::stringContentHandler>(stdin_body)); }else{ mb.getTextPart()->setText(vmime::create <vmime::stringContentHandler>(mvars->body)); } if(mvars->cclist!=NULL) { vmime::addressList cc; if((strstr(mvars->cclist,","))==NULL) { cc.appendAddress(vmime::create <vmime::mailbox>(mvars->cclist)); mb.setCopyRecipients(cc); }else{ // Needs a for/while loop using strtok or similar... stringstream strstrm(mvars->cclist); char num1[200]; while(1) { strstrm.getline(&num1[0],200,','); //cout << num1 << std::endl; cc.appendAddress(vmime::create <vmime::mailbox>(num1)); mb.setCopyRecipients(cc); if((strlen(num1))==0) { break; } } } } // This section needs to be done for BCC if(mvars->bcclist!=NULL) { vmime::addressList bcc; if((strstr(mvars->bcclist,","))==NULL) { bcc.appendAddress(vmime::create <vmime::mailbox>(mvars->bcclist)); mb.setBlindCopyRecipients(bcc); }else{ // Needs a for/while loop using strtok or similar... stringstream strstrm(mvars->bcclist); char num1[200]; while(1) { strstrm.getline(&num1[0],200,','); //cout << num1 << std::endl; bcc.appendAddress(vmime::create <vmime::mailbox>(num1)); mb.setBlindCopyRecipients(bcc); if((strlen(num1))==0) { break; } } } } int x; vmime::string s1; s1 = "This is a string that really should be the contents of a file."; for(x=0;x<10;x++) { //TRACE; if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin"))) { //std::string stdin_str((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); //vmime::string stdin_str; //stdin_str = "This is a string that really should be the contents of a file."; //std::cout << "The stdin_str size is: " << stdin_str.length() << endl; //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(stdin_str); #ifdef WIN32 if (_setmode(_fileno(stdin), _O_BINARY) == -1) std::cerr << "ERROR: while converting cin to binary:" << strerror(errno) << endl; #endif ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(&cin,true); vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word("Report.txt"), // default filename vmime::mediaType("application/octet-stream"), // default content type vmime::text("Report.txt") // default description ); a->getFileInfo().setFilename("Report.txt"); mb.appendAttachment(a); } else if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin"))&&(mvars->dname[x]==NULL)&&(mvars->mtype[x]!=NULL)) { if(mvars->rdadiag) { TRACE; } //vmime::string stdin_str((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); //std::cout << "The stdin_str size is: " << stdin_str.length() << endl //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(stdin_str); #ifdef WIN32 if (_setmode(_fileno(stdin), _O_BINARY) == -1) std::cerr << "ERROR: while converting cin to binary:" << strerror(errno) << endl; #endif ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(&cin,true); vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word("Report.txt"), // default filename vmime::mediaType(mvars->mtype[x]), // set content type vmime::text("Report.txt") // default description ); // If the MIME TYPE is application/pdf or similar, the default filename should be changed... a->getFileInfo().setFilename("Report.txt"); mb.appendAttachment(a); } else if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin"))&&(mvars->dname[x]!=NULL)&&(mvars->mtype[x]==NULL)) { if(mvars->rdadiag) { TRACE; } //vmime::string stdin_str((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); //std::cout << "The stdin_str size is: " << strlen(stdin_str.cstr) << endl //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(stdin_str); #ifdef WIN32 if (_setmode(_fileno(stdin), _O_BINARY) == -1) std:cerr << "ERROR: while converting cin to binary:" << strerror(errno) << endl; #endif ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(&cin,true); vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word(mvars->dname[x]), // specified filename vmime::mediaType("application/octet-stream"), // default content type vmime::text(mvars->dname[x]) // specified description ); a->getFileInfo().setFilename(mvars->dname[x]); mb.appendAttachment(a); } else if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin"))&&(mvars->dname[x]!=NULL)&&(mvars->mtype[x]!=NULL)) { if(mvars->rdadiag) { TRACE; } //vmime::string stdin_str((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); //std::cout << "The stdin_str size is: " << stdin_str.length() << endl //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(stdin_str); #ifdef WIN32 if (_setmode(_fileno(stdin), _O_BINARY) == -1) std::cerr << "ERROR: while converting cin to binary:" << strerror(errno) << endl; #endif ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(&cin,true); vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word(mvars->dname[x]), // specified filename vmime::mediaType(mvars->mtype[x]), // set content type vmime::text(mvars->dname[x]) // specified description ); a->getFileInfo().setFilename(mvars->dname[x]); mb.appendAttachment(a); }else if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin3"))&&(mvars->dname[x]==NULL)&&(mvars->mtype[x]==NULL)) { if(mvars->rdadiag) { TRACE; } ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(&cin,true); if(mvars->rdadiag) { TRACE; } vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word("Report3.txt"), vmime::mediaType("application/octet-stream"), // content type vmime::text("Report3.txt") // description ); if(mvars->rdadiag) { TRACE; } /* vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( "/proc/self/fd/0", // linux cheat to read stdin using file name vmime::mediaType("application/octet-stream"), // content type vmime::text("Report.txt") // description ); */ if(mvars->rdadiag) { TRACE; } a->getFileInfo().setFilename("Report.txt"); if(mvars->rdadiag) { TRACE; } mb.appendAttachment(a); if(mvars->rdadiag) { TRACE; } }else if((mvars->fname[x]!=NULL)&&(!strcmp(mvars->fname[x],"stdin2"))&&(mvars->dname[x]==NULL)&&(mvars->mtype[x]==NULL)) { if(mvars->rdadiag) { TRACE; } std::string stdin_str((std::istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>()); ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(stdin_str); //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(mvars->fdata[x]); //ref <utility::inputStream> is = vmime::create <utility::inputStreamStringAdapter>(s1); vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( is, vmime::word("Report.txt"), vmime::mediaType("application/octet-stream"), // content type vmime::text("Report.txt") // description ); a->getFileInfo().setFilename("Report.txt"); mb.appendAttachment(a); }else if((mvars->fname[x]!=NULL)&&(mvars->mtype[x]!=NULL)&&(mvars->dname[x]!=NULL)) { if(mvars->rdadiag) { TRACE; } vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( mvars->fname[x], // full path to file vmime::mediaType(mvars->mtype[x]), // content type vmime::text(mvars->dname[x]) // description ); a->getFileInfo().setFilename(mvars->dname[x]); //a->getFileInfo().setCreationDate(vmime::datetime("30 Apr 2003 14:30:00 +0200")); //mb.attach(a); mb.appendAttachment(a); }else if((mvars->fname[x]!=NULL)&&(mvars->mtype[x]==NULL)&&(mvars->dname[x]!=NULL)) { if(mvars->rdadiag) { TRACE; std::cerr << "FNAME " << mvars->fname[x] <<endl; std::cerr << "DNAME " << mvars->dname[x] <<endl; } vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( mvars->fname[x], vmime::mediaType("application/octet-stream"), vmime::text(mvars->dname[x]) ); a->getFileInfo().setFilename(mvars->dname[x]); mb.appendAttachment(a); }else if((mvars->fname[x]!=NULL)&&(mvars->mtype[x]==NULL)&&(mvars->dname[x]==NULL)) { if(mvars->rdadiag) { TRACE; } // Need a cross platform basename function used on fname before setting attachment name to it. vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( mvars->fname[x], vmime::mediaType("application/octet-stream"), vmime::text(mvars->fname[x]) ); a->getFileInfo().setFilename(mvars->fname[x]); mb.appendAttachment(a); }else if((mvars->fname[x]!=NULL)&&(mvars->mtype[x]!=NULL)&&(mvars->dname[x]==NULL)) { if(mvars->rdadiag) { TRACE; } // Need a cross platform basename function used on fname before setting attachment name to it. vmime::ref <vmime::fileAttachment> a = vmime::create <vmime::fileAttachment> ( mvars->fname[x], vmime::mediaType(mvars->mtype[x]), vmime::text(mvars->fname[x]) ); a->getFileInfo().setFilename(mvars->fname[x]); mb.appendAttachment(a); /* }else{ TRACE; std::cout << "ELSE condition of add attachment. Should never reach here." <<endl ; */ } } // Email Construction vmime::ref <vmime::message> msg = mb.construct(); // Add reply to header if value exists. if(mvars->replyto!=NULL) { vmime::ref <vmime::header> hdr = msg->getHeader(); vmime::headerFieldFactory *hfFactory = vmime::headerFieldFactory::getInstance(); vmime::ref <vmime::headerField> ReplyToField = hfFactory->create(vmime::fields::REPLY_TO); ReplyToField->setValue(vmime::text (mvars->replyto)); hdr->appendField(ReplyToField); } // Raw text generation const vmime::string dataToSend = msg->generate(); // Print it to stdout for testing // ostream1 << dataToSend ; FILE *pipe=NULL; #ifdef WIN32 HANDLE *procinfo; pipe=win32_popen(&procinfo,"msmtp.exe -t","wb"); bufferwrite(pipe,dataToSend.c_str(),(strlen(dataToSend.c_str())),65535); //fclose(pipe); //WaitForSingleObject(procinfo,INFINITE); win32_pclose(&procinfo,pipe); // win32_plose is broken. Does not wait on passed object... // using fclose and WaitForSingleObject works in parent... //win32_pclose(&procinfo,pipe); //system("msmtp.exe -d -t <C:\\email.txt"); //RunSilent("msmtp.exe -t <C:\\email.txt"); //system_command("msmtp.exe -d -t <C:\\email.txt"); //RunSilent("msmtp.exe -d -t <\\\\pipe\\SamplePipe"); #else char const *approot=getenv("VM_HOST_ROOT"); if(approot!=NULL) { std::string msmtpcmd("msmtp -C "); msmtpcmd.append(approot); msmtpcmd.append("/approot/msmtprc -X "); msmtpcmd.append(approot); msmtpcmd.append("/approot/openrda/"); if(mvars->srcuser!=NULL) { msmtpcmd.append(mvars->srcuser); msmtpcmd.append("/msmtp.log -t"); }else{ msmtpcmd.append("/unknown-msmtp.log -t"); } pipe=popen(msmtpcmd.c_str(),"w"); }else{ pipe=popen("msmtp -t","w"); } if(pipe==NULL) { cerr <<std::endl <<"ERROR SENDING EMAIL: MSMTP Failed. Ensure MSMTP Is Installed..." <<std::endl; //if(!mvars->ignerr) { // system("ok.lnx ERRORDIALOG \"ERROR SENDING EMAIL\" \"MSMTP Failed. Ensure MSMTP Is Installed...\""); //} }else{ fwrite(dataToSend.c_str(),(strlen(dataToSend.c_str())),1,pipe); } if(mvars->rdadiag) { cerr <<std::endl <<std::endl <<dataToSend.c_str() <<std::endl <<std::endl; } if(pipe!=NULL) { pclose(pipe); } DelayAfterSending(); /* Crash is coming from the implicit destructor when this function returns TRACE; ~msg( ); TRACE; */ #endif return(0); //fwrite(ostream1.str(),(strlen(ostream1.str())),1,pipe); //strcpy(firstName, my_string.c_str()); //std::cout << "strlen is " << strlen(ostream1.str()) std::endl; //std::cout << ostream1.str() << std::endl; //std::cout << dataToSend << std::endl; } // VMime exception catch (vmime::exception& e) { std::cerr << "vmime::exception: " << e.what() << std::endl; ostringstream verrmsg; std::string verrstring; verrmsg << "ERRORDIALOG \"ERROR SENDING EMAIL\" \"vmime::exception: " << e.what() << endl << endl << endl << endl << (mvars->from_name==NULL ? "" : "From Name: ") << (mvars->from_name==NULL ? "" : mvars->from_name) << (mvars->from_name==NULL ? "" : "\n" ) << (mvars->from_addr==NULL ? "" : "From Address: ") << (mvars->from_addr==NULL ? "" : mvars->from_addr) << (mvars->from_addr==NULL ? "" : "\n" ) << (mvars->tolist==NULL ? "" : "TO: ") << (mvars->tolist==NULL ? "" : mvars->tolist) << (mvars->tolist==NULL ? "" : "\n" ) << (mvars->cclist==NULL ? "" : "CC: ") << (mvars->cclist==NULL ? "" : mvars->cclist) << (mvars->cclist==NULL ? "" : "\n" ) << (mvars->bcclist==NULL ? "" : "BCC: ") << (mvars->bcclist==NULL ? "" : mvars->bcclist) << (mvars->bcclist==NULL ? "" : "\n" ) << (mvars->subject==NULL ? "" : "Subject: ") << (mvars->subject==NULL ? "" : mvars->subject) << (mvars->subject==NULL ? "" : "\n" ) << (mvars->fname[0]==NULL ? "" : "Filename 0: ") << (mvars->fname[0]==NULL ? "" : mvars->fname[0]) << (mvars->fname[0]==NULL ? "" : "\n" ) << (mvars->fname[1]==NULL ? "" : "Filename 1: ") << (mvars->fname[1]==NULL ? "" : mvars->fname[1]) << (mvars->fname[1]==NULL ? "" : "\n" ) << (mvars->fname[2]==NULL ? "" : "Filename 2: ") << (mvars->fname[2]==NULL ? "" : mvars->fname[2]) << (mvars->fname[2]==NULL ? "" : "\n" ) << (mvars->fname[3]==NULL ? "" : "Filename 3: ") << (mvars->fname[3]==NULL ? "" : mvars->fname[3]) << (mvars->fname[3]==NULL ? "" : "\n" ) << (mvars->fname[4]==NULL ? "" : "Filename 4: ") << (mvars->fname[4]==NULL ? "" : mvars->fname[4]) << (mvars->fname[4]==NULL ? "" : "\n" ) << (mvars->fname[5]==NULL ? "" : "Filename 5: ") << (mvars->fname[5]==NULL ? "" : mvars->fname[5]) << (mvars->fname[5]==NULL ? "" : "\n" ) << (mvars->fname[6]==NULL ? "" : "Filename 6: ") << (mvars->fname[6]==NULL ? "" : mvars->fname[6]) << (mvars->fname[6]==NULL ? "" : "\n" ) << (mvars->fname[7]==NULL ? "" : "Filename 7: ") << (mvars->fname[7]==NULL ? "" : mvars->fname[7]) << (mvars->fname[7]==NULL ? "" : "\n" ) << (mvars->fname[8]==NULL ? "" : "Filename 8: ") << (mvars->fname[8]==NULL ? "" : mvars->fname[8]) << (mvars->fname[8]==NULL ? "" : "\n" ) << (mvars->fname[9]==NULL ? "" : "Filename 9: ") << (mvars->fname[9]==NULL ? "" : mvars->fname[9]) << (mvars->fname[9]==NULL ? "" : "\n" ) << (mvars->dname[0]==NULL ? "" : "Attachment 0: ") << (mvars->dname[0]==NULL ? "" : mvars->dname[0]) << (mvars->dname[0]==NULL ? "" : "\n" ) << (mvars->dname[1]==NULL ? "" : "Attachment 1: ") << (mvars->dname[1]==NULL ? "" : mvars->dname[1]) << (mvars->dname[1]==NULL ? "" : "\n" ) << (mvars->dname[2]==NULL ? "" : "Attachment 2: ") << (mvars->dname[2]==NULL ? "" : mvars->dname[2]) << (mvars->dname[2]==NULL ? "" : "\n" ) << (mvars->dname[3]==NULL ? "" : "Attachment 3: ") << (mvars->dname[3]==NULL ? "" : mvars->dname[3]) << (mvars->dname[3]==NULL ? "" : "\n" ) << (mvars->dname[4]==NULL ? "" : "Attachment 4: ") << (mvars->dname[4]==NULL ? "" : mvars->dname[4]) << (mvars->dname[4]==NULL ? "" : "\n" ) << (mvars->dname[5]==NULL ? "" : "Attachment 5: ") << (mvars->dname[5]==NULL ? "" : mvars->dname[5]) << (mvars->dname[5]==NULL ? "" : "\n" ) << (mvars->dname[6]==NULL ? "" : "Attachment 6: ") << (mvars->dname[6]==NULL ? "" : mvars->dname[6]) << (mvars->dname[6]==NULL ? "" : "\n" ) << (mvars->dname[7]==NULL ? "" : "Attachment 7: ") << (mvars->dname[7]==NULL ? "" : mvars->dname[7]) << (mvars->dname[7]==NULL ? "" : "\n" ) << (mvars->dname[8]==NULL ? "" : "Attachment 8: ") << (mvars->dname[8]==NULL ? "" : mvars->dname[8]) << (mvars->dname[8]==NULL ? "" : "\n" ) << (mvars->dname[9]==NULL ? "" : "Attachment 9: ") << (mvars->dname[9]==NULL ? "" : mvars->dname[9]) << (mvars->dname[9]==NULL ? "" : "\n" ) << (mvars->mtype[0]==NULL ? "" : "MimeType 0: ") << (mvars->mtype[0]==NULL ? "" : mvars->mtype[0]) << (mvars->mtype[0]==NULL ? "" : "\n" ) << (mvars->mtype[1]==NULL ? "" : "MimeType 1: ") << (mvars->mtype[1]==NULL ? "" : mvars->mtype[1]) << (mvars->mtype[1]==NULL ? "" : "\n" ) << (mvars->mtype[2]==NULL ? "" : "MimeType 2: ") << (mvars->mtype[2]==NULL ? "" : mvars->mtype[2]) << (mvars->mtype[2]==NULL ? "" : "\n" ) << (mvars->mtype[3]==NULL ? "" : "MimeType 3: ") << (mvars->mtype[3]==NULL ? "" : mvars->mtype[3]) << (mvars->mtype[3]==NULL ? "" : "\n" ) << (mvars->mtype[4]==NULL ? "" : "MimeType 4: ") << (mvars->mtype[4]==NULL ? "" : mvars->mtype[4]) << (mvars->mtype[4]==NULL ? "" : "\n" ) << (mvars->mtype[5]==NULL ? "" : "MimeType 5: ") << (mvars->mtype[5]==NULL ? "" : mvars->mtype[5]) << (mvars->mtype[5]==NULL ? "" : "\n" ) << (mvars->mtype[6]==NULL ? "" : "MimeType 6: ") << (mvars->mtype[6]==NULL ? "" : mvars->mtype[6]) << (mvars->mtype[6]==NULL ? "" : "\n" ) << (mvars->mtype[7]==NULL ? "" : "MimeType 7: ") << (mvars->mtype[7]==NULL ? "" : mvars->mtype[7]) << (mvars->mtype[7]==NULL ? "" : "\n" ) << (mvars->mtype[8]==NULL ? "" : "MimeType 8: ") << (mvars->mtype[8]==NULL ? "" : mvars->mtype[8]) << (mvars->mtype[8]==NULL ? "" : "\n" ) << (mvars->mtype[9]==NULL ? "" : "MimeType 9: ") << (mvars->mtype[9]==NULL ? "" : mvars->mtype[9]) << (mvars->mtype[9]==NULL ? "" : "\n" ) << (mvars->fdata[0]==NULL ? "" : "File Data 0: ") << (mvars->fdata[0]==NULL ? "" : "TRUE") << (mvars->fdata[0]==NULL ? "" : "\n" ) << (mvars->fdata[1]==NULL ? "" : "File Data 1: ") << (mvars->fdata[1]==NULL ? "" : "TRUE") << (mvars->fdata[1]==NULL ? "" : "\n" ) << (mvars->fdata[2]==NULL ? "" : "File Data 2: ") << (mvars->fdata[2]==NULL ? "" : "TRUE") << (mvars->fdata[2]==NULL ? "" : "\n" ) << (mvars->fdata[3]==NULL ? "" : "File Data 3: ") << (mvars->fdata[3]==NULL ? "" : "TRUE") << (mvars->fdata[3]==NULL ? "" : "\n" ) << (mvars->fdata[4]==NULL ? "" : "File Data 4: ") << (mvars->fdata[4]==NULL ? "" : "TRUE") << (mvars->fdata[4]==NULL ? "" : "\n" ) << (mvars->fdata[5]==NULL ? "" : "File Data 5: ") << (mvars->fdata[5]==NULL ? "" : "TRUE") << (mvars->fdata[5]==NULL ? "" : "\n" ) << (mvars->fdata[6]==NULL ? "" : "File Data 6: ") << (mvars->fdata[6]==NULL ? "" : "TRUE") << (mvars->fdata[6]==NULL ? "" : "\n" ) << (mvars->fdata[7]==NULL ? "" : "File Data 7: ") << (mvars->fdata[7]==NULL ? "" : "TRUE") << (mvars->fdata[7]==NULL ? "" : "\n" ) << (mvars->fdata[8]==NULL ? "" : "File Data 8: ") << (mvars->fdata[8]==NULL ? "" : "TRUE") << (mvars->fdata[8]==NULL ? "" : "\n" ) << (mvars->fdata[9]==NULL ? "" : "File Data 9: ") << (mvars->fdata[9]==NULL ? "" : "TRUE") << (mvars->fdata[9]==NULL ? "" : "\n" ) << (mvars->body==NULL ? "" : "Body: ") << (mvars->body==NULL ? "" : mvars->body) << (mvars->body==NULL ? "" : "\n" ) << "\"" << endl; //verrstring=verrmsg.str(); std::cerr << verrmsg.str(); /* #ifdef WIN32 if(!mvars->ignerr) { //system("ok.exe ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(verrstring.c_str()); } #else if(!mvars->ignerr) { //system("ok.lnx ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(verrstring.c_str()); } #endif */ return(1); throw; } // Standard exception catch (std::exception& e) { std::cerr << "std::exception: " << e.what() << std::endl; ostringstream serrmsg; std::string serrstring; serrmsg << "ERRORDIALOG \"ERROR SENDING EMAIL\" \"std::exception: " << e.what() << endl << endl << endl << endl << (mvars->from_name==NULL ? "" : "From Name: ") << (mvars->from_name==NULL ? "" : mvars->from_name) << (mvars->from_name==NULL ? "" : "\n" ) << (mvars->from_addr==NULL ? "" : "From Address: ") << (mvars->from_addr==NULL ? "" : mvars->from_addr) << (mvars->from_addr==NULL ? "" : "\n" ) << (mvars->tolist==NULL ? "" : "TO: ") << (mvars->tolist==NULL ? "" : mvars->tolist) << (mvars->tolist==NULL ? "" : "\n" ) << (mvars->cclist==NULL ? "" : "CC: ") << (mvars->cclist==NULL ? "" : mvars->cclist) << (mvars->cclist==NULL ? "" : "\n" ) << (mvars->bcclist==NULL ? "" : "BCC: ") << (mvars->bcclist==NULL ? "" : mvars->bcclist) << (mvars->bcclist==NULL ? "" : "\n" ) << (mvars->subject==NULL ? "" : "Subject: ") << (mvars->subject==NULL ? "" : mvars->subject) << (mvars->subject==NULL ? "" : "\n" ) << (mvars->fname[0]==NULL ? "" : "Filename 0: ") << (mvars->fname[0]==NULL ? "" : mvars->fname[0]) << (mvars->fname[0]==NULL ? "" : "\n" ) << (mvars->fname[1]==NULL ? "" : "Filename 1: ") << (mvars->fname[1]==NULL ? "" : mvars->fname[1]) << (mvars->fname[1]==NULL ? "" : "\n" ) << (mvars->fname[2]==NULL ? "" : "Filename 2: ") << (mvars->fname[2]==NULL ? "" : mvars->fname[2]) << (mvars->fname[2]==NULL ? "" : "\n" ) << (mvars->fname[3]==NULL ? "" : "Filename 3: ") << (mvars->fname[3]==NULL ? "" : mvars->fname[3]) << (mvars->fname[3]==NULL ? "" : "\n" ) << (mvars->fname[4]==NULL ? "" : "Filename 4: ") << (mvars->fname[4]==NULL ? "" : mvars->fname[4]) << (mvars->fname[4]==NULL ? "" : "\n" ) << (mvars->fname[5]==NULL ? "" : "Filename 5: ") << (mvars->fname[5]==NULL ? "" : mvars->fname[5]) << (mvars->fname[5]==NULL ? "" : "\n" ) << (mvars->fname[6]==NULL ? "" : "Filename 6: ") << (mvars->fname[6]==NULL ? "" : mvars->fname[6]) << (mvars->fname[6]==NULL ? "" : "\n" ) << (mvars->fname[7]==NULL ? "" : "Filename 7: ") << (mvars->fname[7]==NULL ? "" : mvars->fname[7]) << (mvars->fname[7]==NULL ? "" : "\n" ) << (mvars->fname[8]==NULL ? "" : "Filename 8: ") << (mvars->fname[8]==NULL ? "" : mvars->fname[8]) << (mvars->fname[8]==NULL ? "" : "\n" ) << (mvars->fname[9]==NULL ? "" : "Filename 9: ") << (mvars->fname[9]==NULL ? "" : mvars->fname[9]) << (mvars->fname[9]==NULL ? "" : "\n" ) << (mvars->dname[0]==NULL ? "" : "Attachment 0: ") << (mvars->dname[0]==NULL ? "" : mvars->dname[0]) << (mvars->dname[0]==NULL ? "" : "\n" ) << (mvars->dname[1]==NULL ? "" : "Attachment 1: ") << (mvars->dname[1]==NULL ? "" : mvars->dname[1]) << (mvars->dname[1]==NULL ? "" : "\n" ) << (mvars->dname[2]==NULL ? "" : "Attachment 2: ") << (mvars->dname[2]==NULL ? "" : mvars->dname[2]) << (mvars->dname[2]==NULL ? "" : "\n" ) << (mvars->dname[3]==NULL ? "" : "Attachment 3: ") << (mvars->dname[3]==NULL ? "" : mvars->dname[3]) << (mvars->dname[3]==NULL ? "" : "\n" ) << (mvars->dname[4]==NULL ? "" : "Attachment 4: ") << (mvars->dname[4]==NULL ? "" : mvars->dname[4]) << (mvars->dname[4]==NULL ? "" : "\n" ) << (mvars->dname[5]==NULL ? "" : "Attachment 5: ") << (mvars->dname[5]==NULL ? "" : mvars->dname[5]) << (mvars->dname[5]==NULL ? "" : "\n" ) << (mvars->dname[6]==NULL ? "" : "Attachment 6: ") << (mvars->dname[6]==NULL ? "" : mvars->dname[6]) << (mvars->dname[6]==NULL ? "" : "\n" ) << (mvars->dname[7]==NULL ? "" : "Attachment 7: ") << (mvars->dname[7]==NULL ? "" : mvars->dname[7]) << (mvars->dname[7]==NULL ? "" : "\n" ) << (mvars->dname[8]==NULL ? "" : "Attachment 8: ") << (mvars->dname[8]==NULL ? "" : mvars->dname[8]) << (mvars->dname[8]==NULL ? "" : "\n" ) << (mvars->dname[9]==NULL ? "" : "Attachment 9: ") << (mvars->dname[9]==NULL ? "" : mvars->dname[9]) << (mvars->dname[9]==NULL ? "" : "\n" ) << (mvars->mtype[0]==NULL ? "" : "MimeType 0: ") << (mvars->mtype[0]==NULL ? "" : mvars->mtype[0]) << (mvars->mtype[0]==NULL ? "" : "\n" ) << (mvars->mtype[1]==NULL ? "" : "MimeType 1: ") << (mvars->mtype[1]==NULL ? "" : mvars->mtype[1]) << (mvars->mtype[1]==NULL ? "" : "\n" ) << (mvars->mtype[2]==NULL ? "" : "MimeType 2: ") << (mvars->mtype[2]==NULL ? "" : mvars->mtype[2]) << (mvars->mtype[2]==NULL ? "" : "\n" ) << (mvars->mtype[3]==NULL ? "" : "MimeType 3: ") << (mvars->mtype[3]==NULL ? "" : mvars->mtype[3]) << (mvars->mtype[3]==NULL ? "" : "\n" ) << (mvars->mtype[4]==NULL ? "" : "MimeType 4: ") << (mvars->mtype[4]==NULL ? "" : mvars->mtype[4]) << (mvars->mtype[4]==NULL ? "" : "\n" ) << (mvars->mtype[5]==NULL ? "" : "MimeType 5: ") << (mvars->mtype[5]==NULL ? "" : mvars->mtype[5]) << (mvars->mtype[5]==NULL ? "" : "\n" ) << (mvars->mtype[6]==NULL ? "" : "MimeType 6: ") << (mvars->mtype[6]==NULL ? "" : mvars->mtype[6]) << (mvars->mtype[6]==NULL ? "" : "\n" ) << (mvars->mtype[7]==NULL ? "" : "MimeType 7: ") << (mvars->mtype[7]==NULL ? "" : mvars->mtype[7]) << (mvars->mtype[7]==NULL ? "" : "\n" ) << (mvars->mtype[8]==NULL ? "" : "MimeType 8: ") << (mvars->mtype[8]==NULL ? "" : mvars->mtype[8]) << (mvars->mtype[8]==NULL ? "" : "\n" ) << (mvars->mtype[9]==NULL ? "" : "MimeType 9: ") << (mvars->mtype[9]==NULL ? "" : mvars->mtype[9]) << (mvars->mtype[9]==NULL ? "" : "\n" ) << (mvars->fdata[0]==NULL ? "" : "File Data 0: ") << (mvars->fdata[0]==NULL ? "" : "TRUE") << (mvars->fdata[0]==NULL ? "" : "\n" ) << (mvars->fdata[1]==NULL ? "" : "File Data 1: ") << (mvars->fdata[1]==NULL ? "" : "TRUE") << (mvars->fdata[1]==NULL ? "" : "\n" ) << (mvars->fdata[2]==NULL ? "" : "File Data 2: ") << (mvars->fdata[2]==NULL ? "" : "TRUE") << (mvars->fdata[2]==NULL ? "" : "\n" ) << (mvars->fdata[3]==NULL ? "" : "File Data 3: ") << (mvars->fdata[3]==NULL ? "" : "TRUE") << (mvars->fdata[3]==NULL ? "" : "\n" ) << (mvars->fdata[4]==NULL ? "" : "File Data 4: ") << (mvars->fdata[4]==NULL ? "" : "TRUE") << (mvars->fdata[4]==NULL ? "" : "\n" ) << (mvars->fdata[5]==NULL ? "" : "File Data 5: ") << (mvars->fdata[5]==NULL ? "" : "TRUE") << (mvars->fdata[5]==NULL ? "" : "\n" ) << (mvars->fdata[6]==NULL ? "" : "File Data 6: ") << (mvars->fdata[6]==NULL ? "" : "TRUE") << (mvars->fdata[6]==NULL ? "" : "\n" ) << (mvars->fdata[7]==NULL ? "" : "File Data 7: ") << (mvars->fdata[7]==NULL ? "" : "TRUE") << (mvars->fdata[7]==NULL ? "" : "\n" ) << (mvars->fdata[8]==NULL ? "" : "File Data 8: ") << (mvars->fdata[8]==NULL ? "" : "TRUE") << (mvars->fdata[8]==NULL ? "" : "\n" ) << (mvars->fdata[9]==NULL ? "" : "File Data 9: ") << (mvars->fdata[9]==NULL ? "" : "TRUE") << (mvars->fdata[9]==NULL ? "" : "\n" ) << (mvars->body==NULL ? "" : "Body: ") << (mvars->body==NULL ? "" : mvars->body) << (mvars->body==NULL ? "" : "\n" ) << "\"" << endl; //serrstring=serrmsg.str(); std::cerr << serrmsg.str(); /* #ifdef WIN32 if(!mvars->ignerr) { //system("ok.exe ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(serrstring.c_str()); } #else if(!mvars->ignerr) { //system("ok.lnx ERRORDIALOG \"ERROR SENDING EMAIL\" \"No Email Recipients Specified...\""); system(serrstring.c_str()); } #endif */ return(1); throw; } return(0); }
VMIME_TEST_LIST_END void testBase64() { static const vmime::string testSuites[] = { // Test 1 "", "", // Test 2 "A", "QQ==", // Test 3 "AB", "QUI=", // Test 4 "ABC", "QUJD", // Test 5 "foo", "Zm9v", // Test 6 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx" "MjM0NTY3ODk=", // Test 7 vmime::string( "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 256), "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1" "Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWpr" "bG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch" "oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX" "2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==" }; for (unsigned int i = 0 ; i < sizeof(testSuites) / sizeof(testSuites[0]) / 2 ; ++i) { const vmime::string decoded = testSuites[i * 2]; const vmime::string encoded = testSuites[i * 2 + 1]; std::ostringstream oss; oss << "[Base64] Test " << (i + 1) << ": "; // Encoding VASSERT_EQ(oss.str() + "encoding", encoded, encode("base64", decoded)); // Decoding VASSERT_EQ(oss.str() + "decoding", decoded, decode("base64", encoded)); // Multiple and successive encoding/decoding VASSERT_EQ(oss.str() + "multiple1", decoded, decode("base64", encode("base64", decoded))); VASSERT_EQ(oss.str() + "multiple2", decoded, decode("base64", decode("base64", encode("base64", encode("base64", decoded))))); VASSERT_EQ(oss.str() + "multiple3", decoded, decode("base64", decode("base64", decode("base64", encode("base64", encode("base64", encode("base64", decoded))))))); VASSERT_EQ(oss.str() + "multiple4", decoded, decode("base64", decode("base64", decode("base64", decode("base64", encode("base64", encode("base64", encode("base64", encode("base64", decoded))))))))); VASSERT(oss.str() + "encoded size", getEncoder("base64")->getEncodedSize(decoded.length()) >= encode("base64", decoded).length()); VASSERT(oss.str() + "decoded size", getEncoder("base64")->getDecodedSize(encoded.length()) >= decode("base64", encoded).length()); } }
void windowsSocket::send(const vmime::string& buffer) { ::send(m_desc, buffer.data(), buffer.length(), 0); }