Hey guys, im trying to write a program that'll create a report then email the report... my problem is when it comes to the socket trying to send the second command after EHLO smtp,*.*
When the first command is sent its working fine... but when the program tries to send the second command it jams on bzero(buffer,256);... My understanding is bzero resets all values to 0 hence... clear the array buffer[] so it can be used again right? Why would the program execution stop???
/*---------EHLO SMTP-------------*/
printf("Sending EHLO to SMTP\n");
buffer[255] = "EHLO smtp.primus.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
/*---------MAIL FROM-------------*/
printf("Sending EHLO to SMTP\n");
bzero(buffer,256);
buffer[255] = "MAIL FROM: smtp.primus.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
/*------------------------------*/
When im doing a fgets as below and enter the the commands to be sent to the SMTP it works perfectly...
printf("SMTP Command to be sent\n");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
BUT if I take off the fget because I need the things to be automated then it fails...
printf("Automated way\n");
buffer[255] = "MAIL FROM: test@primustel.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
Now I assume it fails to SMTP code 500 (unrecognized command) because the buffer array values wasn't cleared but when I add the bzero the halt the execution of the software then timeout the connection...
printf("Automated way\n");
bzero(buffer,255);
buffer[255] = "MAIL FROM: test@primustel.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
-------------------Whole codes----------------------
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
/*---------EHLO SMTP-------------*/
printf("Sending EHLO to SMTP\n");
buffer[255] = "EHLO smtp.primus.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
/*---------MAIL FROM-------------*/
printf("Sending EHLO to SMTP\n");
buffer[255] = "MAIL FROM: test@primustel.ca";
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
/*------------------------------*/
return 0;
}