0

我有一个有效的 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 对象来传递给Mimetic库的构造函数。我需要这个可执行文件才能工作:

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

如果我收到一条名为 message.txt 的 Mime 消息,并使用第二个代码执行以下操作:

cat message.txt | ./a.out

./a.out < message.txt

在这两种情况下,可执行文件都有效,我在 output.txt 中获得了主题,
但是对于某些人来说,当它被调用并且通过 procmail 管道传输的内容时它不起作用,
我在 output.txt 中得到的只是“检查”,这意味着该文件至少被调用。

procmail.log 声明一切都很好。

4

1 回答 1

0

我不知道到底发生了什么,但我会将输入从std::cin字符串中捕获,然后std::istringstream将由该值构造的 a 传递给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);
// ...
于 2013-08-24T21:15:07.977 回答