【发布时间】:2019-10-06 13:03:34
【问题描述】:
我正在使用套接字将邮件从我的 Gmail 帐户发送到我的 Gmail 帐户,以避免 SSL 和身份验证,但我不知道 Gmail 是否会因为 TLS(垃圾邮件原因)以某种方式阻止这些端口,因为我没有收到任何内容垃圾邮件文件夹也是空的。
如果有人对此主题有经验,我将不胜感激。
int main() {
cout << "send mail" << endl;
char arr[] = "gmail-smtp-in.l.google.com";
char* ptrServer = arr;
char arr0[] = "someaddress@gmail.com";
char* ptrReceiver= arr0;
char arr1[] = "someaddress@gmail.com";
char* ptrSender = arr1;
char arr2[] = "- Some Data -";
char* ptrSubject = arr2;
char arr3[] = "Hello from the PC";
char* ptrMessage = arr3;
sendEmail(ptrServer, ptrReceiver, ptrSender, ptrSubject, ptrMessage);
cin >> arr;
return 0;
}
这里是我用来发送邮件的函数(我不知道你需要为 TLS 发送什么,我只是发送这个序列 EHLO 和 STARTTLS)
void sendEmail(char * server, char * to, char * from, char * subject, char * message) {
SOCKET sockfd;
WSADATA wsaData;
hostent* host;
sockaddr_in dest;
char szSmtpServerName[64] = "";
int sent;
char line[256];
if (WSAStartup(0x202, &wsaData) != SOCKET_ERROR) {
if ((host = gethostbyname(server)) != NULL) {
memset(&dest, 0, sizeof(dest));
memcpy(&(dest.sin_addr), host->h_addr, host->h_length);
dest.sin_family = host->h_addrtype;
dest.sin_port = htons(25);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr*) & dest, sizeof(dest));
strcpy_s(line, "EHLO\n");
sent=send(sockfd, line, strlen(line),0);
Sleep(500);
strcpy_s(line, "STARTTLS\n");
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
strcpy_s(line, "MAIL FROM:<");
strncat_s(line, from, strlen(from));
strncat_s(line, ">\n", 3);
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
strcpy_s(line, "RCPT TO:<");
strncat_s(line, to, strlen(to));
strncat_s(line, ">\n", 3);
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
strcpy_s(line, "DATA\n");
sent = (send(sockfd, line, strlen(line), 0));
Sleep(500);
strcpy_s(line, "To: ");
strcat_s(line, to);
strcat_s(line, "\n");
strcat_s(line, "From: ");
strcat_s(line, from);
strcat_s(line, "\n");
strcat_s(line, "Subject: ");
strcat_s(line, subject);
strcat_s(line, "\n");
strcat_s(line, message);
strcat_s(line, "\r\n.\r\n");
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
strcpy_s(line, "quit\n");
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
}
}
closesocket(sockfd);
WSACleanup();
cout << "mail was sent" << endl;
}
【问题讨论】:
标签: c++ visual-studio sockets websocket smtp