4

mail目标是像 php函数一样在 Unix 机器上发送电子邮件。在 StackOverflow 上我已经找到了一个功能,但也许有人可以提出更优雅的解决方案或没有fprintfand的解决方案fwrite?因为我不在printf我的C++程序中使用:

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

1 回答 1

1

恕我直言,您只有两种方法可以做到这一点。首先是使用 sendmail 子进程。在较低级别,您将通过管道与它进行通信,AFAIK 没有将 C++ 流关联到管道的标准方法。所以你将不得不使用旧的writefwrite或者fprints输出你的数据。

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

如果你不想使用 fwrite 和 fprintf 的原因是你不想使用 C 标准库,直接使用系统调用:准备要发送的字符串,用 C++ 字符串或 a strstream,并将结果发送到管道直接用write。如果您也不想使用 write,只需问问自己 C++ 库是如何写入文件的...

于 2014-09-24T14:36:40.593 回答