在 C++ 中发送电子邮件错误
send email error in 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 %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
相关文章:
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- Qt:使用'mailto:'打开用户的电子邮件客户端失败
- 电子邮件地址中的c++smtp服务器主机名
- 如何使用 c++ (curl) 发送电子邮件
- 在端口 587 (TLS) 上使用 CDO 发送电子邮件时出错
- 预览由Microsoft Outlook 对象库生成的电子邮件
- 如果不有效,如何重复用户输入电子邮件
- 使用REGEX进行电子邮件输入验证C
- 如何从 pjsip 发送电子邮件.是否有任何可用于发送电子邮件的默认方法
- 如何在使用 c++/COM 发送时在电子邮件中插入/嵌入图像文件(.png)
- 使用Regex验证电子邮件和电话字段QT
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- 如何发送带有嵌入图片的电子邮件
- 如何提示用户在C++中输入正确的电子邮件地址格式
- 我在尝试使用 libquickmail 发送电子邮件时收到错误
- C 从电子邮件向量中删除
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- 电子邮件标题显示,dkim=硬失败(测试模式)和dkim=永久错误(坏信号)
- 在 C++ 中发送电子邮件错误