У меня есть рабочий конфиг 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 утверждает, что все в порядке.
Я не знаю, что именно происходит, но я бы запечатлел 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);
// ...
Других решений пока нет …