Sending emails using C
Solution 1
You should take a look at some examples on smtp via telnet :)
Basically you need to input in plaintext something like this:
HELO local.domain.name
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
...
EDIT according to this example, your code should be:
// Not sure about this one, maybe just "\n"
#define SEPARATOR "\n\r"
int sendData( Socket *socket, const char *data) {
int iResult;
iResult = send(socket, data, (int) strlen(data), 0);
if(iResult == SOCKET_ERROR){
// Do error handling as you like
}
return iResult;
}
sendData( socket, "HELO local.doman.name" SEPARATOR);
sendData( socket, "MAIL FROM: [email protected]" SEPARATOR);
sendData( socket, "RCPT TO: [email protected]" SEPARATOR);
sendData( socket, "DATA" SEPARATOR);
sendData( socket, "This is subject of my mail" SEPARATOR SEPARATOR);
sendData( socket, "And this is text" SEPARATOR);
sendData( socket, "." SEPARATOR); // Send mail
Solution 2
You should read how to use smtp over telnet. After that you can easily implement it..
Solution 3
I would recommend you this article :
You can compile it under linux and Windows also.
joker
Updated on July 19, 2022Comments
-
joker almost 2 years
I have just started learning about socket programming and learned about winsock and achieved some progress. my question is basically: I want to send emails, what should I do?
points to be mentioned:
- I learned about initializing winsock. SMTP port (25). creating and connecting to sockets successfully. What should I do now?!!! (I'm stuck here)
- I don't want a ready-for-work code. I wanna learn. So, any books, documentations, tutorials or articles recommendations are needed.
- I know that C itself knows nothing about networking, does that mean I have to download some libraries? (I am using VS2010, Windows 7)
Here are the links to pages I have read so far:
basic winsock guide: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx
I have read the first 14 pages from beej guide (can't post the link, new users can only post a maximum of two hyperlinks)
I have learned about the types (
WSADATA
,addrinfo structure
,sockaddr
,SOCKET
) and functions (WSAStartup()
,WSACleanup()
,getaddrinfo()
,Shutdown()
,WSAGetLastError()
,socket()
, ... )and I have just started reading this article about
SMTP
http://www.faqs.org/rfcs/rfc821.htmlhere's what I have written till now:
#include <stdio.h> #include <WinSock2.h> #include <WS2tcpip.h> #pragma comment(lib, "Ws2_32.lib") // Applications that use Winsock must be linked with the Ws2_32.lib library file. #define HTTP_PORT "80" #define SMTP_PORT "25" #define HOSTNAME_PORT "101" /* All ports and web services names ( which are string aliases of the ports can be found here: %WINDIR%\system32\drivers\etc\services */ int main(void) { WSADATA wsdata; int iresult, retval; //iresult : instant result SOCKET connect_socket; struct addrinfo *result, *ptr, hints; iresult = WSAStartup(MAKEWORD(2, 2), &wsdata); if(iresult != 0) printf("Initiation of Winsock succeeded.\n"); else { printf("WinSock initialization failed..\n"); WSACleanup(); return 0; } if(LOBYTE(wsdata.wVersion) == 2 && HIBYTE(wsdata.wVersion) == 2) printf("winsock.dll is found.\n"); else { printf("Can not find the required winsock.dll file.\n"); WSACleanup(); return 0; } ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_UNSPEC; // IPv4 or IPv6 hints.ai_protocol = IPPROTO_TCP; // TCP connection ( full duplex ) hints.ai_socktype = SOCK_STREAM; // Provides sequenced, reliable, two-way, connection-based byte streams connect_socket = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol); if(connect_socket == INVALID_SOCKET) { printf("Socket Creation failed..\n"); WSACleanup(); return 0; } else printf("Socket Creation Succeeded ..\n"); WSACleanup(); return 1; }
am I off course?
-
joker over 12 yearsI did run over something like this, but couldn't understand what to do with that? I mean where to put this text? and why? what does "HELO" mean ( i think saying hello to the server )?
-
Einstein over 12 years@joker put it in telnet: en.wikipedia.org/wiki/Telnet there's even a program for that in windows named the same.
-
cha0site over 12 years@joker: 'In the HELO command the host sending the command identifies itself; the command may be interpreted as saying "Hello, I am <domain>"'
-
JeremyP over 12 years+1 you can write your own SMTP client, but it's definitely easier to use one of the many that can be found on the Interwebs.
-
rkosegi over 12 yearsAlso you can check source code of open source mail clients like sendmail.
-
joker over 12 yearsI have read the page u linked to. I learned a few things, but it seems to be outdated. I had to search for the "connect menu" and port to open yahoo mail server ( since 25 is entered, the connection fails ) your help is much appreciated
-
Remy Lebeau over 12 yearsDon't forget to READ AND PROCESS the server's responses to each command! That is very important.
-
joker over 12 years@Vyktor: thanks a lot for your help and concern your answer with the one above yours, I can now make the program. I can now understand the idea of talking to the server. the problem I'm facing now is how to deal with SSL and TLS ( I'm googling that )
-
joker over 12 yearsI will document what I have understood so far so anyone searches for the same topic can find the answer easily. I don't know where to post the previous sentence so as anyone sees this topic, can see the link to the document.
-
abarisone about 9 yearsCould you elaborate more your answer adding a little more description about the solution you provide?