每次我的模拟结束时,我想发送一封电子邮件给我的Gmail账户。我试图搜索网页,发现sendEmail,但它是超时。如果任何人都可以指出我试过的包或链接,我会很感激。发送来自Linux中的C/C++程序的电子邮件
感谢
每次我的模拟结束时,我想发送一封电子邮件给我的Gmail账户。我试图搜索网页,发现sendEmail,但它是超时。如果任何人都可以指出我试过的包或链接,我会很感激。发送来自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]);
}
我喜欢上面的trojanfoe的答案,但在我的情况下,我需要打开一个电子邮件发送代理..一个MTA使Linux能够发送电子邮件 - 我发现exim4是一个相对简单的MTA工作和该trojanfoe的程序与它很好地工作。
得到它的工作,我用(Debian的类型系统上的虚框(crunchbang的Linux))
命令和apt-get安装进出口
命令和apt-get安装mailutils
我配置的exim4与
须藤dpkg的-重新配置的exim4-配置
,我告诉我的正常的(远程)的电子邮件地址的计算机
须藤的emacs的/ etc /电子邮件地址
希望因为这些步骤,这可能是有用的我发现工作得到上述
我的Linux系统中发送电子邮件trojanfoe的电子邮件程序做一个叉Exec和管身如sendmail /邮件程序:
#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 protected]", "Subject", "Body");
}
你为什么不使用sendmail?http://www.linuxquestions.org/questions/linux-newbie-8/sendmail-from-the-command-line-288920/ – perreal 2012-02-16 18:57:11
我不是管理员系统,所以我无法为我的Gmail帐户设置系统。 – Madagascar 2012-02-16 18:59:36
如何打开套接字到SMTP服务器并创建原始电子邮件并以此方式传递? – crush 2012-02-16 19:01:37