使用Unix sendmail发送电子邮件

4
目标是在类似于php的Unix机器上发送电子邮件,就像mail函数一样。在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;
}

据我所知,目前没有标准的方法来做到这一点。 - Man Vs Code
优雅或简单的方式?似乎PHP是用C++编写的。PHP如何实现这个功能? - abrahab
2
你无法避免输入。作为替代方案,你可以使用 ofstream 代替 fprintf。 - Sach
1
请参考以下网址:www.cplusplus.com/doc/tutorial/files/ 和 http://www.cplusplus.com/reference/fstream/ofstream/ofstream/。 - Sach
Poco::Net::SMTPClientSession 可能会有所帮助,同时可以参考这个 教程 - Shafik Yaghmour
显示剩余2条评论
1个回答

1
我认为你只有两种方法可以做到这一点。第一种是使用sendmail子进程。在更低的级别上,你会通过管道与它通信,据我所知,没有标准的方法将C ++流与管道关联起来。因此,你将不得不使用老旧的writefwritefprints来输出你的数据。

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

如果你不想使用fwrite和fprintf的原因是你不想使用C标准库,那么就直接使用系统调用:用C++字符串或strstream准备要发送的字符串,并直接用write将结果发送到管道中。如果你也不想使用write,请问一下C ++库是如何向文件写入的......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接