使用C ++发送HTML格式化电子邮件的简便方法

时间:2011-05-24 17:50:52

标签: c++ html perl forms

我有一个HTML表单,当前接收输入并将其发送到带有HTML格式的电子邮件中,这样电子邮件看起来基本上就像表单网页一样,但填写了所有字段。

<form method="post" action="/cgi-bin/perlscript.pl" enctype="x-www-form-encoded" name="Form">
   <input type="text" name="txtMyText" id="txtMyText" />
</form>

动作后脚本是用Perl编写的,我目前正在将它转换为C ++,因为我更容易阅读和维护这种方式。此外,我认为它对未来的添加更加灵活。

在Perl中,我能够使用“SendMail”发送电子邮件,我可以这样做:

sub PrintStyles
{
print MAIL <<ENDMAIL
<html>
    <head>
        <style>
        h1.title { color: Red; }
        h3.title { color : Black; background-color: yellow; }
        </style>

<!-- Put any valid HTML here that you want -->
<!-- You can even put variables ($xxxx) into the HTML as well, like this: -->
                <td>$myVariable</td>

ENDMAIL
}

有什么好处的,我可以直接复制并粘贴我的整个CSS和HTML文件(非常冗长),只要它们位于“ENDMAIL”标签之间,它们就会完美地显示出来。我甚至可以把变量放在那里,而不需要做任何额外的工作。

我的问题是:是否有一个具有类似功能的C ++库?我真的认为我没有能力做这样的事情:

cout << "<html>" << endl;
cout << "<head>" << endl;
cout << "......" << endl;

我希望它相当轻盈。

感谢。

5 个答案:

答案 0 :(得分:2)

我所知道的最简单的方法是使用SMTPClientSession库中的POCO C++类。 这是good example

答案 1 :(得分:1)

您可以将文字定义为const char *,这样可以减轻通过cout输出每一行的痛苦和痛苦:

const char email_text[] =
"<html>\n"
"<head>\n"
"....";

cout.write(email_text, sizeof(email_text) - 1);
cout.flush();

std::string email_string(email_text);
cout << email_text;
cout.flush();

我没有使用过这个库,但我的猜测是你需要传递std::stringchar *

答案 2 :(得分:1)

您可以考虑mimetic

答案 3 :(得分:1)

C ++不支持这里的文件 您需要使用一个字符串并将其发送到您想要的流:

void PrintStyles(ostream& mailstream)
{

    mailstream <<  
    "<html>\n"
    "    <head>\n"
    "        <style>\n"
    "        h1.title { color: Red; }\n"
    "        h3.title { color : Black; background-color: yellow; }\n"
    "        </style>\n"
    "\n"
    "<!-- Put any valid HTML here that you want -->\n"
    "<!-- You can even put variables (" << xxxx << ") into the HTML as well, like this: -->\n"
    "                <td>" << myVariable << "</td>\n"
    "\n"
    "\n";
}

您收到的邮件流取决于您使用的电子邮件包。

答案 4 :(得分:1)

谢谢大家的回复。我决定只从我的代码中调用Perl脚本,并将响应数据作为参数发送。我知道它可能不是最好的解决方案,但我不认为我的C ++选项是值得的。

// Retrieve the POST data    
char* contentLength = getenv{"CONTENT_LENGTH"};
int contentSize     = atoi(contentLength);
char* contentBuffer = (char*)malloc(contentSize);
fread(contentBuffer, 1, contentSize, stdin);
string data         = contentBuffer;

// Execute "sendmail.pl" script
string perlFile     = "sendmail.pl";
string command      = "perl " + perlFile + " \"" + data + "\"";
system(command.c_str());