Scan/Replace Text in Email Body in C++
This example may help C++ programmers needing to scan email bodies for strings and automatically replace:
void EmailBodyExample(void) { CkEmail email; // Set the plain-text and HTML alternative bodies. // Note: Because we're using literal strings, the strings passed // to these methods are ANSI strings (i.e. they are 1-byte per char // in this case). email.AddPlainTextAlternativeBody("á, é, í, ó, ú, abc"); email.AddHtmlAlternativeBody("<html><body><p>á, é, í, ó, ú, abc</p></body></html>"); // Suppose we don't know the language or charset of the email? // Maybe it's Chinese, perhaps it's Hebrew... // You can get the body text in utf-8 (the multibyte encoding of Unicode) // for all languages. Here's how to do it: CkString strPlainTextBody; CkString strHtmlBody; // Get the email bodies into the CkString objects: email.GetPlainTextBody(strPlainTextBody); email.GetHtmlBody(strHtmlBody); // Now get the utf-8 (null-terminated) strings: const char *strUtf8PlainTextBody = strPlainTextBody.getUtf8(); const char *strUtf8HtmlBody = strHtmlBody.getUtf8(); // Suppose you want to modify the body and replace it? // Let's replace "abc" with "123". // One way to do it is like this: strPlainTextBody.replaceAllOccurances("abc","123"); // Tell the email object that "const char *" arguments will point to utf-8, // not ANSI: email.put_Utf8(true); // Pass the modified utf-8 string. // AddPlainTextAlternativeBody will replace the existing plain-text // body if it already exists. email.AddPlainTextAlternativeBody(strPlainTextBody.getUtf8()); // Another way to do it: char *tmpBuf = new char[strHtmlBody.getSizeUtf8()+1]; // Add 1 for the terminating null strcpy(tmpBuf,strUtf8HtmlBody); char *abc = strstr(tmpBuf,"abc"); if (abc) { *abc = '1'; abc++; *abc = '2'; abc++; *abc = '3'; } email.AddHtmlAlternativeBody(tmpBuf); delete [] tmpBuf; // Save the email and examine it using a text editor or email client.. email.SaveEml("out.eml"); }
admin
0
Tags :