Sponsored Content
Full Discussion: C socket issue with SMTP
Top Forums Programming C socket issue with SMTP Post 302385355 by Jess83 on Friday 8th of January 2010 12:08:38 AM
Old 01-08-2010
C socket issue with SMTP

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???

Code:
/*---------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...

Code:
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...

Code:
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...

Code:
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----------------------


Code:
#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;
}

 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

SMTP - emailing issue

We are running an application engine program that sends email to a list of users. In our Test Env, users are able to receive the emails but in our Prod environment, they do not. We are running the same program, and using the same stmp config. any idea on how to troubleshoot? (3 Replies)
Discussion started by: tads98
3 Replies

2. Programming

Performance issue with C++ ,Socket

Hi all, I am facing some problem in Socket programming(C++ & Solaris 5.0).I am using socket as basic connecting point & MEP(Mesagae Exchange Protocol) as high level protocol to send & receive Message & ACK, between two different system. MEP is a protocol through which you can send MSG... (0 Replies)
Discussion started by: amartya_sock
0 Replies

3. UNIX for Advanced & Expert Users

connect problem for sctp socket (ipv6 socket) - Runtime fail Invalid Arguments

Hi, I was porting ipv4 application to ipv6; i was done with TCP transports. Now i am facing problem with SCTp transport at runtime. To test SCTP transport I am using following server and client socket programs. Server program runs fine, but client program fails giving Invalid Arguments for... (0 Replies)
Discussion started by: chandrutiptur
0 Replies

4. Programming

which socket should socket option on be set

Hi all, On the server side, one socket is used for listening, the others are used for communicating with the client. My question is: if i want to set option for socket, which socket should be set on? If either can be set, what's the different? Again, what's the different if set option... (1 Reply)
Discussion started by: blademan100
1 Replies

5. Programming

socket function to read a webpage (socket.h)

Why does this socket function only read the first 1440 chars of the stream. Why not the whole stream ? I checked it with gdm and valgrind and everything seems correct... #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include... (3 Replies)
Discussion started by: cyler
3 Replies

6. Linux

SMTP issue

HI, I am having an issue with the mail. I had certain scripts who used to send mails. now i am not getting the mails as usual. need help to track the issue and resolve. mailx -s "Testing for details" xxx@yyy.zzz above code is used for mailing. can yoou please help? (2 Replies)
Discussion started by: onlyniladri
2 Replies

7. Programming

perl socket issue

Hi I am teaching myself perl and am writing a socket application to get experience. I am using Eclipse with the EPIC plugin to run the code in debug mode. I think that sometimes the script is not releasing the port if I terminate it in debug mode as I am occasionally getting the message: - ... (3 Replies)
Discussion started by: steadyonabix
3 Replies

8. IP Networking

Clarification - Setting socket options at the same time when socket is listening

I need clarification on whether it is okay to set socket options on a listening socket simultaneously when it is being used in an accept() call? Following is the scenario:- -- Task 1 - is executing in a loop - polling a listen socket, lets call it 'fd', (whose file descriptor is global)... (2 Replies)
Discussion started by: jake24
2 Replies

9. Solaris

OutBound SMTP Server Mail issue

Hi all I have a Live SMTP server for outbound mails ( Mail being sent from my organization to outside domains). A large chunk of mails are not being sent and reside in /var/spool/mqueue directory. The header of there mails are: From: Mail Delivery Subsystem <MAILER-DAEMON> How can I... (0 Replies)
Discussion started by: Junaid Subhani
0 Replies

10. Solaris

NIS/smtp services issue on Solaris 11

Hi, Few services not starting on new build Solaris 11 non-global zone. I uninstalled zone and reinstalled and still same issue, while global zone is working fine. smpt service is going into maintenance mode and /var/svc/log/network-smtp:sendmail.log shows that it tries and then dead ... (0 Replies)
Discussion started by: solaris_1977
0 Replies
All times are GMT -4. The time now is 04:42 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy