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;
}
私のエラーはこれです:
エラー LNK2019: 関数 "int __cdecl sendmail(char const *,char const *,char const *,char const *,char const *,int)" で参照されている未解決の外部シンボル __imp__connect@12 (?sendmail@@YAHPBD0000H@Z)
「smtp.gmail.com」を試してみましたが、例外はありませんが、「メールは正常に送信されました」と表示されますが、受信トレイにはメールがありません。何か案が?