⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qsmtp.cpp

📁 See Appendix B for a description of the programs included on this companion disk. RESOURCE.WRI iden
💻 CPP
字号:
// QSMTP
//
// Customize the following variables and constants for your use:
//		HOST_NAME
//		The HELO parameter in MailMessage[]
//		The MAIL parameter in MailMessage[]
//		The RCPT parameter in MailMessage[]

#include	<string.h>
#include "..\winsock.h"

#define PROG_NAME "Quick SMTP Demo"

#define HOST_NAME "your.host"			// Define the mail server for your account
#define WINSOCK_VERSION 0x0101		// Program requires Winsock version 1.1
#define DEFAULT_PROTOCOL 0				// No protocol specified, use default
#define NO_FLAGS 0								// No special flags specified

char sScratchBuffer[100];					// General purpose buffer for messages

VOID SendMail(SOCKET hSocket)
{
    BYTE	sReceiveBuffer[4096];		// Buffer for mail server replies
    int		iLength;  							// Length of mail server reply
    int		iMsg = 0;								// Index into SMTP command array
    int		iEnd;										// Pointer to the end of the reply buffer
    
		// Define SMTP command strings as an array. 
		// Make sure last element remains NULL.
    // Command strings are sent in sequence. 
    char	*MailMessage[]	=	
    		{
    			"HELO HOST.COM\r\n",
    			"MAIL FROM:<your_mailbox@your.host>\r\n",
			    "RCPT TO:<your_mailbox@your.host>\r\n",
			    "DATA\r\n",
			    "This is my message to myself.\r\n\r\n.\r\n",
			    "QUIT\r\n",
			    0
			  };
			  
    iEnd = 0;
    do
    	{
    		if (send(hSocket, (LPSTR)MailMessage[iMsg], 
    					strlen(MailMessage[iMsg]), NO_FLAGS) == SOCKET_ERROR)
    			{
			      MessageBox(NULL, 
			      			"The send() function returned a socket error.",
			            PROG_NAME, MB_OK|MB_ICONSTOP);
						break;	      
					}    		
		    iLength = recv(hSocket, (LPSTR)sReceiveBuffer+iEnd, 
		    			sizeof(sReceiveBuffer)-iEnd, NO_FLAGS);
		    			
		  	if (iLength == 0 || iLength == SOCKET_ERROR)
					{
			      MessageBox(NULL, 
			      			"The recv() function returned a socket error.",
			            PROG_NAME, MB_OK|MB_ICONSTOP);
						break;	      
					}
					
				iEnd += iLength;
				sReceiveBuffer[iEnd] = '\0';
				
	      MessageBox(NULL, (LPSTR)sReceiveBuffer, (LPSTR)MailMessage[iMsg],
	            MB_OK|MB_ICONSTOP);
	            
				iMsg++;
			} 
		while (MailMessage[iMsg]);
		
		return;
	}

SOCKET ConnectMailServerSocket(VOID)
	{
		WSADATA wsaData;							// Winsock implementation details
		LPHOSTENT lpHostEnt;					// Internet host information structure
		SOCKADDR_IN sockAddr;					// Socket address structure
		LPSERVENT lpServEnt;					// Service information structure
		short nProtocolPort;					// Protocol port
		int nConnect;									// Socket connection results

		SOCKET hServerSocket = INVALID_SOCKET;	// Default socket number

		if (WSAStartup(WINSOCK_VERSION, &wsaData))
			MessageBox(NULL, "Could not load Windows Sockets DLL.", 
						PROG_NAME, MB_OK|MB_ICONSTOP);
						
		else 	// Resolve the host name
			{
				lpHostEnt = gethostbyname(HOST_NAME);
				
				if (!lpHostEnt)
					MessageBox(NULL, "Could not get IP address!", HOST_NAME, 
								MB_OK|MB_ICONSTOP);
			
				else	// Create the socket	
					{
						hServerSocket = socket(PF_INET, SOCK_STREAM, 
									DEFAULT_PROTOCOL);
						
						if (hServerSocket == INVALID_SOCKET)
							MessageBox(NULL, "Invalid socket!!", PROG_NAME, 
										MB_OK|MB_ICONSTOP);
										
						else	// Configure the socket
							{ 
								// Get the time service information
								lpServEnt = getservbyname("mail", DEFAULT_PROTOCOL);
						
								if (lpServEnt == NULL)
									nProtocolPort = htons(IPPORT_SMTP);	
								else
									nProtocolPort = lpServEnt->s_port;

								// Define the socket address	
								sockAddr.sin_family = AF_INET;		
								sockAddr.sin_port = nProtocolPort;
								sockAddr.sin_addr = *((LPIN_ADDR)*lpHostEnt->h_addr_list);
						
								// Connect the socket
								nConnect = connect(hServerSocket, (PSOCKADDR)&sockAddr, 
											sizeof(sockAddr));
								
								if( nConnect)
									{
										MessageBox(NULL, "Error connecting socket!!", 
													PROG_NAME, MB_OK|MB_ICONSTOP);
										hServerSocket = INVALID_SOCKET;
									}
							}
					}
			}
		return(hServerSocket);
	}

int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, 
			LPSTR lpszCmdParam, int nCmdShow)
	{
		SOCKET hSocket;		// Socket handle for the SMTP connection

		hSocket = ConnectMailServerSocket();

		if (hSocket != INVALID_SOCKET)
			{
				SendMail(hSocket);
				closesocket(hSocket);
			}
			
		WSACleanup();
		return(NULL); 
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -