Простой способ отправить письмо в формате HTML в C ++ - PullRequest
1 голос
/ 24 мая 2011

У меня есть 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 ]

2 голосов
/ 24 мая 2011

Самый простой способ, который я знаю, это использовать SMTPClientSession класс из POCO C ++ БиблиотекиВот хороший пример .

1 голос
/ 25 мая 2011

Спасибо всем за ответы. Я решил просто вызвать скрипт 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());
1 голос
/ 24 мая 2011

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";
}

От того, откуда вы получите поток почты, зависит от того, какой почтовый пакет вы используете.

1 голос
/ 24 мая 2011

Вы можете рассмотреть миметик

1 голос
/ 24 мая 2011

Вы можете определить текст как 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::string, либо char *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...