[Winsock]サーバーには接続されているのにメールが届かない
Posted: 2011年3月01日(火) 17:51
こんにちは
またお世話になります
えー今回メールを送るコードを書いていて(猫でもわかるプログラミングから)
ソケットも正常に作成されている
サーバーにはつながっているが、メールが届かない
という謎の状況になっています
サーバーはGmailですので
SMTPアドレスはsmtp.gmail.com
送信元はhoge@gmail.com(仮)
送信先はhoge2@gmail.com(仮)
返信先はhoge@gmail.com(=送信先をコピー)
件名はtest
本文はtest text
の条件で試しましたが一向にメールが届きません
どういうわけでしょうか???
わかる方いらっしゃったらお願いいたします
環境はVisualStudio2005 C++ Express です
(2008もあるんですけどね、ちなみになぜか2010はインストールに失敗する)
コードです
またお世話になります
えー今回メールを送るコードを書いていて(猫でもわかるプログラミングから)
ソケットも正常に作成されている
サーバーにはつながっているが、メールが届かない
という謎の状況になっています
サーバーはGmailですので
SMTPアドレスはsmtp.gmail.com
送信元はhoge@gmail.com(仮)
送信先はhoge2@gmail.com(仮)
返信先はhoge@gmail.com(=送信先をコピー)
件名はtest
本文はtest text
の条件で試しましたが一向にメールが届きません
どういうわけでしょうか???
わかる方いらっしゃったらお願いいたします
環境はVisualStudio2005 C++ Express です
(2008もあるんですけどね、ちなみになぜか2010はインストールに失敗する)
コードです
#include "stdafx.h"
char szStr[1536], szStrRcv[1536];
void MyConnect(
HWND hWnd,
char szServerName[256],
char szFrom[256],
char szReplyTo[256],
char szTo[256],
char szSubject[256],
char szMain[512])
{
WSADATA wsaData;
LPHOSTENT lpHost;
LPSERVENT lpServ;
SOCKET s;
int iProtocolPort;
SOCKADDR_IN sockadd;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
{
return;
}
lpHost = gethostbyname(szServerName);
if (lpHost == NULL)
{
sprintf(szStr, "%sが見つかりません", szServerName);
return;
}
s = socket(PF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
return;
}
lpServ = getservbyname("mail", NULL );
/*if (lpServ == NULL)
{
iProtocolPort = htons(IPPORT_SMTP);
} else {
}*/
iProtocolPort = htons(587);
sockadd.sin_family = AF_INET;
sockadd.sin_port = iProtocolPort;
sockadd.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list);
int error_connect = 0;
if (connect(s, (PSOCKADDR)&sockadd, sizeof(sockadd)))
{
error_connect = WSAGetLastError();
return;
}
int send_e = 0;
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
strcpy(szStr, "HELO ");
strcat(szStr, szServerName);
strcat(szStr, "\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
sprintf(szStr, "MAIL FROM : <%s>\r\n", szFrom);
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
sprintf(szStr, "RCPT TO :<%s>\r\n", szTo);
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
strcpy(szStr, "DATA\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
strcpy(szStr, "X-Mailer: Nekodemo_Wakaru-Mailer\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
if (strcmp(szReplyTo, "") != 0)
{
sprintf(szStr, "Reply-To: %s\r\n", szReplyTo);
send_e = send(s, szStr, strlen(szStr), 0);
}else{
sprintf(szStr, "Reply-To: %s\r\n", szFrom);
send_e = send(s, szStr, strlen(szStr), 0);
}
if (strcmp(szSubject, "") ==0)
{
strcpy(szSubject,"None");
}
sprintf(szStr, "Subject: %s \r\n", szSubject);
send_e = send(s, szStr, strlen(szStr), 0);
//ここでもう一度「\r\n」を送信しておかないと //本文に日本語を使う場合1行目が文字化けします
strcpy(szStr, "\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
strcpy(szStr,szMain);
send_e = send(s, szStr, strlen(szStr), 0);
strcpy(szStr, ".\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
strcpy(szStr, "QUIT\r\n");
send_e = send(s, szStr, strlen(szStr), 0);
memset(szStrRcv, '\0', sizeof(szStrRcv));
recv(s, szStrRcv, sizeof(szStrRcv), 0);
closesocket(s);
WSACleanup();
MessageBox(hWnd, L"通信を終了しました", L"OK", MB_OK);
return;
}