0

我正在尝试从我在 linux (centos 64bit) 上的 C 程序发送一封电子邮件。以下(简化的)代码很有效:

asprintf(&cmd,"/usr/sbin/sendmail -oi -t -f me@blah.com somebody@blah.com");
asprintf(&bdy,"From: me@blah.com\nTo: somebody@blah.com\nSubject: blah blah\n\nThis is the message body\n");

FILE *out = popen(cmd,"w");
fprintf(out,"%s",bdy);
pclose(out);

问题是它会阻塞并在返回之前最多需要一两秒钟。如何在不阻止的情况下发送电子邮件?

更多信息:问题是 popen 阻塞并在返回之前等待完成。所以我可能正在寻找另一种使用 sendmail 的方法。我真的不想使用额外的库来处理所有的臃肿。如果可能的话,我宁愿不分叉。(popen 已经分叉,但在返回调用者之前等待完成)是否存在不阻塞的 popen 等价物?

4

2 回答 2

1

最简单的解决方案是从不同的线程发送(这可以像使用fork()一样简单),这可以让您的程序在发送邮件的同时继续执行

于 2012-12-03T07:00:33.700 回答
0

您可能想使用一些 SMTP 客户端库,请参阅此问题

您可以将您的机器设置为 SMTP智能主机

您还可以直接使用与低级进程相关的系统调用,例如fork(2)pipe(2)dup2(2)execve(2)poll(2)waitpid(2)等。阅读高级 Linux编程以了解更多信息。

你可以敢于使用多线程。了解有关pthread的更多信息。

于 2012-12-03T06:53:24.943 回答