Olá pessoal,
Demorei, mas postei o código de uma função de como enviar e-mail utilizando o c++.
Nesta função deixei o remetente como constante e a passagem da mensagem e do destinatário como parâmetro. A função pode ser mudada para passagem de parâmetro do remetente também. Não tive essa necessidade, mas pode ser que alguém tenha.
Espero que tenha ajudado vocês.
Até a próxima dica.
void CSIOAVISODlg::email(CString StrAvisoProblema, LPCTSTR to)
//Primeiro parâmetro é a mensagem a ser enviada e o segundo é o destinatário
{
int iProtocolPort = 0;
char szSmtpServerName[64] = "";
char szToAddr[64] = "";
char szFromAddr[64] = "";
char szBuffer[8192] = "";
char szLine[255] = "";
char szMsgLine[8192] = "";
char szSubject[255] = "";
char szMsg[16384] = "";
SOCKET hServer;
WSADATA WSData;
LPHOSTENT lpHostEntry;
LPSERVENT lpServEntry;
SOCKADDR_IN SockAddr;
// Convert to a char*
const size_t newsize = 16384;
char nstring[newsize];
strcpy(nstring, StrAvisoProblema);
// strcat(nstring, " (char *)");
lstrcpy(szSmtpServerName, "10.153.205.21"); //Servidor SMTP
lstrcpy(szToAddr, to); //Destinatário
lstrcpy(szFromAddr, "teste@teste.com.br"); //Remetente
lstrcpy(szSubject, "código fonte email - Carlos Augusto"); //Assunto
// Attempt to intialize WinSock (1.1 or later)
if(WSAStartup(MAKEWORD(VERSION_MAJOR, VERSION_MINOR), &WSData))
{
//cout << "Cannot find Winsock v" << VERSION_MAJOR << "." << VERSION_MINOR << " or later!" << endl;
// return 1;
}
// Lookup email server's IP address.
lpHostEntry = gethostbyname(szSmtpServerName);
if(!lpHostEntry)
{
// cout << "Cannot find SMTP mail server " << szSmtpServerName << endl;
// return 1;
}
// Create a TCP/IP socket, no specific protocol
hServer = socket(PF_INET, SOCK_STREAM, 0);
if(hServer == INVALID_SOCKET)
{
// cout << "Cannot open mail server socket" << endl;
// return 1;
}
// Get the mail service port
lpServEntry = getservbyname("mail", 0);
// Use the SMTP default port if no other port is specified
if(!lpServEntry)
iProtocolPort = htons(IPPORT_SMTP);
else
iProtocolPort = lpServEntry->s_port;
// Setup a Socket Address structure
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = iProtocolPort;
SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
// Connect the Socket
if(connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr)))
{
// cout << "Error connecting to Server socket" << endl;
// return 1;
}
// Receive initial response from SMTP server
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() Reply");
//Aqui já entra o código baseado no post anterior sobre
como enviar email usando telnet // Send HELO server.com
sprintf(szMsgLine, "HELO %s%s", szSmtpServerName, CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() HELO");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() HELO");
// Send MAIL FROM:
sprintf(szMsgLine, "MAIL FROM:<%s>%s", szFromAddr, CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() MAIL FROM");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() MAIL FROM");
// Send RCPT TO:
sprintf(szMsgLine, "RCPT TO:<%s>%s", szToAddr, CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() RCPT TO");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() RCPT TO");
// Send DATA
sprintf(szMsgLine, "DATA%s", CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() DATA");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() DATA");
sprintf(szMsgLine, "FROM: %s%sSUBJECT: %s%s%s%s%s", szFromAddr, CRLF, szSubject, CRLF, CRLF, nstring, CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() end-message");
// Send blank line and a period
sprintf(szMsgLine, "%s.%s", CRLF, CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() end-message");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() end-message");
// Send QUIT
sprintf(szMsgLine, "QUIT%s", CRLF);
Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() QUIT");
Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() QUIT");
// Close server socket and prepare to exit.
closesocket(hServer);
WSACleanup();
}
//fim da função de enviar email
//para executar basta chamá-la dessa forma
// email(Str, "augustoffilho@gmail.com");
//Primeiro a variável contendo a mensagem que deve ser do tipo CString
// e depois o destinatário
// quando copiarem o código cuidado com as quebras de linhas que não
// ficou muito bom aqui no blog