SOCKET メール送信
#include
#include
#include
class CDrView : public CFormView
{
// アトリビュート
public:
// SOCKET
WSADATA wsaData;
LPHOSTENT lpHost;
SOCKET s;
SOCKADDR_IN sockadd;
...
..
.
// 1通目が届かない現象の対策
void CDrView::OnInitialUpdate(){
.
.
.
InitSocket();
closesocket(s);
Sleep(400);
WSACleanup();
..
.
.
}
// INIT.
void CDrView::InitSocket(){
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
AfxMessageBox("WSAStartup err",MB_ICONSTOP);
return;
}
theApp.ip="000.000.000.000"; // SMTP SERVER ADDRESS (theApp.ip=CString APP CLASS)
lpHost = gethostbyname(theApp.ip);
if (lpHost == NULL) {
memset ( szStr,NULL,sizeof(szStr));
wsprintf(szStr, "SMTP SERVER %sが見つかりません", theApp.ip);
AfxMessageBox(szStr,MB_ICONSTOP);
return;
}
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
AfxMessageBox("void CDrView::InitSocket() ソケットをオープンできません",MB_ICONSTOP);
return;
}
sockadd.sin_family = AF_INET;
sockadd.sin_port = htons(25); // SMTP PORT No
sockadd.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list);
if (connect(s, (PSOCKADDR)&sockadd, sizeof(sockadd))) {
AfxMessageBox("void CDrView::InitSocket() connect error",MB_ICONSTOP);
return;
}
}
// メール送信
void CDrView::RiMailSend(int flg){
// flg == 1(PCMAIL) flg==2 (携帯)
//AfxMessageBox("ST");
// InitSocket();
char sub[128];
memset ( sub,NULL,sizeof(sub));
sprintf(sub,"勤怠管理システム(%sのリマインド)",YeDay);
CString ss1=Main.name + "様\r\n\r\n";
ss1+= YeDay + "のシフトをお知らせさせて頂きます。\r\n";
ss1+= Main.aria + " " + Main.tenpo + " " + Main.stm +"です。\r\n\r\n";
ss1+= "上記シフトが入っております。\r\nよろしくお願いします。\r\n.\r\n";
// HELO COMMAND SEND
memset ( szStr,NULL,sizeof (szStr));
sprintf (szStr,"HELO %s\r\n",theApp.ip);
send(s, szStr, strlen(szStr), 0);
// FROM COMMAND SEND , FROM MAIL ADDRESS
memset ( szStr,NULL,sizeof(szStr));
sprintf (szStr,"MAIL FROM:<%s>\r\n",theApp.mailadd); // theApp.mailadd = APP CLASS CString
send(s, szStr, strlen(szStr), 0);
// TO COMMAND SEND , TO MAIL ADDRESS
memset ( szStr,NULL,sizeof(szStr));
sprintf (szStr,"RCPT TO:<%s>\r\n","testmail@testtest1111.ne.jp"); // SEND ADDRESS
send(s, szStr, strlen(szStr), 0);
// DATA COMMAND SEND
memset ( szStr,NULL,sizeof(szStr));
strcpy(szStr, "DATA\r\n");
send(s, szStr, strlen(szStr), 0);
// Mailer Name SEND
memset ( szStr,NULL,sizeof(szStr));
strcpy(szStr, "X-Mailer: KINTAI ReminderR1.00\r\n");
send(s, szStr, strlen(szStr), 0);
// Subject SEND
memset ( szStr,NULL,sizeof(szStr));
wsprintf(szStr, "Subject: %s \r\n", sub);
send(s, szStr, strlen(szStr), 0);
strcpy(szStr, "\r\n");
send(s, szStr, strlen(szStr), 0);
// 本文SEND
memset ( szStr,NULL,sizeof(szStr));
strcpy (szStr,ss1);
send(s,szStr, strlen(szStr), 0);
Sleep(1000); // SMTP SERVER WAIT. wait 入れないと送信出来ないことがある
// メール送信 あと処理
memset ( szStr,NULL,sizeof(szStr));
strcpy (szStr,"quit\r\n");
send(s,szStr, strlen(szStr), 0);
closesocket(s);
WSACleanup();
// AfxMessageBox("ok");
// 改行は \r\n 本文終了は \r\n.\r\n で . だけの行を送信
}
受信メーラーによってはそのまま送っても漢字は化けないが
基本は文字コードをiso-2022-jpに変換して送る。
戻る