在 C++ 中发送电子邮件错误

send email error in c++

本文关键字:电子邮件 错误 C++      更新时间:2023-10-16

我有一个简单的 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 %sn",       from);    // greeting
 sendmail_write(sock, "MAIL FROM: %sn", from);    // from
 sendmail_write(sock, "RCPT TO: %sn",   to);      // to
 sendmail_write(sock, "DATAn",          NULL);    // begin data
 // next comes mail headers
 sendmail_write(sock, "From: %sn",      from);
 sendmail_write(sock, "To: %sn",        to);
 sendmail_write(sock, "Subject: %sn",   subject);
 sendmail_write(sock, "n",              NULL);
 sendmail_write(sock, "%sn",            body);    // data
 sendmail_write(sock, ".n",             NULL);    // end data
 sendmail_write(sock, "QUITn",          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;
}

我的错误是这样的:

错误 LNK2019:函数"int __cdecl sendmail(字符常量 *,字符常量 *,字符常量 *,字符常量 *,字符常量 *,字符常量 *,int)"(?sendmail@@YAHPBD0000H@Z)中引用未解析的外部__imp__connect@12符号


我尝试了"smtp.gmail.com",现在没有例外,但它显示"邮件已成功发送",而我的收件箱中没有看到任何电子邮件。 知道吗?

确保链接 Windows 套接字库:

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

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

请参阅如何链接 WS2_32.lib