Login
`
Templates, Tools and Utilities
|
||
Add a comment to an Icetips ArticlePlease add your comments to this article.
Please note that you must provide both a name and a valid email address in order
for us to publish your comment. Comments are moderated and are not visible until they have been approved. Spam is never approved!
Back to article list Search Articles Add Comment Printer friendly Direct link Par2: SMTP Email with Messaging templates 2009-12-08 -- Ron Schofield The code for the messaging templates is bad. Too bad SV didn't clean
the code up to make it work. I ran through the same problems until I
rewote the code just to do SMTP. All I did was use code from codeproject
and converted it to Clarion.
http://beta.codeproject.com/KB/IP/zsmtp.aspx
SOCKET CFastSmtp::_connectServerSocket(const char server[],
const unsigned short port)
{
int nConnect;
short nProtocolPort;
LPHOSTENT lpHostEnt;
LPSERVENT lpServEnt;
SOCKADDR_IN sockAddr;
SOCKET hServerSocket = INVALID_SOCKET;
lpHostEnt = gethostbyname(server);
if (lpHostEnt) {
hServerSocket = socket(PF_INET, SOCK_STREAM,DEFAULT_PROTOCOL);
if (hServerSocket != INVALID_SOCKET) {
if (port != NULL) {
nProtocolPort = port;
}else{
lpServEnt = getservbyname("mail", DEFAULT_PROTOCOL);
if (lpServEnt == NULL)
nProtocolPort = htons(IPPORT_SMTP);
else
nProtocolPort = lpServEnt->s_port;
}
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = nProtocolPort;
sockAddr.sin_addr = *((LPIN_ADDR)*lpHostEnt->h_addr_list);
nConnect = connect(hServerSocket, (PSOCKADDR)&sockAddr,
sizeof(sockAddr));
if(nConnect)
hServerSocket = INVALID_SOCKET;
} else {
printf("Invalid socket\r\n");
throw;
}
}
return(hServerSocket);
}
gets converted to
SMTPServerSocket PROCEDURE(*CSTRING ServerName, SHORT Port)
hServerSocket SOCKET
lpHostEnt LONG
HostEntry LIKE(HOSTENT)
lpServEnt LONG
ServiceEntry LIKE(SERVENT)
nProtocolPort SHORT
SockAddrIn LIKE(SOCKADDR_IN)
ServiceName CSTRING('mail')
nConnect LONG
lpAddrList LONG
CODE
hServerSocket = INVALID_SOCKET
lpHostEnt = GetHostByName(ServerName)
IF lpHostEnt
hServerSocket = CreateSocket(PF_INET,SOCK_STREAM,DEFAULT_PROTOCOL)
IF hServerSocket <> INVALID_SOCKET
IF Port <> 0
nProtocolPort = Htons(Port)
ELSE
lpServEnt = GetServByName(ServiceName,DEFAULT_PROTOCOL)
IF lpServEnt = 0
nProtocolPort = Htons(IPPORT_SMTP)
ELSE
memcpy(ADDRESS(ServiceEntry),lpServEnt,SIZE(ServiceEntry));
nProtocolPort = ServiceEntry.s_port
END
END
memcpy(ADDRESS(HostEntry),lpHostEnt,SIZE(HostEntry));
memcpy(ADDRESS(lpAddrList),HostEntry.h_addr_list,HostEntry.h_length)
SockAddrIn.sin_family = PF_INET
SockAddrIn.sin_port = nProtocolPort
SockAddrIn.sin_addr = SMTPData.SMTPIP
memcpy(ADDRESS(SockAddrIn.sin_addr),lpAddrList,HostEntry.h_length)
nConnect =
WinsockConnect(hServerSocket,ADDRESS(SockAddrIn),SIZE(SockAddrIn))
IF nConnect = SOCKET_ERROR
Alog.log('Connect returned ' & WSAGetLastError() & '
error.',LOG:Error)
hServerSocket = INVALID_SOCKET
END
ELSE
Alog.log('Invalid Socket',LOG:Error)
END
END
RETURN(hServerSocket)
Hopefully this will get you started. SMTP isn't a big bad boogy man when
you get the idea how it works.
Today is November 21, 2024, 7:11 am This article has been viewed 35277 times.
|
|