在Linux中发送一个来自C / C ++程序的电子邮件

每当我的模拟结束,我想发一个电子邮件到我的Gmail帐户。 我试图searchnetworking,发现sendEmail,但它是超时。 如果有人能指出我试过的一个包或链接,我会很感激。

谢谢

Solutions Collecting From Web of "在Linux中发送一个来自C / C ++程序的电子邮件"

你可以直接使用popen()来调用你的本地MTA,并为它提供符合RFC822的文本。

 #include <stdio.h> #include <string.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; } main(int argc, char** argv) { int i; printf("argc = %d\n", argc); for (i = 0; i < argc; i++) printf("argv[%d] = \"%s\"\n", i, argv[i]); sendmail(argv[1], argv[2], argv[3], argv[4]); } 

libESMTP似乎是你在找什么。 这是非常有据可查的,也似乎正在积极的发展(最后发布候选人是从2012年1月中旬)。 它还支持SSL和各种身份验证协议。

源代码包中有示例应用程序。

VMime和libcurl都是用于发送电子邮件的好库(以及更多)。

我喜欢上面的trojanfoe的答案,但在我的情况下,我需要打开一个电子邮件发送代理..一个MTA使Linux能够发送电子邮件 – 我发现exim4是一个相对简单的MTA得到工作,并且trojanfoe的程序工作非常好。

让它工作我用(在虚拟框中的debian类型系统(crunchbang linux))

sudo apt-get install exim

sudo apt-get install mailutils

我配置了exim4

sudo dpkg-reconfigure exim4-config

我告诉计算机关于我的正常(远程)电子邮件地址

sudo emacs / etc / email-addresses

希望这可能是有用的,因为这些是我找到的步骤让我的Linux系统发送电子邮件与trojanfoe的电子邮件程序上面

做一个fork exec,然后将这个正文传送给像sendmail / mail这样的程序:

 #include <string> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> using std::string; static const int READEND = 0; static const int WRITEEND = 1; int sendEmail(const string& to, const string& subject, const string& body) { int p2cFd[2]; int ret = pipe(p2cFd); if (ret) { return ret; } pid_t child_pid = fork(); if (child_pid < 0) { close(p2cFd[READEND]); close(p2cFd[WRITEEND]); return child_pid; } else if (!child_pid) { dup2(p2cFd[READEND], READEND); close(p2cFd[READEND]); close(p2cFd[WRITEEND]); execlp("mail", "mail", "-s", subject.c_str(), to.c_str(), NULL); exit(EXIT_FAILURE); } close(p2cFd[READEND]); ret = write(p2cFd[WRITEEND], body.c_str(), body.size()); if (ret < 0) { return ret; } close(p2cFd[WRITEEND]); if (waitpid(child_pid, &ret, 0) == -1) { return ret; } return 0; } int main() { return sendEmail("email@hostname.com", "Subject", "Body"); }