目标是像php mail函数一样在Unix机器上发送电子邮件。在StackOverflow上,我已经找到了执行此操作的功能,但是也许有人可以建议一个更优雅的解决方案,或者没有fprintffwrite的解决方案?因为我不在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++流与管道关联的标准方法。因此,您将不得不使用旧的writefwritefprints输出数据。

另一种方法是直接打开smtp服务器的套接字并使用SMTP协议(protocol)(EHLO或HELO,MAIL FROM:,RCPT TO:DATA和BYE)来处理服务器的响应... :-(和无论如何,没有更多的标准方法可以从套接字创建C++流!

如果您不想使用fwrite和fprintf的原因是不想使用C标准库,则直接使用系统调用:准备要与C++字符串或strstream一起发送的字符串,然后发送结果用write直接连接到管道。而且,如果您也不希望使用write,只需问问自己C++库如何写入文件...

08-26 21:36
查看更多