smtp编码问题 [英] smtp coding problem

查看:216
本文介绍了smtp编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码是主程序的一部分,从程序中的

发送一个日志文件:


int MailIt( char * mailserver,char * emailto,char * emailfrom,

char * emailsubject,char * emailmessage){

SOCKET sockfd;

WSADATA wsaData ;

FILE * smtpfile;


#define bufsize 300

int bytes_sent; / * Sock FD * /

int err;

struct hostent * host; / *来自gethostbyname的信息* /

struct sockaddr_in dest_addr; / *主机地址* /

char行[1000];

char * Rec_Buf =(char *)malloc(bufsize + 1);

smtpfile = fopen(SMTPLog," a +");

if(WSAStartup(0x202,& wsaData)== SOCKET_ERROR){

fputs(") WSAStartup失败",smtpfile);

WSACleanup();

返回-1;

}

if( (host = gethostbyname(mailserver))== NULL){

perror(" gethostbyname");

exit(1);

}

memset(& dest_addr,0,sizeof(dest_addr));

memcpy(&(dest_addr.sin_addr),host-> h_addr,host-> ; h_length);


/ *准备dest_addr * /

dest_addr.sin_family = host-> h_addrtype; / * AF_INET来自

gethostbyname * /

dest_addr.sin_port = htons(25); / * PORT定义如上* /


/ *获取套接字* /


if((sockfd = socket(AF_INET,SOCK_STREAM,0) )< 0){

perror(socket);

退出(1);

}

/ * Connect!* /

fputs(" Connecting .... \ n",smtpfile);


if(connect(sockfd) ,(struct sockaddr

*)& dest_addr,sizeof(dest_addr))== -1){

perror(" connect");

退出(1);

}

睡眠(等待时间);

err = recv(sockfd,Rec_Buf,bufsize,0) ; Rec_Buf [err] =''\ 0'';

fputs(Rec_Buf,smtpfile);

strcpy(line," helo me.somepalace.com \\ \\ n");

fputs(line,smtpfile);

bytes_sent = send(sockfd,line,strlen(line),0);

sleep(waittime);

err = recv(sockfd,Rec_Buf,bufsize,0); Rec_Buf [err] =''\ 0'';

fputs (Rec_Buf,smtpfile);

strcpy(line," MAIL FROM:<");

strncat(line,em ailfrom,strlen(emailfrom));

strncat(line,"> \ n",3);

fputs(line,smtpfile);

bytes_sent = send(sockfd,line,strlen(line),0);

sleep(waittime);

err = recv(sockfd,Rec_Buf, bufsize,0); Rec_Buf [err] =''\''';

fputs(Rec_Buf,smtpfile);

strcpy(line," RCPT TO: <");

strncat(line,emailto,strlen(emailto));

strncat(line,"> \\\
",3);

fputs(line,smtpfile);

bytes_sent = send(sockfd,line,strlen(line),0);

sleep(waittime );

err = recv(sockfd,Rec_Buf,bufsize,0); Rec_Buf [err] =''\ 0'';

fputs(Rec_Buf,smtpfile) ;

strcpy(line," DATA \ n");

fputs(line,smtpfile);

bytes_sent = send(sockfd ,line,strlen(line),0);

sleep(waittime);

err = recv(sockfd,Rec_Buf,bufsize,0); Rec_Buf [err] = ''\''';

fputs(Rec_Buf,smtpfile);

sle ep(等待时间);

strcpy(line," To:");

strcat(line,emailto);

strcat( line," \ n");

strcat(line," From:");

strcat(line,emailfrom);

strcat(line," \ n");

strcat(line," Subject:");

strcat(line,emailsubject);

strcat(line," \ n");

strcat(line,emailmessage);

strcat(line," \\ \\\\\\ nn");

fputs(line,smtpfile);

bytes_sent = send(sockfd,line,strlen(line) ,0);

睡眠(等待时间);

err = recv(sockfd,Rec_Buf,bufsize,0); Rec_Buf [err] =''\''' ;

fputs(Rec_Buf,smtpfile);

strcpy(line," quit \ n");

fputs(line,smtpfile) );

bytes_sent = send(sockfd,line,strlen(line),0);

sleep(waittime);

err = recv (sockfd,Rec_Buf,bufsize,0); Rec_Buf [err] =''\ 0'';

fputs(Rec_Buf,sm tpfile);

fclose(smtpfile);

#ifdef WIN32

closesocket(sockfd);

WSACleanup( );

#else

close(sockfd);

#endif

}
但是,我的邮件服务器(我支付托管费用)仅适用于

安全性,并且需要身份验证,所以我不确定如何修改

代码通过tls进行身份验证并发送电子邮件....


任何帮助表示赞赏。

i have this code which is part of a main program, to email from
within the program a log file:

int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage) {
SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;

#define bufsize 300
int bytes_sent; /* Sock FD */
int err;
struct hostent *host; /* info from gethostbyname */
struct sockaddr_in dest_addr; /* Host Address */
char line[1000];
char *Rec_Buf = (char*) malloc(bufsize+1);
smtpfile=fopen(SMTPLog,"a+");
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
fputs("WSAStartup failed",smtpfile);
WSACleanup();
return -1;
}
if ( (host=gethostbyname(mailserver)) == NULL) {
perror("gethostbyname");
exit(1);
}
memset(&dest_addr,0,sizeof(dest_addr));
memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);

/* Prepare dest_addr */
dest_addr.sin_family= host->h_addrtype; /* AF_INET from
gethostbyname */
dest_addr.sin_port= htons(25); /* PORT defined above */

/* Get socket */

if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
perror("socket");
exit(1);
}
/* Connect !*/
fputs("Connecting....\n",smtpfile);

if (connect(sockfd, (struct sockaddr
*)&dest_addr,sizeof(dest_addr)) == -1){
perror("connect");
exit(1);
}
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
strcpy(line,"helo me.somepalace.com\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
strcpy(line,"MAIL FROM:<");
strncat(line,emailfrom,strlen(emailfrom));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
strcpy(line,"RCPT TO:<");
strncat(line,emailto,strlen(emailto));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
strcpy(line,"DATA\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
sleep(waittime);
strcpy(line,"To:");
strcat(line,emailto);
strcat(line,"\n");
strcat(line,"From:");
strcat(line,emailfrom);
strcat(line,"\n");
strcat(line,"Subject:");
strcat(line,emailsubject);
strcat(line,"\n");
strcat(line,emailmessage);
strcat(line,"\r\n.\r\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
strcpy(line,"quit\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = ''\0'';
fputs(Rec_Buf,smtpfile);
fclose(smtpfile);
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
#else
close(sockfd);
#endif
}

however, my mailserver(for which i pay for hosting) is tls only for
security, and requires authentication, so I am not sure how to modify
the code to authenticate over tls and send an email....

any help is appreciated.

推荐答案

za****@gmail.com 写道:
hi ,我有这个代码,它是主程序的一部分,通过电子邮件从程序中发送一个日志文件:


您的问题以及您的代码是偏离主题的在clc试着找到处理邮件协议的
a组(我会告诉你哪一个/ s /但我不知道b $ b不知道)。


不过,我在下面看到的一些评论:


1.你的代码难以阅读。更好地利用间距会有很大帮助。

int MailIt(char * mailserver,char * emailto,char * emailfrom,
char * emailsubject,char * emailmessage){
SOCKET sockfd;
WSADATA wsaData;
FILE * smtpfile;

#define bufsize 300


2.宏通常是全大写的(与类型和变量不同)。

int bytes_sent; / * Sock FD * /
int err;
struct hostent * host;来自gethostbyname的/ * info * /
struct sockaddr_in dest_addr; / *主机地址* /
char行[1000];
char * Rec_Buf =(char *)malloc(bufsize + 1);


3.不要转换malloc()的返回值。它可能隐藏不包括stdlib.h的错误。


可能还有更多,但它很难阅读,所以我放弃了。


< snip off of off-topic code>

但是,我的邮件服务器(我支付托管费用)仅适用于
安全性,并要求身份验证,所以我不知道如何修改代码以通过tls进行身份验证并发送电子邮件....
i have this code which is part of a main program, to email from
within the program a log file:
Your question as well as your code are off-topic in c.l.c. Try to find
a group that deals with mail protocols (I''d tell you which one/s/ but I
don''t know).

Still, some remarks on what I see below:

1. Your code is hard to read. Better use of spacing would help a lot.
int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage) {
SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;

#define bufsize 300
2. Macros are conventionally all-caps (unlike types and variables).
int bytes_sent; /* Sock FD */
int err;
struct hostent *host; /* info from gethostbyname */
struct sockaddr_in dest_addr; /* Host Address */
char line[1000];
char *Rec_Buf = (char*) malloc(bufsize+1);
3. Don''t cast return value of malloc(). It may hide error of not
including stdlib.h.

There''s probably more, but it''s hard to read, so I quit.

<snip loads of off-topic code>
however, my mailserver(for which i pay for hosting) is tls only for
security, and requires authentication, so I am not sure how to modify
the code to authenticate over tls and send an email....




见最高评论。


-

BR,弗拉基米尔



See the the top comment.

--
BR, Vladimir


< a href =mailto:za **** @ gmail.com> za **** @ gmail.com 写道:
我有这个代码是其中的一部分一个主程序,从程序中通过电子邮件发送一个日志文件:


< snip>

#ifdef WIN32
closesocket (sockfd);
WSACleanup();
#else
关闭(sockfd);
#endif
}
然而,我的邮件服务器(我为此付款ting)仅用于
安全性,并且需要身份验证,因此我不确定如何修改代码以通过tls进行身份验证并发送电子邮件....
i have this code which is part of a main program, to email from
within the program a log file:
<snip>
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
#else
close(sockfd);
#endif
}

however, my mailserver(for which i pay for hosting) is tls only for
security, and requires authentication, so I am not sure how to modify
the code to authenticate over tls and send an email....




套接字,tls,ssl等不是标准C的一部分,因此你需要在专用于你的实现或套接字的小组上询问

编程(如果有的话)。从它的外观来看,你支持Windows和POSIX系统的
,所以你可能要问几个

组。我建议comp.unix.programmer和微软

组之一作为起点,尽管你应该先查看他们的常见问题解答并在几天后阅读

。如果你在这里做到了,你可能已经意识到

你的问题不是主题。

-

Flash Gordon,生活在有趣的时代。

网站 - http://home.flash- gordon.me.uk/

comp.lang.c发布指南和介绍:
http://clc-wiki.net/wiki/Intro_to_clc


" Vladimir S. Oka" ; <无**** @ btopenworld.com>写道:
"Vladimir S. Oka" <no****@btopenworld.com> writes:
za****@gmail.com 写道:


[...]


[...]

int MailIt(char * mailserver,char * emailto,char * emailfrom,
char * emailsubject,char * emailmessage){
SOCKET sockfd;
WSADATA wsaData;
FILE * smtpfile;

#define bufsize 300
int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage) {
SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;

#define bufsize 300



2.宏通常是全大写的(与类型和变量不同)。



2. Macros are conventionally all-caps (unlike types and variables).




但是在< stdio.h>中定义的FILE是一个例外。


-

Keith Thompson(The_Other_Keith) ks *** @ mib。 org < http://www.ghoti.net/~kst>

圣地亚哥超级计算机中心< *> < http://users.sdsc.edu/~kst>

我们必须做点什么。这是事情。因此,我们必须这样做。



But FILE, defined in <stdio.h>, is an exception to this.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.


这篇关于smtp编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆