c++ - C++发送邮件错误

标签 c++

我有一个简单的 C++ 发送电子邮件应用程序,但是当我运行它时,出现链接错误。问题是什么? 另一个问题,错误是否与主机名参数有关?我将其设置为“smtp.google.com”?

 #include "io.h"
 #include "winsock2.h"      /* WSAGetLastError, WSAStartUp  */
 #include <iostream>
 using namespace std;
 #define snprintf _snprintf


 static void sendmail_write(
            const int  sock,
            const char *str,
            const char *arg
        ) {
 char buf[4096];

 if (arg != NULL)
    snprintf(buf, sizeof(buf), str, arg);
 else
    snprintf(buf, sizeof(buf), str);

 send(sock, buf, strlen(buf), 0);
}

static int sendmail(
            const char *from,
            const char *to,
            const char *subject,
            const char *body,
            const char *hostname,
            const int   port
        ) {

struct hostent *host;
struct sockaddr_in saddr_in;
int sock = 0;


WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
    return -1;
}


  sock = socket(AF_INET, SOCK_STREAM, 0);
host = gethostbyname(hostname);

saddr_in.sin_family      = AF_INET;
saddr_in.sin_port        = htons((u_short)port);
saddr_in.sin_addr.s_addr = 0;

memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);

if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1) {
    return -2;
}

 sendmail_write(sock, "HELO %s\n",       from);    // greeting
 sendmail_write(sock, "MAIL FROM: %s\n", from);    // from
 sendmail_write(sock, "RCPT TO: %s\n",   to);      // to
 sendmail_write(sock, "DATA\n",          NULL);    // begin data

 // next comes mail headers
 sendmail_write(sock, "From: %s\n",      from);
 sendmail_write(sock, "To: %s\n",        to);
 sendmail_write(sock, "Subject: %s\n",   subject);

 sendmail_write(sock, "\n",              NULL);

 sendmail_write(sock, "%s\n",            body);    // data

 sendmail_write(sock, ".\n",             NULL);    // end data
 sendmail_write(sock, "QUIT\n",          NULL);    // terminate

 close(sock);

 return 0;
}


int main(int argc, char *argv[]) {

int ret = sendmail(
    "someone@gmail.com",  // from
    "someone@gmail.com", // to
    "Subject",
    "body",
    "smtp.google.com",
    25
);

if (ret != 0)
    cout<< "Failed to send mail (code: %i).\n";
else
    cout<<"Mail successfully sent.\n";

return ret;
}

我的错误是:

error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "int __cdecl sendmail(char const *,char const *,char const *,char const *,char const *,int)" (?sendmail@@YAHPBD0000H@Z)


我试过“smtp.gmail.com”,现在没有异常(exception),但它显示“邮件已成功发送”,而我在收件箱中没有看到任何电子邮件。有什么想法吗?

最佳答案

确保链接 Windows 套接字库:

#pragma comment(lib, "ws2_32.lib")

或添加ws2_32.lib到项目链接设置。

参见 How to link WS2_32.lib

关于c++ - C++发送邮件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682111/

相关文章:

c++ - 最佳实践 : How to get a unique identifier for the object

python - C++ Qt 相当于 python unpack_from

c++ - 使用 PoDoFo 构建 PdfXObject

c++ - 如何将构造函数参数转发给 boost::optional

python - vec4 多个 mat4,然后在 Python 中将其设为 vec3

C++ 使用命名空间语句

c++ - init_seg和库代码中的警告C4073?

c++ - operator>> 和 << 输出在输出时为空

c++ - 保护应用程序免受库泄漏

c++ - 如何在 C++ 和归并排序中比较字符串