代码之家  ›  专栏  ›  技术社区  ›  abdoe

Smtp客户端-发件人和收件人不发送

  •  5
  • abdoe  · 技术社区  · 7 年前

    我有一个内置于c++中的smtp客户端,可以向我的测试邮件陷阱帐户发送电子邮件。 邮件头已发送,电子邮件也已送达。

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

    enter image description here

    我正在发送标题

    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();
    

    谢谢你的装束

    1 回复  |  直到 7 年前
        1
  •  4
  •   p-a-o-l-o    7 年前

    我设法使字段出现,编辑您的 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");
    }
    

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

    什么(显然)重要:

    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());