|
HP-UX11.00、UNIX-Cなのですが、
C言語でsmtpを使用してメールの送信を行いたいのですが、
1アドレスに対しては送信が行えるのですが、TOを複数指定
例えば、「to:yamada@test.co.jp,saitoh@test.co.jp」と
すると処理は正常に終わるのですが、送信が行われていません。
また、添付ファイルを付与して送信したいのですが、どのように
すればよいのですか。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
extern int errno ;
int main(argc, argv)
int argc ;
char **argv ;
{
char c ;
FILE *fp,*fn ;
char hostname[64],fromname[64],toname[64],filename[64],sstrs[64],rstrs[2048] ;
char texts[32000] ;
char l[64] ;
register long int i,s ;
long int m, j, k ;
struct hostent *hp ;
struct sockaddr_in sin ;
/* argc check */
if ((argc < 4)||(argc > 5)) {
/* print Usage */
fprintf(stderr, " Usage: %s smtp_hostname from_name to_name text_filename\n",argv[0]) ;
exit(-1) ;
}
/* set hostname */
/* gethostname(hostname, sizeof(hostname)) ;*/
strcpy(hostname,argv[1]) ;
/* set fromname */
strcpy(fromname,argv[2]) ;
/* set toname */
strcpy(toname,argv[3]) ;
/* set filename */
strcpy(filename,argv[4]) ;
/* open send file */
if((fn = fopen(filename,"r")) == NULL) {
perror("cannot open file") ;
exit(-1) ;
}
/* lookup the network address */
if ((hp = gethostbyname(hostname)) == NULL) {
fprintf(stderr, "%s: unknown host.\n", hostname) ;
exit(-1) ;
}
/* get a socket to work with. */
if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
fprintf(stderr,"client: socket error.\n") ;
exit(-1) ;
}
/* create the address we will be connecting to. */
/* use smtp port 25 */
sin.sin_family = AF_INET ;
sin.sin_port = htons(25) ;
bcopy(hp->h_addr, &sin.sin_addr, hp->h_length) ;
/* try to connect to the address. */
if (connect(s, &sin, sizeof(sin)) < 0) {
fprintf(stderr,"client: connect error.\n") ;
exit(-1) ;
}
/* open reading the socket. */
fp = fdopen(s, "r") ;
/* first read some strings. */
fgets(rstrs, 2048, fp) ;
/* send fromname */
strcpy(sstrs,"HELO ") ;
strcat(sstrs,hostname) ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
printf("Connect to:%s\n",hostname) ;
/* read response */
fgets(rstrs, 2048, fp) ;
/* send fromname */
strcpy(sstrs,"MAIL FROM:<") ;
strcat(sstrs,fromname) ;
strcat(sstrs,">\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
printf("Mail from:%s\n",fromname) ;
/* read response */
fgets(rstrs, 2048, fp) ;
/* send toname */
strcpy(sstrs,"RCPT TO:<") ;
strcat(sstrs,toname) ;
strcat(sstrs,">\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
printf("Mail to:%s\n",toname) ;
/* read response */
fgets(rstrs, 2048, fp) ;
/* put message ready */
strcpy(sstrs,"DATA\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
/* read response */
fgets(rstrs, 2048, fp) ;
/* put message */
strcpy(sstrs,"From:") ;
strcat(sstrs,fromname) ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
strcpy(sstrs,"To:") ;
strcat(sstrs,toname) ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
strcpy(sstrs,"X-Mailer:smtpsend ") ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
printf("---DATA Start---\n") ;
printf("%s\n------------------------\n",sstrs) ;
i = 0 ;
while ((m = fgetc(fn)) != EOF)
texts[i++] = m ;
j = 0 ; k = 0 ; sstrs[0] = 0 ;
while (texts[j] != 0) {
if((texts[j] == 0x0A)||(texts[j] == 0x0D)){
sstrs[k++] = 0 ;
j++ ;
if((texts[j] == 0x0A)||(texts[j] == 0x0D)){
sstrs[k] = 0 ;
j++ ;
}
printf("%s\n",sstrs) ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs),0) ;
k = 0 ; sstrs[0] = 0 ;
} else {
sstrs[k++] = texts[j++] ;
}
}
if( k > 0){
sstrs[k] = 0 ;
printf("%s\n",sstrs) ;
strcat(sstrs,"\r\n") ;
send(s,sstrs,strlen(sstrs),0) ;
}
/* put message end */
strcpy(sstrs,"\r\n.\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
printf("------------------------\n") ;
/* read response */
fgets(rstrs, 2048, fp) ;
/* quit smtp server*/
strcpy(sstrs,"QUIT\r\n") ;
send(s,sstrs,strlen(sstrs), 0) ;
/* read response */
fgets(rstrs, 2048, fp) ;
close(s) ;
fclose(fp) ;
fclose(fn) ;
printf("---Message Send---\n") ;
exit(0) ;
}
|