【问题标题】:Smtp client - from and to not sendSMTP 客户端 - 从和不发送
【发布时间】:2017-12-30 00:24:03
【问题描述】:

我有一个用 c++ 构建的 smtp 客户端,我可以在其中向我的测试邮件陷阱帐户发送电子邮件。 标头已发送,电子邮件也正常到达。

我的问题是,指示从/到的字段是空的 - 如屏幕截图所示

我正在发送带有

的标题
write_command("MAIL FROM: <foo@bar.de>");
write_command("RCPT TO: <foo@bar.de>");

我用我的 Smtp 客户端的完整代码做了一个要点

https://gist.github.com/anonymous/7bb13de7f044bcb5d07d0e6a9d991ea9

我从我的 main() 函数调用它

 Smtp smtp_client = Smtp();
 smtp_client.new_connection("smtp.mailtrap.io", 25);
 smtp_client.auth_login("username", "password");
 smtp_client.sendmail();
 smtp_client.close_connection();

感谢您的关注

【问题讨论】:

  • 我想我做到了。我编辑了答案。

标签: c++ email smtp smtpclient


【解决方案1】:

我设法使字段出现,稍微编辑您的sendmail 函数:

void sendmail()
{
    write_command("MAIL FROM: <foo@bar.de>");
    write_command("RCPT TO: <foo@bar.de>");

    write_command("DATA");

    std::string data;
    data.append("MIME-Version: 1.0\r\n");
    data.append("From: <foo@bar.de>\r\n");
    data.append("To: <foo@bar.de>\r\n");
    data.append("Subject: Welcome\r\n");
    data.append("Date: Fri, 29 Dec 2017 09:30:00 -0400\r\n");
    data.append("\r\n"); //this seems to matter
    data.append("This is a test");
    data.append("\r\n.");
    write_command(data);

    write_command("QUIT");
}

我将整个 DATA 放在一个字符串中,并在一次写入中发送。

什么(显然)重要:

  1. 不要以空行开始数据部分;
  2. 在消息文本前添加一个空行。

我还编辑了您的write_command,它与您的问题无关,但我建议您不要将字符串复制到缓冲区,而是直接使用字符串:

    //char command_buffer[255];
    //strcpy(command_buffer, command.c_str());
    //n = write(sockfd,command_buffer,strlen(command_buffer));
    n = write(sockfd,command.c_str(),command.length());

【讨论】:

  • 我进一步调查,我认为这是对免费帐户的故意限制。每当您进入演示收件箱时,xhr 都会下载 json 格式的消息,并且每个对象都有许多空字段,特别是:from_emailfrom_nameto_emailto_name...基本上,你得到的都是免费是text_body 和其他一些信息。
  • 一开始我也是这么想的——但是当我用 telnet 做同样的事情时——这些字段被填满了。所以我想我错过了什么
  • 非常感谢您在这里付出的所有努力——这对我很有帮助
猜你喜欢
  • 2011-11-08
  • 2017-05-08
  • 2020-12-22
  • 1970-01-01
  • 2013-10-31
  • 2015-01-08
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多