目标是像php mail
函数一样在Unix机器上发送电子邮件。在StackOverflow上,我已经找到了执行此操作的功能,但是也许有人可以建议一个更优雅的解决方案,或者没有fprintf
和fwrite
的解决方案?因为我不在C++程序中使用printf
,所以:
#include<stdio.h>
#include<errno.h>
int sendmail(const char *to, const char *from, const char *subject, const char *message)
{
int retval = -1;
FILE *mailpipe = popen("usr/lib/sendmail -t", "w");
if (mailpipe != NULL)
{
fprintf(mailpipe, "To: %s\n", to);
fprintf(mailpipe, "From: %s\n" from);
fprintf(mailpipe, "Subject: %s\n\n", subject);
fwrite(message, 1, strlen(message), mailpipe);
fwrite(".\n", 1, 2, mailpipe);
pclose(mailpipe);
retval = 0;
}
else
{
perror("Failed to invoke sendmail”);
}
return retval;
}
最佳答案
恕我直言,您只有两种方式。首先是使用sendmail子进程。在较低的级别,您将通过管道和AFAIK与之通信,没有将C++流与管道关联的标准方法。因此,您将不得不使用旧的write
,fwrite
或fprints
输出数据。
另一种方法是直接打开smtp服务器的套接字并使用SMTP协议(protocol)(EHLO或HELO,MAIL FROM:,RCPT TO:DATA和BYE)来处理服务器的响应... :-(和无论如何,没有更多的标准方法可以从套接字创建C++流!
如果您不想使用fwrite和fprintf的原因是不想使用C标准库,则直接使用系统调用:准备要与C++字符串或strstream
一起发送的字符串,然后发送结果用write直接连接到管道。而且,如果您也不希望使用write,只需问问自己C++库如何写入文件...