странное поведение procmail при передаче содержимого в исполняемый файл c ++

У меня есть рабочий конфиг procmail.
это rc.filters:

:0 w :a.lock
* ^From:(.*\<)?(try@gmail\.com)\>
| $HOME/executable/a.out

этот файл компилируется и работает, procmail доставляет почту,
и исполняемый файл записывает содержимое в выходной файл.

#include <stdlib.h>
#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
ofstream myfile;
myfile.open ("output.txt");

string line;
while (getline(cin, line))
{
myfile << line << endl;
}
myfile.close();
return EXIT_SUCCESS;
}

проблема в том, что мне нужен объект cin с содержимым для передачи
конструктору подражательный библиотека.
Мне нужен этот исполняемый файл для работы:

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <mimetic/mimetic.h>

using namespace std;
using namespace mimetic;

int main(void)
{
ofstream myfile;
myfile.open ("output.txt");

MimeEntity me(cin);
const Header& h = me.header();
string subjectString = h.subject();
myfile << subjectString;
myfile << "Check";
myfile.close();
return EXIT_SUCCESS;
}

Если я возьму сообщение Mime с именем message.txt и сделаю следующее со вторым кодом:

cat message.txt | ./a.out

./a.out < message.txt

В обоих случаях исполняемый файл работает, и я получаю тему в output.txt
но для некоторых, когда он вызывается и контент, переданный через procmail, не работает,
и все, что я получаю в output.txt, это «Проверка», что означает, что файл
по крайней мере был вызван.

procmail.log утверждает, что все в порядке.

0

Решение

Я не знаю, что именно происходит, но я бы запечатлел std::cin в строку, а затем передать std::istringstream построен из этого значения в MimeEntity, Таким образом, вы можете проверить, что вход std::cin когда он еще обрабатывался библиотекой:

std::istreambuf_iterator<char> begin(std::cin), end;
std::string message(begin, end);
out << "received >>>" << message << "<<<\n";
std::istringstream in(message);
MimeEntity me(in);
// ...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]